web-dev-qa-db-fra.com

requêtes: comment désactiver/contourner le proxy

Je reçois une URL avec:

r = requests.get("http://myserver.com")

Comme je peux le voir dans le fichier 'access.log' de "myserver.com", le proxy système du client est utilisé. Mais je veux désactiver l’utilisation de serveurs proxy avec requests.

33
t777

La seule façon dont je connaisse actuellement la désactivation des mandataires entièrement est la suivante:

  • Créer une session
  • Définissez session.trust_env sur False
  • Créez votre demande en utilisant cette session
import requests

session = requests.Session()
session.trust_env = False

response = session.get('http://www.stackoverflow.com')

Ceci est basé sur ce commentaire de Lukasa et la documentation (limitée) de requests.Session.trust_env .

Remarque: Régler trust_env sur False ignore également les éléments suivants:

  • Informations d'authentification de .netrc ( code )
  • Ensembles d'AC définis dans REQUESTS_CA_BUNDLE ou CURL_CA_BUNDLE ( code )

Si toutefois vous souhaitez uniquement désactiver les serveurs proxy pour un domaine particulier (tel que localhost), vous pouvez utiliser la variable d'environnement NO_PROXY :

import os
import requests

os.environ['NO_PROXY'] = 'stackoverflow.com'

response = requests.get('http://www.stackoverflow.com')
71
Lukas Graf

Vous pouvez choisir des procurations pour chaque demande. De les docs :

import requests

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

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

Donc, pour désactiver le proxy, il suffit de définir chacun sur Aucun:

import requests

proxies = {
  "http": None,
  "https": None,
}

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

Pour empêcher les demandes/urllib de transmettre des demandes par proxy, définissez la variable d'environnement no_proxy (ou NO_PROXY) sur *, par exemple. en bash:

export no_proxy='*'

Ou de Python:

import os
os.environ['no_proxy'] = '*' 

Pour comprendre pourquoi cela fonctionne, c’est que la fonction urllib.request.getproxies vérifie d’abord les mandataires définis dans les variables d’environnement (par exemple, http_proxy, etc.) ou, le cas échéant, puis vérifie les mandataires configurés par le système à l’aide d’appels spécifiques à la plate-forme. (par exemple, sur MacOS, il vérifiera l’utilisation des interfaces système scutil/configd et, sous Windows, il vérifiera le registre). 

Ensuite, lorsque urllib tente d’utiliser des proxies avec la fonction proxyHandler, il vérifie la présence et le paramétrage de la variable d’environnement no_proxy - pouvant être définie sur des noms d’hôte spécifiques, comme indiqué ci-dessus, ou sur la valeur spéciale * permettant à tous les hôtes de contourner le paramètre. Procuration.

0
Pierz

bibliothèque de requêtes respecte les variables d'environnement . http://docs.python-requests.org/en/latest/user/advanced/#proxies

Essayez donc de supprimer les variables d’environnement HTTP_PROXY et HTTPS_PROXY.

import os
for k in list(os.environ.keys()):
    if k.lower().endswith('_proxy'):
        del os.environ[k]
0
KostasT