【问题标题】:Python Proxy Error With Requests Library请求库的 Python 代理错误
【发布时间】:2012-02-10 08:38:37
【问题描述】:

我正在尝试通过 Python 中的代理服务器访问网络。我正在使用请求库,但在验证代理时遇到问题,因为我使用的代理需要密码。

proxyDict = { 
          'http'  : 'username:mypassword@77.75.105.165', 
          'https' : 'username:mypassword@77.75.105.165'
        }
r = requests.get("http://www.google.com", proxies=proxyDict)

我收到以下错误:

Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
r = requests.get("http://www.google.com", proxies=proxyDict)
File "C:\Python27\lib\site-packages\requests\api.py", line 78, in get
:param url: URL for the new :class:`Request` object.
File "C:\Python27\lib\site-packages\requests\api.py", line 65, in request
"""Sends a POST request. Returns :class:`Response` object.
File "C:\Python27\lib\site-packages\requests\sessions.py", line 187, in request
def head(self, url, **kwargs):
File "C:\Python27\lib\site-packages\requests\models.py", line 407, in send
"""
File "C:\Python27\lib\site-packages\requests\packages\urllib3\poolmanager.py", line     127, in proxy_from_url
File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line    521, in connection_from_url
File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 497, in get_host
ValueError: invalid literal for int() with base 10: 'h6f2v6jh5dsxa@77.75.105.165'

我该如何解决这个问题?

提前感谢您的帮助。

【问题讨论】:

  • 将正确答案标记为正确是一种礼貌

标签: python http proxy python-requests proxies


【解决方案1】:

您应该从proxyDict 中删除嵌入的用户名和密码,并改用auth 参数。

import requests
from requests.auth import HTTPProxyAuth

proxyDict = { 
          'http'  : '77.75.105.165', 
          'https' : '77.75.105.165'
        }
auth = HTTPProxyAuth('username', 'mypassword')

r = requests.get("http://www.google.com", proxies=proxyDict, auth=auth)

【讨论】:

  • 谢谢,我试过了,它解决了错误,但它仍然没有连接到代理。当我查看返回的标头(r.headers)时,其中一个是'proxy-connection':'close',这似乎意味着连接到代理的时间太长,有没有办法在请求之前进行身份验证网址?
  • @MarkCollier,请尝试编辑答案中的代码。在第一个版本中是错误的。添加了HTTPProxyAuth,现在应该可以了。
  • from requests.auth import HTTPProxyAuth Traceback(最近一次调用最后一次):文件“”,第 1 行,在 from requests.auth import HTTPProxyAuth ImportError: cannot import name HTTPProxyAuth
  • @MarkCollier,升级requestspip install --upgrade requests
  • @MarkCollier,您的意思是代理连接错误,还是无法导入名称?我已经在本地代理服务器上测试了这段代码,它可以工作。当我输入错误的用户名或密码时,r.status_code407。你的是什么?
【解决方案2】:

您可以为此使用urllib 库。

from urllib import request
request.urlopen("your URL", proxies=request.getproxies())

【讨论】:

    【解决方案3】:

    我在 Windows 上遇到了类似的问题,发现让requests 工作的唯一方法是在我启动 Python 之前将代理设置为环境变量。对你来说,这将是这样的:

    set HTTP_PROXY=http://77.75.105.165
    set HTTPS_PROXY=https://77.75.105.165
    

    您可能还想检查是否需要特定端口,如果需要,请将其设置在 url 之后。例如,如果端口是 8443 则执行:

    set HTTP_PROXY=http://77.75.105.165:8443
    set HTTPS_PROXY=https://77.75.105.165:8443
    
    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 2016-10-19
    • 2018-08-05
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    相关资源
    最近更新 更多