Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python代理支持通过本地连接使用错误的代理_Python_Python 2.7_Proxy_Urllib2 - Fatal编程技术网

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

Python代理支持通过本地连接使用错误的代理,python,python-2.7,proxy,urllib2,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 我通过向whatismy

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

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,我能在它断开之前停止它吗?

我会尽力解释这个问题,因为我以前已经遇到过这个问题

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

如果您查看代码,作者甚至承认它不是最佳的:

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.)
所以它会先调用代理,如果有代理,它会使用,如果没有

但是如果有任何错误(错误的url,错误的代理),它将向连接处理程序返回NONE

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

现在回到你的问题:

您可以在使用之前检查代理,并丢弃坏的代理。但仍然存在一个问题,即在程序运行期间,某些代理将死亡或更改

为此,您可以修改urllib2以返回localproxy,而不是None。 在这个场景中,您的本地代理将对所有内容使用默认页面,这样您的程序就可以知道“何时”碰到有问题的代理

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

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


希望这对您有所帮助

如果您指定了OST可能会有帮助代理变量中的内容?如何填充它?在通过
ping
或其他方法使用代理之前,是否可以尝试测试每个代理?代理从代理列表中传入的单个代理。我可以测试,但这可能会减慢脚本的速度。另外,ping通过的可能性仍然很小,但连接可能会失败,我不希望出现这种情况。“连接失败的坏代理”是什么意思?您从代理服务器获得的响应区域是什么?你能提出卷曲请求吗?请:curl-x“”-vvHi谢谢你的回答。你能给我指出一个正确的方向,将无代理连接指向另一个页面吗?这是一个肮脏的把戏…只需阻止计算机的传出端口80。。。。代理通常在不同于80(http)的端口上工作,如(4290 squid或8080)。如果您在防火墙上阻止到端口80的传出连接。。。你的任务完成了;)这是肮脏的,但工作和快速。。。我做到了,并且完成了报废。。。