Skip to main content
 首页 » 编程设计

c#之检查由 WebClient 代理设置的 header

2024年02月01日28dudu

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

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

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

请您参考如下方法:

当代理服务器设置自己的 header 时,它实际上是在执行自己的网络请求。它甚至可以隐藏或覆盖您使用 WebProxy 设置的一些 header 。

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

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

您可以先尝试检查client.ResponseHeaders property在您的响应返回后的 WebClient 的。如果这不包含与 (pagethatprintsrequestheaders.com) 报告相匹配的 header ,那么它确实是自定义或修改的实现。

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

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