python - 几次调用后,通过代理的 urllib2.urlopen 失败

标签 python authentication proxy urllib2 urlopen

编辑: 经过多次调整后,urlgrabber 似乎在 urllib2 失败的地方成功了,即使在每个文件后告诉它关闭连接也是如此。似乎 urllib2 处理代理的方式或我使用它的方式可能有问题! 无论如何,这是在循环中检索文件的最简单的可能代码:

import urlgrabber

for i in range(1, 100):
    url = "http://www.iana.org/domains/example/"
    urlgrabber.urlgrab(url, proxies={'http':'http://<user>:<password>@<proxy url>:<proxy port>'}, keepalive=1, close_connection=1, throttle=0)

大家好!

我正在尝试编写一个非常简单的 python 脚本来通过 urllib2 抓取一堆文件。

这个脚本在工作时需要通过代理(如果在内网抓取文件,即没有代理,我的问题不存在)。

在多次请求“HTTPError: HTTP Error 401: basic auth failed”后,该脚本失败。知道为什么会这样吗?代理似乎拒绝了我的身份验证,但为什么呢?前几个 urlopen 请求正确通过!

编辑:在请求之间添加 10 秒的休眠以避免代理可能执行的某种限制并没有改变结果。

这是我的脚本的简化版本(显然已删除识别信息):

import urllib2

passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
passmgr.add_password(None, '<proxy url>:<proxy port>', '<my user name>', '<my password>')
authinfo = urllib2.ProxyBasicAuthHandler(passmgr)

proxy_support = urllib2.ProxyHandler({"http" : "<proxy http address>"})
opener = urllib2.build_opener(authinfo, proxy_support)
urllib2.install_opener(opener)

for i in range(100):
with open("e:/tmp/images/tst{}.htm".format(i), "w") as outfile:
    f = urllib2.urlopen("http://www.iana.org/domains/example/")
    outfile.write(f.read())

提前致谢!

最佳答案

您可以使用 urlgrabber 中的保活处理程序来最小化连接数。模块。

import urllib2
from keepalive import HTTPHandler
keepalive_handler = HTTPHandler()
opener = urllib2.build_opener(keepalive_handler)
urllib2.install_opener(opener)

fo = urllib2.urlopen('http://www.python.org')

我不确定这是否会与您的代理设置一起正常工作。 您可能需要破解 keepalive 模块。

关于python - 几次调用后,通过代理的 urllib2.urlopen 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118670/

相关文章:

python - 在 Python 中使用 Twitter 脚本的 OAuth 不工作

python - 在Python中将矩阵列表转换为仅一个2D矩阵

没有全局范围的 Laravel 身份验证

JavaScript 代理 : How to Empty Array Target

python - 通过 HTTP 服务日志

python - 如何避免在内部 Python 样式循环中调用相同的函数

security - Symfony2 in_memory 用户提供程序问题

node.js - 如何在 Node.js 中重用 Play Framework 2.2 设置的签名 cookie?

proxy - 在 MAC 上使用 Safari 时,Charles 代理不捕获本地主机流量

java - 在littleproxy中设置远程ip和端口