我正在使用.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中设置user-agent标头,它不将其添加到初始CONNECT请求中。它确实将其添加到后续SSL流量中,但这不是所需的。
如果这是C ++,我只需调用WinHttpOpen()来创建sesson并设置pwszUserAgent参数来设置整个会话的用户代理。不幸的是我找不到.NET中的等价物。
有人能指出我正确的方向吗?我确信其他人必须遇到这个问题,在.NET中构建客户端应用程序。
答案 0 :(得分:0)
您将无法使用HttpWebRequest系列类发送User-Agent标头。 RFC说标题是可选的(应该是,而不是必须)
您可以向代理添加规则,以允许没有User-Agent标头或特定目标服务器的连接,或者最终使用.NET套接字类编写您自己的HTTP协议。
答案 1 :(得分: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
答案 2 :(得分: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/