【问题标题】:Requests library not properly directing HTTP requests through proxies请求库未通过代理正确引导 HTTP 请求
【发布时间】:2013-01-15 23:29:25
【问题描述】:

我知道如何很好地使用requests,但由于某种原因,我没有成功让代理工作。我提出以下要求:

r = requests.get('http://whatismyip.com', proxies={'http': 'http://148.236.5.92:8080'})

我得到以下信息:

requests.exceptions.ConnectionError: [Errno 10060] A connection attempt failed b
ecause the connected party did not properly respond after a period of time, or e
stablished connection failed because connected host has failed to respond

但是,我知道代理可以工作,因为使用节点:

request.get({uri: 'http://www.whatismyip.com', proxy: 'http://148.236.5.92:8080'},
    function (err, response, body) {var $ = cheerio.load(body); console.log($('#greenip').text());});

我得到以下(正确)响应:

148.236.5.92

此外,当我完全不同地尝试requests 请求时(例如,不在代理前面写http://),它只允许请求正常通过而无需通过代理或返回错误。

我在 Python 中做错了什么?

【问题讨论】:

    标签: python node.js proxy python-requests


    【解决方案1】:

    这是一个已知问题:https://github.com/kennethreitz/requests/issues/1074

    我不确定为什么要花这么长时间才能修复。不过,要回答您的问题,您并没有做错任何事情。

    【讨论】:

    • +1。但我相信它已经修复了,只是还没有打包成新版本并推送到 PyPI。因此,如果您使用 pip install -U git+https://github.com/kennethreitz/requests 而不仅仅是 pip install -U requests(或等效的 get-from-git-master-instead-of-PyPI,如果您不使用 pip),它应该可以工作。
    • 感谢@abarnert,这很有效。您应该将其添加为答案,我会接受。
    • @jdotjdot:我添加了一个答案。但我认为接受这个答案而不是我的答案可能会更好,因为从长远来看(而且很可能是很短的长期),答案将只是“升级到新版本”,以及所有的复杂性关于从git 升级将无关紧要。
    • @abarnet,我不知道它已经修复了。我以为 1.1.0 最近出来了,但还没有解决。无论哪种方式,您的答案都是正确的并已修复。
    【解决方案2】:

    正如 sigmavirus24 所说,这是一个 known issue,已修复,但尚未打包成新版本并推送到 PyPI。

    所以,如果你急需这个,你可以从 git repo 的 master 升级。

    如果您使用的是pip,这很简单。而不是这个:

    pip install -U requests
    

    这样做:

    pip install -U git+https://github.com/kennethreitz/requests
    

    如果您不使用pip,您可能必须明确git clone 回购,然后easy_install .python setup.py 或本地副本中的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多