【问题标题】:Python proxy support going through local connection with bad proxyPython 代理支持通过与错误代理的本地连接
【发布时间】:2014-04-03 09:10:40
【问题描述】:

我正在使用以下代码通过代理连接到网站:

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,我可以在连接断开之前停止连接吗?

【问题讨论】:

  • 如果您指定您的操作系统可能会有所帮助
  • 这可能会有所帮助stackoverflow.com/questions/2645372/…
  • 你的proxy 变量中有什么?你如何填充它?您可以在通过ping 或其他方法使用之前测试每个代理吗?
  • 代理从代理列表传入的单个代理。我可以测试,但这可能会减慢脚本的速度。此外,仍然有很小的机会 ping 可以通过,但连接可能会失败,我不希望这样。
  • “连接失败的错误代理”是什么意思?您从代理服务器获得什么响应区域?请问您能否提出 curl 请求: curl -x"" "" -vv

标签: python python-2.7 proxy urllib2


【解决方案1】:

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

如果在连接处理程序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.)

所以它之前调用代理所以如果有代理它会使用如果没有...

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

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

现在回到你的问题:

您可以在使用它之前检查代理并丢弃坏的。但是你仍然有一些代理会在你的程序运行期间死亡或改变的问题。

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

这是一个 hack,甚至是丑陋的 hack。

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

希望对你有帮助

【讨论】:

  • 您好,感谢您的回答。您能否指出我将无代理连接指向不同页面的正确方向?干杯
  • 好吧,有一个肮脏的把戏......只需阻止来自计算机的传出端口 80......代理通常在不同于 80 (http) 的端口上工作,例如(4290 squid 或 8080)。如果您在防火墙处阻止到端口 80 的传出连接...您就完成了;)它很脏,但工作速度很快...我做到了并完成了报废...
猜你喜欢
  • 1970-01-01
  • 2020-09-05
  • 2013-10-10
  • 2023-03-16
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多