2015-02-14 32 views
21

sto ottenendo un url con:richieste: Come disattivare/bypass del proxy

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

Come posso vedere nel 'access.log' di "myserver.com", proxy di sistema del client viene utilizzato. Ma voglio disabilitare l'utilizzo dei proxy con requests.

+0

Fa l'aggiunta di proxy = Nessuno per la richiesta di lavoro? – Lesleh

+0

@Lesleh che è l'impostazione predefinita per l'argomento della parola chiave 'proxies', il che significa che non cambierà affatto il comportamento. –

+0

@Lesleh L'ho provato e sfortunatamente non funziona. :( – t777

risposta

49

L'unico modo in cui sto attualmente al corrente per la disabilitazione deleghe interamente è la seguente:

  • creare una sessione
  • Impostare session.trust_env a False
  • Crea la tua richiesta utilizzando quella sessione
import requests 

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

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

Questo è basato su this comment by Lukasa e sulla documentazione (limitata) per requests.Session.trust_env.

Nota: impostazione trust_env-False ignora anche il seguente:

  • autenticazione informazioni da .netrc (code)
  • fasci CA definiti REQUESTS_CA_BUNDLE o CURL_CA_BUNDLE (code)

Se invece si desidera solo disabilitare i proxy per un particolare dominio (come localhost), è possibile utilizzare le NO_PROXY environment variable:

import os 
import requests 

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

response = requests.get('http://www.stackoverflow.com') 
+0

Ha 'trust_env = False 'altri effetti (laterali) di disabilitare il proxy? – t777

+2

@ t777 effettivamente - ha aggiornato la mia risposta –

+3

NO_PROXY è la risposta corretta – aaa90210

1

richieste rispetta biblioteca variabili d'ambiente. http://docs.python-requests.org/en/latest/user/advanced/#proxies

Quindi prova a eliminare le variabili di ambiente HTTP_PROXY e HTTPS_PROXY.

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

Sicuramente non controlla le variabili di ambiente su un Mac. –

19

È possibile scegliere i proxy per ogni richiesta. Da the 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) 

Quindi per disabilitare il proxy, è sufficiente impostare ciascuno a None:

import requests 

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

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

Hai controllato il secondo caso. Nel mio caso non funziona, cioè sta ancora usando il proxy di sistema. –

+0

@sonukumar Cosa intendi per "2 ° caso?" – jtpereyda

+0

oh! Intendo usare il parametro proxy per ottenere il metodo. –

Problemi correlati