【发布时间】:2014-02-06 01:45:33
【问题描述】:
我正在尝试使用 VLC 的 HTTP 接口读取当前播放列表 (GET /requests/playlist.xml)。
这在旧版本的 VLC 中运行良好,但在最近的版本中,他们添加了密码选项,然后强制设置。 (没有用户名。)
我第一次尝试使用这个:
request.Credentials = new NetworkCredential("", password);
request.PreAuthenticate = true;
但是,这会导致 WebException 报告 401 错误。窥探流量发现它发送了一个没有授权标头的请求,然后立即报告错误而没有尝试进行实际身份验证。 (VLC 确实正确响应了 WWW-Authenticate 质询。)
如果我指定了一个非空白用户名,那么它会发送与之前相同的请求,但随后会发出第二个请求,该请求确实指定了 Authorization 标头 - 然后由于 VLC 拒绝该用户名而失败。
我终于设法通过明确设置标头使其工作:
var credential = Convert.ToBase64String(Encoding.Default.GetBytes(":" + password));
request.Headers[HttpRequestHeader.Authorization] = "Basic " + credential;
不过,这似乎原本应该有效。这是.NET(或WinInet)中的一个错误,它无法处理空白用户名;还是VLC中的一个错误,它不使用用户名;还是我的代码中的错误,我需要设置其他内容?
【问题讨论】:
标签: c# .net authentication httpwebrequest vlc