web-dev-qa-db-fra.com

Comment passer tous les trafics Python via un proxy http?

Je veux passer tous les trafics Python via un serveur proxy http, j'ai vérifié urlib2 et demande des packages par exemple, ils peuvent être configurés pour utiliser des proxys mais comment pourrais-je utiliser quelque chose comme un proxy à l'échelle du système pour Python pour proxy toutes les données?

16
habedi

Système Linux exportez d'abord les variables d'environnement comme ceci

$ 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>"

ou dans le script que vous souhaitez passer par le proxy

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.............

puis exécutez le script python

$ python my_script.py

[~ # ~] mise à jour [~ # ~]

Vous pouvez également utiliser redsocks avec cet outil, vous pouvez rediriger silencieusement toutes vos connexions TCP vers un proxy avec ou sans authentification. Mais vous devez faire attention car c'est pour toutes les connexions non seulement pour le python.

Systèmes Windows vous pouvez utiliser des outils comme freecap , proxifier , proxycap , et configurez-le pour qu'il s'exécute derrière l'exécutable python

25
efirvida

Certes, ce n'est pas exactement ce que vous recherchez, mais si vous connaissez la source programmatique de tout votre trafic réseau dans votre code python, vous pouvez effectuer cet enveloppement proxy dans le code lui-même. Une solution python pure est suggérée en utilisant le module PySocks dans le lien suivant:

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()

Désormais, chaque appel effectué à l'aide de httplib2 utilisera ces paramètres de proxy. Vous devriez pouvoir envelopper n'importe quel module réseau qui utilise des sockets pour utiliser ce proxy.

https://github.com/Anorov/PySocks

Ils mentionnent que ce n'est pas recommandé, mais cela semble bien fonctionner pour moi.

4
chisaipete