Python代理支持通过与错误代理的本地连接

时间:2014-04-03 09:10:41

标签: python python-2.7 proxy urllib2

我使用以下代码使用代理连接到网站:

proxy_support = urllib2.ProxyHandler({"http":"http://"+proxy})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
html = urllib2.urlopen(url).read()

我正在轮换代理列表,但它们经常更改。每当我遇到此连接失败的错误代理时,连接都会通过我的IP。

我通过向whatismyip发送垃圾邮件来测试这个问题,偶尔会出现我的IP。

如果尝试使用我的家庭IP,我可以在它出去之前停止连接吗?

1 个答案:

答案 0 :(得分:2)

我会尽力解释这个问题,因为我之前已经有了这个问题。

如果连接处理程序urllib2上有代理集将启动,请检查它(正确的地址?用户?密码?端口?)并将其用于连接。

如果你看一下代码,作者甚至承认它不是最佳的:

The opener will use several default handlers, including support
for HTTP and FTP.  If there is a ProxyHandler, **it must be at the
front of the list of handlers.**  (Yuck.)

所以它之前调用代理,如果有代理,它将使用,如果不是否......

但是如果有任何错误(错误的网址,错误的代理),将NONE 返回给连接处理程序。

因此连接处理程序将连接,因为它没有任何代理集。

现在回到你的问题:

您可以在使用之前检查代理并丢弃不良代理。但是你仍然遇到一些问题,即一些代理会在你的程序运行期间死亡或改变。<​​/ p>

为此,您可以修改urllib2以返回localproxy而不是None。 在这种情况下,您的localproxy 会为所有内容使用默认页面,以便您的程序知道“何时”它遇到了有问题的代理。

这是一个黑客,甚至可能是丑陋的黑客。

我做到了,然后愉快地刮了网。

希望能帮到你