如何使用WebClient检索代理信息

时间:2014-11-17 16:31:45

标签: c# .net visual-studio-2010

我的应用通过客户代理服务器测试与网站的连接。

作为诊断的一部分,我想显示代理服务器返回的有关自身的信息,例如Server HTTP头的内容(例如:Server:Squid / 3.1.6),代理协议(例如作为HTML),...

如何在HTTP响应中检索代理服务器返回的此类信息?

编辑:不幸的是,许多人建议的返回的响应标头包含很少的东西而且没有关于代理的任何内容。我猜他们只是Web服务器返回的头文件并由代理转发。我的下一个想法是向代理发出一个虚假的CONNECT HTTP请求,看看他回复了什么。或者是否可以更深入地访问与代理的对话?

注意:平台要求:.NET3 max: - (

4 个答案:

答案 0 :(得分:0)

响应标头存储在WebClient.ResponseHeaders属性中。此属性存储上次WebClient调用的标头。如果您为多个调用重复使用相同的实例,则必须确保在每次调用后立即检索这些值。

更好的选择是使用直接HttpWebRequest调用或(在.NET 4+中)HttpClient,这样您就可以保留每个单独调用的响应进行处理。

ResponseHeaders是一个NameValueCollection,因此您可以按名称或通过HttpResponseHeader枚举引用特定标头,例如:

var header=myClient.ResponseHeaders[HttpResponseHeader.Server];

如果您不想

,则不必迭代所有标题或键

答案 1 :(得分:0)

WebClient.ResponseHeader是我想要的。

假设您正在使用Proxy,那么所有WebClient看到的是来自代理的请求,因此这将为您提供标头。您在创建对象时应该已经知道的代理协议...

从以上链接复制:

// Obtain the WebHeaderCollection instance containing the header name/value pair from the response.
WebHeaderCollection myWebHeaderCollection = myWebClient.ResponseHeaders;
Console.WriteLine("\nDisplaying the response headers\n");
// Loop through the ResponseHeaders and display the header name/value pairs. 
for (int i=0; i < myWebHeaderCollection.Count; i++)             
    Console.WriteLine ("\t" + myWebHeaderCollection.GetKey(i) + " = " + myWebHeaderCollection.Get(i));

答案 2 :(得分:0)

如果您正在使用WebClient类(http://msdn.microsoft.com/en-us/library/system.net.webclient_properties%28v=vs.110%29.aspx),则可以获得有关代理访问代理属性的所有信息。如果不是,您可以检查您的Request对象。

答案 3 :(得分:0)

您可以使用此代码显示here

中的响应标题
static void DownloadAndShowHeaders()
{
    using (WebClient client = new WebClient())
    {
        try
        {
            client.DownloadString("http://google.com");
            foreach (string name in client.ResponseHeaders.Keys)
            {
                Console.WriteLine(name + "=" + client.ResponseHeaders[name]);
            }
        }
        catch (WebException we)
        {
            Console.WriteLine(we.Status);
        }

        Console.ReadLine();
    }
}