Web客户端不使用代理设置

时间:2013-02-10 20:44:19

标签: .net proxy webclient

我一直在使用.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"));

我错过了一些非常明显的东西吗?

2 个答案:

答案 0 :(得分:0)

许多(非匿名)代理将在请求中发送包含原始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

BTW:你如何从输出(一个html页面?)得出结论,hostip.info正在返回你的正常情况' IP地址。并且不应将http://www.hostip.info之类的完整URI作为参数传递给DownloadString()吗?

答案 1 :(得分:0)

您可能正在看到自己的外部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表示端口号。

相关问题