c# - 407 需要身份验证 - 未发送质询

标签 c# proxy httpwebrequest http-status-code-407

更新:
如果您刚刚遇到这个问题,一般要点是我正在尝试通过代理创建 HttpWebRequest,并且我从我们奇怪的代理服务器收到 407。 IE、Firefox、Chrome 都设法成功协商代理,Adobe Air 应用程序也是如此。 Google Chrome 网络安装程序实际上失败可能很重要,我们必须使用离线安装程序。

感谢 Ian 的链接,我已经进入了下一阶段。它现在正在向代理发送回 token ,但是第 3 阶段没有通过,因此 .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) Authentication Required.

正在使用的代理

代理客户端是一个Scansafe我们服务器机房中的硬件设备(一旦使用 NTLM 进行身份验证)然后将您的 HTTP 流量定向到其服务器以过滤流量。

System.Net 跟踪输出

IE 成功协商代理

解决方案

我还没有真正找到解决方案,但多亏了 Feroze 和 Eric,我找到了一个解决方法,并发现实际的代理(而不是它的配置)是主要问题。这可能是一个有 3 个变量的模糊问题:.NET HttpWebRequest 的实现、Windows 7,当然还有我们机架中的 Scansafe 硬件客户端;但如果没有 MSDN 支持请求,我将无法找到答案。

最佳答案

如果要为代理设置凭据,难道不应该在 request.Proxy 对象而不是 request 对象上设置凭据吗?

http://msdn.microsoft.com/en-us/library/system.net.webproxy.credentials.aspx

此外,请记住,您需要发出 HTTP/1.1 请求(或者从技术上讲,任何带有 Keep-Alive 的请求)才能成功使用 NTLM/协商身份验证。

(Fiddler 的“Auth”检查器将为您分解 NTLM 身份验证 blob,如果您还没有看的话。)

关于c# - 407 需要身份验证 - 未发送质询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443617/

相关文章:

function - Scala 是否提供了一种在不重复参数列表的情况下实现 "proxy"或 "decorate"函数的方法?

Apache 和 mod_proxy 不处理 HTTP 100-从客户端 HTTP 417 继续

c# - 尝试 POST 到 RESTful 服务时尝试 webRequest.GetRequestStream 时发生 System.Net.WebException

c# - 在 C# 后端代码中的 http get 请求中包含原始文本

c# - WPF DataGrid 未在 PropertyChanged 上更新

c# - C# 中的 StringBuilder 性能?

c# - 处理发送到 REST Web 服务的 JSON 字符串中的 & 字符的正确方法

c# - 当值为空时,Razor html 标签不会获取 ID

Apache 虚拟主机 - Mod 代理问题

c# - 有没有办法在 ASP.NET MVC 3 RC2 中禁用 JSON ModelBinder?