如何使用网络客户端检索代理信息
本文关键字:代理 信息 检索 客户端 何使用 网络 | 更新日期: 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];
如果您不想,则不必遍历所有标头或键