【问题标题】:urlib2.urlopen through proxy fails after a few calls几次调用后,通过代理的 urllib2.urlopen 失败
【发布时间】:2011-07-04 08:53:45
【问题描述】:

编辑: 经过一番折腾,似乎 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())

提前致谢!

【问题讨论】:

    标签: python authentication proxy urllib2 urlopen


    【解决方案1】:

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

    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 模块。

    【讨论】:

    • 似乎 keepalive 模块已从 urlgrabber 中消失(请参阅 jwat 的答案:stackoverflow.com/questions/1037406/…)。但是,urlgrabber.urlgrab 支持代理并成功检索所有文件。我已将相关代码添加到问题中。
    【解决方案2】:

    代理可能会限制您的请求。我猜它认为你看起来像个机器人。

    你可以添加一个超时,看看是否能让你通过。

    【讨论】:

    • 感谢您的建议!尽管如此,即使请求之间有整整 10 秒的睡眠时间,仍然没有乐趣......这很奇怪!
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多