我正在使用 WebClient .NET 2.0 中的类以通过 SSL 执行 HTTP POST。
目前我正在手动设置用户代理 header ,如下所示:
wc = new WebClient();
wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
这工作正常,除了当我通过执行 HTTP 隧道的代理服务器发出请求并期望 HTTP CONNECT 命令中的特定用户代理 header 时。
当代理充当 SSL 的隧道时,它最初会收到一个 HTTP CONNECT,告诉它客户端正在尝试连接到哪里。
问题是,如果您通过 HttpWebRequest.UserAgent 或 WebClient.Headers.Add 在 .NET 中设置用户代理 header ,它不会将其添加到初始 CONNECT 请求中。它确实会将其添加到后续的 SSL 流量中,但这不是所需要的。
如果这是 C++,我会简单地调用 WinHttpOpen() 来创建 session 并设置 pwszUserAgent 参数来为整个 session 设置用户代理。不幸的是,我在 .NET 中找不到等效项。
谁能指出我正确的方向?我确信其他人一定遇到过在 .NET 中构建客户端应用程序的问题。
最佳答案
您将无法使用 HttpWebRequest 系列类发送 User-Agent header 。 RFC 说 header 是可选的(应该而不是必须)
您可以向代理添加规则以允许没有 User-Agent header 的连接,或针对特定目标服务器,或者最终使用 .NET 套接字类编写您自己的 HTTP 协议(protocol)。
关于c# - 在 HTTP CONNECT over SSL 期间设置用户代理 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378031/