更新:
如果您刚刚遇到这个问题,一般的要点是我正在尝试通过代理创建一个 HttpWebRequest,并且我从我们奇怪的代理服务器获得了 407。IE、Firefox、Chrome 都成功地协商代理,Adobe Air 应用程序也是如此。谷歌浏览器网络安装程序实际上失败可能很重要,我们必须使用离线安装程序。
多亏了 Ian 的链接,我才得以进入下一阶段。它现在正在向代理发送一个令牌,但是第三阶段没有通过,所以带有用户名/密码哈希的请求没有被 .NET 发送,因此没有返回 HTML。
我在用:
- IE6 用户代理
- Windows 7的
- Scansafe 代理
- .NET 3.5
这是等同于以下日志的最新代码:
HttpWebRequest request = HttpWebRequest.Create("http://www.yahoo.com") as HttpWebRequest;
IWebProxy proxy = request.Proxy;
// Print the Proxy Url to the console.
if (proxy != null)
{
// Use the default credentials of the logged on user.
proxy.Credentials = CredentialCache.DefaultCredentials;
}
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.Accept = "*/*";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream stream = response.GetResponseStream();
例外
WebException (407) 需要身份验证。
正在使用的代理
代理客户端是我们服务器机房中的Scansafe硬件设备,它(一旦通过 NTLM 验证)然后将您的 HTTP 流量定向到其服务器以过滤流量。
System.Net 跟踪输出
IE 成功协商代理
解决方案
我还没有真正找到解决方案,但感谢 Feroze 和 Eric,我找到了一种解决方法,并发现实际的代理(而不是它的配置)是主要问题。这可能是 3 个变量的一个模糊问题:.NET HttpWebRequest 的实现、Windows 7,当然还有我们机架中的 Scansafe 硬件客户端;但如果没有 MSDN 支持请求,我将不会发现。