使用HttpWebRequest进行VLC身份验证

时间:2014-02-06 01:45:33

标签: c# .net authentication httpwebrequest vlc

我正在尝试使用VLC的HTTP接口来读取当前播放列表(GET /requests/playlist.xml)。

这在旧版VLC中运行良好,但在最近的版本中,他们添加了密码选项,然后强制使用。 (没有用户名。)

我首先尝试使用它:

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

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

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

我终于设法通过明确设置标题来实现它:

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

但这似乎应该是原本应该起作用的东西。这是.NET(或WinInet)中的一个错误,它无法处理空白用户名;或者它是VLC中的一个错误,它不使用用户名;或者它是我的代码中的错误,我需要设置其他东西吗?

1 个答案:

答案 0 :(得分:0)

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

似乎手动设置Authorization标头是现在的方法。由于您使用的是Basic,如果您关心密码的安全性,如果您尚未实施SSL,则可能需要查看SSL。