Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用WebClient检索代理信息_C#_.net_Visual Studio 2010 - Fatal编程技术网

C# 如何使用WebClient检索代理信息

C# 如何使用WebClient检索代理信息,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,我的应用程序通过客户代理服务器测试与网站的连接 作为诊断的一部分,我想显示代理服务器返回的关于自身的信息,例如服务器HTTP头的内容,例如:server:Squid/3.1.6,代理协议,例如HTML 如何检索代理服务器在其HTTP响应中返回的此类信息 EDIT:不幸的是,正如许多人所建议的那样,返回的响应头只包含很少的内容,并且与代理无关。我猜它们只是web服务器返回并由代理转发的标题。我的下一个想法是向代理发出一个假的连接HTTP请求,看看他回复了什么。或者是否有更深入的渠道与代理人对话 注

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

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

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

EDIT:不幸的是,正如许多人所建议的那样,返回的响应头只包含很少的内容,并且与代理无关。我猜它们只是web服务器返回并由代理转发的标题。我的下一个想法是向代理发出一个假的连接HTTP请求,看看他回复了什么。或者是否有更深入的渠道与代理人对话


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

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

更好的选择是使用直接HttpWebRequest调用或在.NET4+HttpClient中使用,这样您就可以保留每个调用的响应以供处理

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

var header=myClient.ResponseHeaders[HttpResponseHeader.Server];
如果你不想,你不必迭代所有的标题或键

我想这就是你想要的

假设您使用的是代理,那么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类,则可以获得有关代理访问代理属性的所有信息。如果没有,则可以检查请求对象。

您可以使用此代码从


OP没有询问代理属性,而是询问代理在响应中返回的HTTP头,这就是为什么我告诉他检查请求对象,在那里我们可以找到关于请求的所有信息,包括HTTP头。请求对象如何包含服务器返回的信息?@IcaroCamelo OP询问的是中间代理(可能是未知代理)添加到响应中的响应头,而不是请求头。响应可以通过许多代理,例如服务器端的反向代理,或任何中间ISP。他们每个人都可以添加自己的标题。谢谢。不幸的是,返回的响应头只包含很少的内容,并且与代理无关。我猜它们只是web服务器返回并由代理转发的标题。我的下一个想法是向代理发出一个假的连接HTTP请求,看看他回复了什么。或者是否有更深入的访问与代理的对话?我不知道,但您必须使用HttpClient发送GET/POST以外的动词。这还可以让您控制请求和响应的发送方式。不幸的是,.NET4+不是部署原因的选项:我们的客户将使用该应用进行快速的现场连接测试。我们不能对已安装的运行时进行任何假设。由于它是Windows Vista+的一部分,我希望大多数仍然使用XP的客户都安装了.NET3,因此我可以期望它达到最大值。不需要这样的限制。只有40MB,您可以将其作为应用程序的一部分安装。无论如何,当您在有限的时间内致电客户时,您可以直接使用HttpWebRequest来指定HTTP地址,并将在全球范围内要求他在一台他与计算机管理员毫无关系的计算机上,通过公司互联网连接(而非您的专用DSL线路)为您运行连接测试,40MB与此无关-
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();
    }
}