197 votes

Proxies avec le module Python 'Requests'.

Juste un court, simple sur l'excellent Demandes pour Python.

Je ne parviens pas à trouver dans la documentation ce que doit contenir la variable "proxies". Lorsque je lui envoie un dict avec une valeur standard "IP:PORT", il le rejette en demandant 2 valeurs. Donc, je suppose (parce que cela ne semble pas être couvert dans la documentation) que la première valeur est l'IP et la seconde le port ?

La documentation ne mentionne que cela :

proxies - (facultatif) Dictionnaire de mappage du protocole à l'URL du proxy.

Alors j'ai essayé ça... qu'est-ce que je devrais faire ?

proxy = { ip: port}

et dois-je les convertir en quelque sorte avant de les mettre dans le dict ?

r = requests.get(url,headers=headers,proxies=proxy)

336voto

chown Points 25161

Le site proxies La syntaxe de la dictée est {"protocol":"ip:port", ...} . Avec lui, vous pouvez spécifier des proxies différents (ou les mêmes) pour les requêtes utilisant la fonction http , https et ftp protocoles :

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)

Déduit de la requests documentation :

Paramètres :
method - pour le nouvel objet Request.
url - URL pour le nouvel objet Request.
...
proxies - (facultatif) Dictionnaire cartographie protocole à la URL du proxy .
...


Sous linux, vous pouvez également le faire via la commande HTTP_PROXY , HTTPS_PROXY et FTP_PROXY les variables d'environnement :

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

Sous Windows :

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

Merci, Jay, de nous l'avoir signalé :
La syntaxe a changé avec demandes 2.0.0 .
Vous devrez ajouter un schéma à l'url : https://2.python-requests.org/en/latest/user/advanced/#proxies

35voto

Ben Golding Points 211

J'ai trouvé que urllib a un très bon code pour récupérer les paramètres du proxy du système et ils sont dans la forme correcte pour être utilisés directement. Vous pouvez utiliser ceci comme :

import urllib

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

Cela fonctionne très bien et urllib sait comment obtenir les paramètres de Mac OS X et de Windows également.

34voto

Stephen Hu Points 67

Vous pouvez vous référer à la documentation sur le proxy ici .

Si vous devez utiliser un proxy, vous pouvez configurer les demandes individuelles avec l'argument proxies de toute méthode de demande :

import requests

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "https://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

Pour utiliser HTTP Basic Auth avec votre proxy, utilisez la fonction http://user:password@host.com/ la syntaxe :

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

19voto

Owen B Points 866

La réponse acceptée était un bon début pour moi, mais je continuais à obtenir l'erreur suivante :

AssertionError: Not supported proxy scheme None

La solution consiste à spécifier l'adresse http:// dans l'url du proxy :

http_proxy  = "http://194.62.145.248:8080"
https_proxy  = "https://194.62.145.248:8080"
ftp_proxy   = "10.10.1.10:3128"

proxyDict = {
              "http"  : http_proxy,
              "https" : https_proxy,
              "ftp"   : ftp_proxy
            }

Je serais intéressé de savoir pourquoi l'original fonctionne pour certaines personnes mais pas pour moi.

Edit : Je vois que la réponse principale est maintenant mise à jour pour refléter cela :)

10voto

macdonjo Points 478

Si vous souhaitez faire persister les cookies et les données de session, il est préférable de procéder comme suit :

import requests

proxies = {
    'http': 'http://user:pass@10.10.1.0:3128',
    'https': 'https://user:pass@10.10.1.0:3128',
}

# Create the session and set the proxies.
s = requests.Session()
s.proxies = proxies

# Make the HTTP request through the session.
r = s.get('http://www.showmemyip.com/')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X