How to handle proxies in urllib3
Asked Answered
G

2

15

I am having trouble finding solid examples of how to build a simple script in urllib3 which opens a url (via a proxy), then reads it and finally prints it. The proxy requires a user/pass to authenticate however it's not clear to me how you do this? Any help would be appreciated.

Gastrulation answered 1/7, 2015 at 2:23 Comment(3)
I don't know the library, but is it reasonably similar to Proxy with urllib2 ?Ratliff
Not really, I have done this will the urllib2 library already. I am interested to see how this is done with urllib3.Gastrulation
use requests? #8288128Albric
O
16

urllib3 has a ProxyManager component which you can use. You'll need to build headers for the Basic Auth component, you can either do that manually or use the make_headers helper in urllib3.

All together, it would look something like this:

from urllib3 import ProxyManager, make_headers

default_headers = make_headers(proxy_basic_auth='myusername:mypassword')
http = ProxyManager("https://myproxy.com:8080/", proxy_headers=default_headers)

# Now you can use `http` as you would a normal PoolManager
r = http.request('GET', 'https://stackoverflow.com/')
Overnight answered 1/7, 2015 at 9:8 Comment(3)
Is the "headers" the login for the proxy, or can it be used to log into a website as well?Robbirobbia
@Robbirobbia It's for the proxy. You can make separate headers for the website itself.Overnight
This only worked for me when I changed "headers=default_headers" to "proxy_headers=default_headers". See #58132073Davenport
L
6

I believe the correct answer to this should be

from urllib3 import ProxyManager, make_headers

default_headers = make_headers(proxy_basic_auth='myusername:mypassword')
http = ProxyManager("https://myproxy.com:8080/", headers=default_headers)

# Now you can use `http` as you would a normal PoolManager
r = http.request('GET', 'https://stackoverflow.com/')

(note: proxy_basic_auth, not basic_auth)

I was trying this with basic_auth in my environment without any luck. shazow you committed this comment to git which pointed me in the right direction

Lossa answered 2/11, 2016 at 9:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.