1

我正在使用 .NET 2.0 中的WebClient类通过 SSL 执行 HTTP POST。

目前我正在手动设置用户代理标头,如下所示:

wc = new WebClient();
wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

这工作正常,除非我通过代理服务器发出请求,该代理服务器执行 HTTP 隧道并期望 HTTP CONNECT 命令中有特定的用户代理标头。

当代理充当 SSL 的隧道时,它最初会收到一个 HTTP CONNECT,告诉它客户端尝试连接的位置。

问题是,如果您通过 HttpWebRequest.UserAgent 或 WebClient.Headers.Add 在 .NET 中设置用户代理标头,它不会其添加到初始 CONNECT 请求中。它确实将其添加到后续 SSL 流量中,但这不是所需要的。

如果这是 C++,我只需调用 WinHttpOpen() 来创建 sesson 并设置 pwszUserAgent 参数来设置整个会话的用户代理。不幸的是,我在 .NET 中找不到等价物。

谁能指出我正确的方向?我确信其他人在.NET 中构建客户端应用程序时一定遇到过这个问题。

4

3 回答 3

0

您将无法使用 HttpWebRequest 系列类发送 User-Agent 标头。RFC 说标头是可选的(应该而不是必须)

您可以向代理添加一条规则,以允许没有用户代理标头的连接,或者针对特定目标服务器,或者最终使用 .NET 套接字类编写您自己的 HTTP 协议。

于 2010-03-08T22:20:15.470 回答
0

尝试使用 HttpWebRequest(框架 2.0):

HttpWebRequest httpReq = HttpWebRequest.Create(new Uri("www.website.com"));
httpReq.Headers["user-agent"] = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"; 

我将它与 Windows Phone 7 sdk 一起使用,它可以工作。

欲了解更多信息: http: //msdn.microsoft.com/en-gb/library/system.net.httpwebrequest (v=vs.80).aspx

于 2012-12-05T07:01:00.047 回答
0

设置代理应该就够了

WebClient client = new WebClient();
client.Headers["User-Agent"] =
    "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) " +
    "(compatible; MSIE 6.0; Windows NT 5.1; " +
    ".NET CLR 1.1.4322; .NET CLR 2.0.50727)";
client.Proxy = new WebProxy(your_proxy_url, true);

your_proxy_url 可能类似于http://proxy.company.com:8080/

于 2013-03-27T16:25:17.147 回答