it-swarm.com.de

anfragen: So deaktivieren/umgehen Sie den Proxy

Ich bekomme eine URL mit:

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

Wie ich in 'access.log' von "myserver.com" sehen kann, wird der System-Proxy des Clients verwendet. Aber ich möchte die Verwendung von Proxies mit requests überhaupt deaktivieren.

33
t777

Die einzige Möglichkeit, die ich derzeit für das Deaktivieren von Proxys vollständig wisse, ist folgende:

  • Sitzung erstellen
  • Setze session.trust_env auf False
  • Erstellen Sie Ihre Anfrage mit dieser Sitzung
import requests

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

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

Dies basiert auf diesem Kommentar von Lukasa und der (eingeschränkten) Dokumentation für requests.Session.trust_env .

Hinweis: Wenn Sie trust_env auf False setzen, wird Folgendes ignoriert:

  • Authentifizierungsinformationen von .netrc ( code )
  • CA-Pakete, definiert in REQUESTS_CA_BUNDLE oder CURL_CA_BUNDLE ( code )

Wenn Sie jedoch nur Proxys für eine bestimmte Domäne deaktivieren möchten (wie localhost), können Sie die Umgebungsvariable NO_PROXY verwenden:

import os
import requests

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

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

Sie können für jede Anfrage Proxys auswählen. Von den Dokumenten :

import requests

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

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

Um den Proxy zu deaktivieren, setzen Sie einfach jeden auf Keine:

import requests

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

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

Um zu verhindern, dass Anforderungen/urllib irgendwelche Anforderungen weiterleiten, müssen Sie die Umgebungsvariable no_proxy (oder NO_PROXY) auf * setzen, z. in bash:

export no_proxy='*'

Oder von Python:

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

Um zu verstehen, warum dies funktioniert, liegt das daran, dass die Funktion urllib.request.getproxies zuerst nach Proxies sucht, die in den Umgebungsvariablen (z. B. http_proxy usw.) festgelegt sind. Wenn keine Proxies festgelegt sind, werden sie mithilfe von plattformspezifischen Aufrufen nach systemkonfigurierten Proxys überprüft (Unter MacOS wird beispielsweise die Verwendung der Systemschnittstellen scutil/configd und unter Windows die Registrierung geprüft.) 

Wenn urllib dann versucht, Proxies mit der proxyHandler-Funktion zu verwenden, wird das Vorhandensein und die Einstellung der Umgebungsvariable no_proxy überprüft. Diese kann entweder wie oben erwähnt auf bestimmte Hostnamen oder den speziellen *-Wert festgelegt werden, bei dem alle Hosts den Bypass umgehen Proxy.

0
Pierz

fordert Bibliothek an, Umgebungsvariablen zu berücksichtigen . http://docs.python-requests.org/de/latest/user/advanced/#proxies

Löschen Sie daher die Umgebungsvariablen HTTP_PROXY und HTTPS_PROXY.

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