74 votes

Proxy avec urllib2

J'ouvre les urls avec :

site = urllib2.urlopen('http://google.com')

Et ce que je veux faire, c'est me connecter de la même manière avec un proxy. que j'ai quelque part qui me dit :

site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})

mais ça n'a pas marché non plus.

Je sais que urllib2 a quelque chose comme un gestionnaire de proxy, mais je ne me souviens pas de cette fonction.

141voto

ZelluX Points 15836
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')

18voto

dcrosta Points 11219

Vous devez installer un ProxyHandler

urllib2.install_opener(
    urllib2.build_opener(
        urllib2.ProxyHandler({'http': '127.0.0.1'})
    )
)
urllib2.urlopen('http://www.google.com')

12voto

cashmere Points 943

Vous pouvez définir des proxies à l'aide de variables d'environnement.

import os
os.environ['http_proxy'] = '127.0.0.1'
os.environ['https_proxy'] = '127.0.0.1'

urllib2 ajoutera automatiquement des gestionnaires de proxy de cette façon. Vous devez définir les proxies pour les différents protocoles séparément, sinon ils échoueront (en termes de non passage par le proxy), voir ci-dessous.

Par exemple :

proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
# next line will fail (will not go through the proxy) (https)
urllib2.urlopen('https://www.google.com')

Au lieu de cela,

proxy = urllib2.ProxyHandler({
    'http': '127.0.0.1',
    'https': '127.0.0.1'
})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
# this way both http and https requests go through the proxy
urllib2.urlopen('http://www.google.com')
urllib2.urlopen('https://www.google.com')

6voto

blueyed Points 7719

Pour utiliser les proxies du système par défaut (par exemple à partir de la variable d'environnement http_support), ce qui suit fonctionne pour la requête courante (sans l'installer dans urllib2 globalement) :

url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()

3voto

HCC Points 31

En plus de la réponse acceptée : Mon scipt m'a donné une erreur

File "c:\Python23\lib\urllib2.py", line 580, in proxy_open
    if '@' in host:
TypeError: iterable argument required

La solution consistait à ajouter http:// devant la chaîne de caractères du proxy :

proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X