【问题标题】:VLC authentication using HttpWebRequest使用 HttpWebRequest 的 VLC 身份验证
【发布时间】: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


    【解决方案1】:

    我遇到了同样的问题,尽管我使用的是空字符串作为密码。您可以使用诸如 ILSpy 之类的工具来反编译您正在使用的 .NET 库,以便查看它们的源代码。虽然我没有找到任何东西,但也许您可以使用它来确定它是否是 .NET 问题。我在使用 Basic 和 Digest 授权时都遇到了这个问题,所以我会看看 HttpWebRequest(我假设你正在使用它)。

    目前看来手动设置授权标头是可行的方法。由于您使用的是 Basic,如果您关心密码的安全性,如果您尚未实施 SSL,则可能需要研究一下它。

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多