Proxies with Python 'Requests' module Proxies with Python 'Requests' module python python

Proxies with Python 'Requests' module


The proxies' dict syntax is {"protocol":"ip:port", ...}. With it you can specify different (or the same) proxie(s) for requests using http, https, and ftp protocols:

http_proxy  = "http://10.10.1.10:3128"https_proxy = "https://10.10.1.11:1080"ftp_proxy   = "ftp://10.10.1.10:3128"proxyDict = {               "http"  : http_proxy,               "https" : https_proxy,               "ftp"   : ftp_proxy            }r = requests.get(url, headers=headers, proxies=proxyDict)

Deduced from the requests documentation:

Parameters:
method – method for the new Request object.
url – URL for the new Request object.
...
proxies – (optional) Dictionary mapping protocol to the URL of the proxy.
...


On linux you can also do this via the HTTP_PROXY, HTTPS_PROXY, and FTP_PROXY environment variables:

export HTTP_PROXY=10.10.1.10:3128export HTTPS_PROXY=10.10.1.11:1080export FTP_PROXY=10.10.1.10:3128

On Windows:

set http_proxy=10.10.1.10:3128set https_proxy=10.10.1.11:1080set ftp_proxy=10.10.1.10:3128

Thanks, Jay for pointing this out:
The syntax changed with requests 2.0.0.
You'll need to add a schema to the url: https://2.python-requests.org/en/latest/user/advanced/#proxies


I have found that urllib has some really good code to pick up the system's proxy settings and they happen to be in the correct form to use directly. You can use this like:

import urllib...r = requests.get('http://example.org', proxies=urllib.request.getproxies())

It works really well and urllib knows about getting Mac OS X and Windows settings as well.


You can refer to the proxy documentation here.

If you need to use a proxy, you can configure individual requests with the proxies argument to any request method:

import requestsproxies = {  "http": "http://10.10.1.10:3128",  "https": "https://10.10.1.10:1080",}requests.get("http://example.org", proxies=proxies)

To use HTTP Basic Auth with your proxy, use the http://user:password@host.com/ syntax:

proxies = {    "http": "http://user:pass@10.10.1.10:3128/"}