python请求经过身份验证的代理httplib.BadStatusLine

python请求经过身份验证的代理httplib.BadStatusLine,python,curl,proxy,python-requests,Python,Curl,Proxy,Python Requests,通过python请求验证的代理返回以下错误: >>> import requests >>> proxies = {'https': 'http://username:password@proxy.company.com:8080',} >>> requests.get('https://api.github.com/',proxies=proxies,verify=False) Traceback (most recent call las

通过python请求验证的代理返回以下错误:

>>> import requests
>>> proxies = {'https': 'http://username:password@proxy.company.com:8080',}
>>> requests.get('https://api.github.com/',proxies=proxies,verify=False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.6/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.6/site-packages/requests/sessions.py", line 335, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.6/site-packages/requests/sessions.py", line 438, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.6/site-packages/requests/adapters.py", line 327, in send
    raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='proxy.company.com', port=8080): Max retries exceeded with url: https://api.github.com/ (Caused by <class 'httplib.BadStatusLine'>: )

如何排除故障?

您的代理确实是HTTP而不是HTTPS。要将代理与HTTPS一起使用,它需要使用connect协议,而不是HTTP,并使用connect basic auth。现在我没有可用的带有auth的HTTPS代理,也不知道如何安装这样的系统,但是如果您只有
,会发生什么https://username:password@proxy.company.com:8080“
在那里


另一方面,您可能希望确保requests/urllib3是最新的

请求从2.0开始就支持HTTP代理:

顺便说一句,它确实尊重代理环境变量,因此您只需设置:

export http_proxy="http://username:password@proxy.company.com:8080"
export https_proxy=$http_proxy

有关requests 1.x中代理支持状态的更多详细信息,请参阅以下博文:

Antti,感谢您的回复。我们通过HTTP代理使用HTTPS。因此,将代理更改为HTTPS的目标主机并不能解决此问题。我已经更新了问题中的curl示例,以澄清HTTP代理。这应该在Requests 2.0中解决:如果你回答这个问题,我会将其标记为已解决。非常感谢。
export http_proxy="http://username:password@proxy.company.com:8080"
export https_proxy=$http_proxy