web-dev-qa-db-ger.com

Wie leite ich alle Python-Traffics über einen http-Proxy weiter?

Ich möchte alle Python-Traffics über einen http-Proxyserver weiterleiten. Ich habe urlib2 überprüft und beispielsweise Pakete angefordert. Sie können so konfiguriert werden, dass sie Proxys verwenden. Wie kann ich jedoch einen systemweiten Proxy für Python verwenden? Proxy alle Daten aus?

16
habedi

Linux-System exportiert zuerst die Umgebungsvariablen wie folgt

$ export http_proxy="http://<user>:<pass>@<proxy>:<port>"
$ export HTTP_PROXY="http://<user>:<pass>@<proxy>:<port>"

$ export https_proxy="http://<user>:<pass>@<proxy>:<port>"
$ export HTTPS_PROXY="http://<user>:<pass>@<proxy>:<port>"

oder in dem Skript, das Sie über den Proxy übergeben möchten

import os

proxy = 'http://<user>:<pass>@<proxy>:<port>'

os.environ['http_proxy'] = proxy 
os.environ['HTTP_PROXY'] = proxy
os.environ['https_proxy'] = proxy
os.environ['HTTPS_PROXY'] = proxy

#your code goes here.............

führen Sie dann python script aus

$ python my_script.py

[~ # ~] Update [~ # ~]

Sie können redsocks mit diesem Tool auch alle Ihre TCP Verbindungen zu einem PROXY mit oder ohne Authentifizierung stillschweigend umleiten. Aber Sie müssen da aufpassen Es ist für alle Verbindungen nicht nur für die Python.

Windows-Systeme Sie können Tools wie freecap , proxifier , proxycap und so konfigurieren, dass es hinter der ausführbaren Datei python) ausgeführt wird

25
efirvida

Dies ist zwar nicht genau das, wonach Sie suchen, aber wenn Sie die programmatische Quelle Ihres gesamten Netzwerkverkehrs in Ihrem python code kennen, können Sie diesen Proxy-Wrapping im Code selbst durchführen. Eine reine python Lösung wird unter Verwendung des Moduls PySocks unter folgendem Link vorgeschlagen:

https://github.com/httplib2/httplib2/issues/22

import httplib2
# detect presense of proxy and use env varibles if they exist
pi = httplib2.proxy_info_from_environment()
if pi:
    import socks
    socks.setdefaultproxy(pi.proxy_type, pi.proxy_Host, pi.proxy_port)
    socks.wrapmodule(httplib2)    

# now all calls through httplib2 should use the proxy settings
httplib2.Http()

Jetzt wird jeder Anruf mit httplib2 verwendet diese Proxy-Einstellungen. Sie sollten in der Lage sein, jedes Netzwerkmodul, das Sockets für die Verwendung dieses Proxys verwendet, zu verpacken.

https://github.com/Anorov/PySocks

Sie erwähnen dort, dass dies nicht empfohlen wird, aber es scheint gut für mich zu funktionieren.

4
chisaipete