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
.
La seule façon dont je connaisse actuellement la désactivation des mandataires entièrement est la suivante:
session.trust_env
sur False
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:
.netrc
( code )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')
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)
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.
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]