我使用以下代码使用代理连接到网站:
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,我可以在它出去之前停止连接吗?
答案 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 会为所有内容使用默认页面,以便您的程序知道“何时”它遇到了有问题的代理。
这是一个黑客,甚至可能是丑陋的黑客。
我做到了,然后愉快地刮了网。
希望能帮到你