Python requests API using proxy for https request

2019-03-22 02:00发布

问题:

I've been struggling with my company proxy to make an https request.

import requests
from requests.auth import HTTPProxyAuth

proxy_string = 'http://user:password@url_proxt:port_proxy'

s = requests.Session()
s.proxies = {"http": proxy_string , "https": proxy_string}
s.auth = HTTPProxyAuth(user,password)

r = s.get('http://www.google.com') # OK
print(r.text)
r = s.get('https://www.google.com',proxies={"http": proxy_string , "https": proxy_string}) #OK
print(r.text)
r = s.get('https://www.google.com') # KO
print(r.text)

When KO, I have the following exception :

HTTPSConnectionPool(host='www.google.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407 Proxy Authentication Required',)))

I looked online but didn't find someone having this specific issue with HTTPS.

Thank you for your time

回答1:

Thanks to the amazing help of Lukasa, I solved my issue.

Please see discussion on fix here : https://github.com/kennethreitz/requests/issues/2911

or set :

session.trust_env=False


回答2:

I personally solved the above problem on my system by updating the environment variables http_proxy,https_proxy,socks_proxy,ftp_proxy.

First enter the command on your terminal : printenv

This should show you the environment variables on your system.

In my case intially: http_proxy=http://proxyserver:port/

I changed it to : http_proxy=http://username:password@proxy:port/

using the command export http_proxy="http://username:password@proxy:port/"

Similarly for https_proxy,socks_proxy,ftp_proxy



回答3:

Other way i have resolved is - speak with your corporate IT administrator and find a direct proxy port which connects to external domain (with / without password)

pip install --proxy=http://proxyhost:proxy_port pixiedust

Found from other colleagues using the proxy (proxy_port direct connection) in their eclipse settings (network)