【问题标题】:Webclient not using proxy settingsWebclient 不使用代理设置
【发布时间】:2013-02-10 20:44:18
【问题描述】:

我一直在使用 .NET WebClient 类,但每当我尝试使用代理设置(此处仅指定其中一个 IP 地址而没有任何凭据 http://hidemyass.com/proxy-list/)时,目标服务器仍然认为我处于正常状态IP 地址。

“正常”是指我们的 ISP 提供的静态 IP 地址,而不是代理 IP。

WebClient wc = new WebClient();
wc.Proxy = new WebProxy("122.72.11.200");
Console.Write(wc.DownloadString("hostip.info"));

我是否遗漏了一些非常明显的东西?

【问题讨论】:

    标签: .net proxy webclient


    【解决方案1】:

    许多(非匿名)代理将在请求中发送包含原始 IP 地址的标头。见Getting the client IP address: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, what else could be useful?

    也许 hostip.info 正在使用这样的标头来查找您的 IP 地址。您可以通过向 HTTP 回显服务发出请求来检查代理发送的标头,例如http://scooterlabs.com/echo 而不是 http://hostip.info

    顺便说一句:您如何从输出(html 页面?)中得出 hostip.info 返回您的“正常”IP 地址的结论。并且不应该将像 http://www.hostip.info 这样的完整 URI 作为参数传递给 DownloadString() 吗?

    【讨论】:

      【解决方案2】:

      您可能会看到自己的外部 IP,因为您没有提供端口。 WebProxy(Address) 在内部调用 CreateProxyUri() 函数,将您的 Ip 转换为 uri。这意味着从这里开始,端口 80 将用于执行请求,而您的代理很可能需要不同的端口(查看您提供的站点,情况似乎是这样)

      private static Uri CreateProxyUri(string address) {
          if (address == null) {
              return null;
          }
          if (address.IndexOf("://") == -1) {
              address = "http://" + address;
          }
          return new Uri(address);
      }
      

      您可以通过调用WebProxy(address, port) 构造函数而不是使用正确的端口来修复它。或者通过将:port 附加到地址字符串,其中port 描述了一个端口号。

      【讨论】:

        猜你喜欢
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2020-10-12
        • 1970-01-01
        相关资源
        最近更新 更多