在SSL CONNECT over SSL期间设置用户代理头?

时间:2010-03-04 09:18:37

标签: c# .net ssl webclient user-agent

我正在使用.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中构建客户端应用程序。

3 个答案:

答案 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/