如何使用网络客户端检索代理信息

本文关键字:代理 信息 检索 客户端 何使用 网络 | 更新日期: 2023-09-27 18:30:42

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

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

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

编辑:不幸的是,正如许多人所建议的那样,返回的响应标头包含的内容很少,也没有关于代理的内容。我想它们只是 Web 服务器返回并由代理转发的标头。我的下一个想法是向代理发出一个虚假的CONNECT HTTP请求,看看他回复了什么。还是与代理的对话有一些更深入的访问?

注:平台要求:。NET3 最大值 :-(

如何使用网络客户端检索代理信息

WebClient.ResponseHeader是你正在寻找的。

假设您使用的是代理,那么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));

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

您可以使用此代码显示响应标头,从此处

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();
    }
}

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

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

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

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

如果您不想,则不必遍历所有标头或键