我正在尝试使用VLC的HTTP接口读取当前播放列表(GET /requests/playlist.xml
)。
这在较旧版本的VLC中工作正常,但是在最近的版本中,他们添加了密码选项,然后将其强制为强制性。(没有用户名。)
我首先尝试使用以下操作:
request.Credentials = new NetworkCredential("", password);
request.PreAuthenticate = true;
然而,这导致了webException报告401错误。侦听流量显示,它发送了一个没有授权标题的请求,然后立即报告了该错误而无需尝试实际身份验证。(VLC确实正确地响应了www-phatenticate挑战。)
如果我指定了一个非空白的用户名,则它将发送与以前相同的请求,但随后进行了第二个请求,该请求确实指定了授权标题 - 然后由于VLC拒绝用户名而失败。
。我终于通过明确设置标头来使其工作:
var credential = Convert.ToBase64String(Encoding.Default.GetBytes(":" + password));
request.Headers[HttpRequestHeader.Authorization] = "Basic " + credential;
这似乎本来应该有效的。这是.NET(或Wininet)中的错误,它不能应付空白的用户名;还是VLC中的错误,它不使用用户名;还是我的代码中的错误,我需要设置其他内容?
我遇到了同样的问题,尽管我正在使用一个空字符串作为密码。您可以使用诸如ILSPY之类的工具来编译.NET库,以便您可以查看其源代码。尽管我没有找到任何东西,但也许您可以使用它来确定它是否是.NET问题。我遇到了使用基本和消化授权的问题,所以我会看看httpwebrequest(我认为您正在使用)。
似乎手动设置授权标题是现在的方法。由于您使用的是基本,因此,如果您关心密码的安全性,则如果您还不实施SSL,则可能需要研究SSL。