5 votes

Comment passer l'authentification par proxy au module python Requests ?

Je travaille sur un code python existant qui utilise la fonction demande pour effectuer un get/post vers un site web.

Le code python permet également l'utilisation de proxies lorsqu'un proxy est passé au script sinon aucun proxie n'est utilisé.

Mon problème concerne l'utilisation de proxies qui nécessite authentification .

proxy = user:password@ip:port
self.s = requests.Session()
if proxy != "":
      self.proxies = {
        "http": "http://" + proxy,
        "https": "https://" + proxy
      }
      self.s.proxies.update(proxies)

self.s.get('http://checkip.dyndns.org')

Dans le code ci-dessus, si le proxy est configuré chaque obtenir est refusé car aucune authentification n'est fournie.

J'ai trouvé une solution qui implique l'utilisation de HTTPProxyAuth.

Voici la solution que j'ai trouvée :

import requests
s = requests.Session()

proxies = {
  "http": "http://ip:port",
  "https": "https://ip:port"
}

auth = HTTPProxyAuth("user", "pwd")
ext_ip = s.get('http://checkip.dyndns.org', proxies=proxies, auth=auth)
print ext_ip.text

Ma question est la suivante : est-il possible de définir l'autorisation du proxy de manière globale au lieu de la modifier à chaque fois ? s.get dans le code ? Parce que parfois le script pourrait être utilisé sans proxy et parfois avec proxy.

Merci d'avance !

Meilleures salutations, Federico

10voto

Federico Points 188

J'ai trouvé la solution, à savoir comment définir l'authentification par proxy de manière globale :

import requests
import urllib2
import re
from requests.auth import HTTPProxyAuth

s = requests.Session()

proxies = {
  "http": "http://185.165.193.208:8000",
  "https": "https://185.165.193.208:8000"
}

auth = HTTPProxyAuth("gRRT7n", "NMu8g0")

s.proxies = proxies
s.auth = auth        # Set authorization parameters globally

ext_ip = s.get('http://checkip.dyndns.org')
print ext_ip.text

BR, Federico

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