2014-02-06 38 views
0

我试图使用VLC的HTTP接口来读取当前播放列表(GET /requests/playlist.xml)。使用HttpWebRequest的VLC验证

这在旧版本的VLC中工作正常,但在最近的版本中他们添加了一个密码选项,然后使其成为强制性的。 (没有用户名)

我第一次使用这个尝试:

request.Credentials = new NetworkCredential("", password); 
request.PreAuthenticate = true; 

然而这导致引发WebException报告一个401错误。侦听流量显示它发送了一个没有授权标头的请求,然后立即报告错误而未尝试实际进行身份验证。 (VLC没有正确回应WWW-Authenticate挑战。)

如果我指定一个非空白的用户名,那么它将发送与之前相同的请求,但随后会跟进指定授权标头的第二个请求 - 然后由于VLC拒绝用户名而失败。

我终于设法得到它通过明确设置标题的工作:

var credential = Convert.ToBase64String(Encoding.Default.GetBytes(":" + password)); 
request.Headers[HttpRequestHeader.Authorization] = "Basic " + credential; 

这似乎喜欢的事,应该有,最初的工作,虽然。这是.NET(或WinInet)中的一个错误,它无法应付空白的用户名;或者它是VLC中的一个错误,它不使用用户名;或者它是我的代码中的一个错误,我需要设置其他东西?

回答

0

我有同样的问题,尽管我使用空字符串作为密码。有些工具可用于反编译您正在使用的.NET库,因此您可以查看其源代码。虽然我还没有找到任何东西,也许你可以用它来确定它是否是一个.NET问题。我有这个问题发生使用基本和摘要授权,所以我会看看HttpWebRequest(我假设你正在使用)。

似乎手动设置授权标题是现在的方式。由于您使用的是基本版,如果您关心密码的安全性,如果您尚未实施,则可能需要查看SSL。