C# 检查WebClient代理设置的标题

C# 检查WebClient代理设置的标题,c#,asp.net,C#,Asp.net,我正在通过一些执行请求,我想知道每个代理服务器设置了哪些头。现在我正在访问一个页面,该页面在html正文中打印出结果 using(WebClient client = new WebClient()) { WebProxy wp = new WebProxy("proxy url"); client.Proxy = wp; string str = client .DownloadString("http://www.pagethatp

我正在通过一些执行请求,我想知道每个代理服务器设置了哪些头。现在我正在访问一个页面,该页面在html正文中打印出结果

using(WebClient client = new WebClient())
{
    WebProxy wp = new WebProxy("proxy url");
    client.Proxy = wp;
    string str = client
                  .DownloadString("http://www.pagethatprintsrequestheaders.com");
}

WebClient不会显示修改后的标题,但页面会打印正确的标题。有没有什么方法可以在不访问像我的示例中那样打印它们的页面的情况下找出代理设置的标题?我必须创建自己的http侦听器吗?

当代理服务器设置自己的头时,它实际上是在执行自己的web请求。它甚至可以隐藏或覆盖使用
WebProxy
设置的某些标题

因此,只有目标页面(printsrequestheaders.com页面)才能可靠地看到代理设置的标题。无法保证代理服务器会将其发送给目标的头发送回您

换句话说,这实际上取决于代理服务器的实现。如果您使用的代理服务器基于Apache的
ProxyPass
,您可能会看到正在设置的头文件!如果它是一个自定义实现,那么您可能看不到它

您可以在回复返回后,首先尝试检查WebClient的
客户端.ResponseHeaders
。如果它不包含与(pagethatprintsrequestheaders.com)报告匹配的标题,那么它确实是一个自定义或修改的实现

然后,您可以创建自己的代理服务器,但这更复杂。您可能会启动一个EC2实例,在其上安装Squid//YourCustomProxy,并在
WebProxy
调用中使用它


您可能还需要修改您的问题,并解释为什么要阅读标题。对于你的总体目标,可能有一些解决方案根本不需要阅读标题,但可以通过其他方式来实现

当代理服务器设置自己的头时,它实际上是在执行自己的web请求。它甚至可以隐藏或覆盖使用
WebProxy
设置的某些标题

因此,只有目标页面(printsrequestheaders.com页面)才能可靠地看到代理设置的标题。无法保证代理服务器会将其发送给目标的头发送回您

换句话说,这实际上取决于代理服务器的实现。如果您使用的代理服务器基于Apache的
ProxyPass
,您可能会看到正在设置的头文件!如果它是一个自定义实现,那么您可能看不到它

您可以在回复返回后,首先尝试检查WebClient的
客户端.ResponseHeaders
。如果它不包含与(pagethatprintsrequestheaders.com)报告匹配的标题,那么它确实是一个自定义或修改的实现

然后,您可以创建自己的代理服务器,但这更复杂。您可能会启动一个EC2实例,在其上安装Squid//YourCustomProxy,并在
WebProxy
调用中使用它


您可能还需要修改您的问题,并解释为什么要阅读标题。对于你的总体目标,可能有一些解决方案根本不需要阅读标题,但可以通过其他方式来实现

看起来像是您通过代理从网络客户端发送请求,并且主机在www.pagethattprintsrequestheaders.com上接收到请求

如果代理向请求中添加头,您的webclient将永远无法在其请求中看到它们

        webclient             proxys request 
         request            with headers added
client -----------> proxy ----------------------> destination host
webclient只能看到它和代理之间的请求状态。代理将创建一个要发送到目标主机的新请求,并创建添加头的请求。它还支持由目标主机接收的请求(这就是为什么当它回显头文件时可以看到由代理添加的头文件)

当响应返回时,头由主机设置。代理可能会向响应中添加一些头,但即使添加了,它们也不可能与添加到请求中的头相同

            response                      response
        (forwarded by proxy)        (headers set by host)
client <------------------- proxy <------------------------- destination host
响应
(由代理转发)(由主机设置的标题)

客户端它看起来像是您通过代理从网络客户端发送请求,主机在www.pagethattprintsrequestheaders.com上接收到请求

如果代理向请求中添加头,您的webclient将永远无法在其请求中看到它们

        webclient             proxys request 
         request            with headers added
client -----------> proxy ----------------------> destination host
webclient只能看到它和代理之间的请求状态。代理将创建一个要发送到目标主机的新请求,并创建添加头的请求。它还支持由目标主机接收的请求(这就是为什么当它回显头文件时可以看到由代理添加的头文件)

当响应返回时,头由主机设置。代理可能会向响应中添加一些头,但即使添加了,它们也不可能与添加到请求中的头相同

            response                      response
        (forwarded by proxy)        (headers set by host)
client <------------------- proxy <------------------------- destination host
响应
(由代理转发)(由主机设置的标题)

客户机+1表示“您可能还想修改您的问题并解释为什么要阅读标题。可能有一些解决方案根本不需要阅读标题,但可以通过其他方式完成。”+1表示“您可能还需要修改您的问题,并解释为什么要阅读标题。对于您的总体目标,可能有一些解决方案根本不需要读取标题,但可以通过其他方式完成。“尝试使用System.Net跟踪记录通信:尝试使用System.Net跟踪记录通信: