web-dev-qa-db-fra.com

Comment puis-je ouvrir un site Web avec urllib via un proxy en Python?

J'ai ce programme qui vérifie un site Web, et je veux savoir comment le vérifier via un proxy en Python ...

c'est le code, juste par exemple

while True:
    try:
        h = urllib.urlopen(website)
        break
    except:
        print '['+time.strftime('%Y/%m/%d %H:%M:%S')+'] '+'ERROR. Trying again in a few seconds...'
        time.sleep(5)
27
Bruno 'Shady'

Par défaut, urlopen utilise la variable d'environnement http_proxy pour déterminer le proxy HTTP à utiliser:

$ export http_proxy='http://myproxy.example.com:1234'
$ python myscript.py  # Using http://myproxy.example.com:1234 as a proxy

Si vous souhaitez plutôt spécifier un proxy dans votre application, vous pouvez donner un argument proxies à urlopen:

proxies = {'http': 'http://myproxy.example.com:1234'}
print "Using HTTP proxy %s" % proxies['http']
urllib.urlopen("http://www.google.com", proxies=proxies)

Edit: Si je comprends bien vos commentaires, vous voulez essayer plusieurs proxys et imprimer chaque proxy comme vous l'essayez. Que diriez-vous quelque chose comme ça?

candidate_proxies = ['http://proxy1.example.com:1234',
                     'http://proxy2.example.com:1234',
                     'http://proxy3.example.com:1234']
for proxy in candidate_proxies:
    print "Trying HTTP proxy %s" % proxy
    try:
        result = urllib.urlopen("http://www.google.com", proxies={'http': proxy})
        print "Got URL using proxy %s" % proxy
        break
    except:
        print "Trying next proxy in 5 seconds"
        time.sleep(5)
38
Pär Wieslander

Python 3 est légèrement différent ici. Il essaiera de détecter automatiquement les paramètres de proxy, mais si vous avez besoin de paramètres de proxy spécifiques ou manuels, pensez à ce type de code:

#!/usr/bin/env python3
import urllib.request

proxy_support = urllib.request.ProxyHandler({'http' : 'http://user:pass@server:port', 
                                             'https': 'https://...'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

with urllib.request.urlopen(url) as response:
    # ... implement things such as 'html = response.read()'

Reportez-vous également à la section pertinente dans les Python 3 documents

28
DomTomCat

Voici un exemple de code qui explique comment utiliser urllib pour se connecter via un proxy:

authinfo = urllib.request.HTTPBasicAuthHandler()

proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"})

# build a new opener that adds authentication and caching FTP handlers
opener = urllib.request.build_opener(proxy_support, authinfo,
                                     urllib.request.CacheFTPHandler)

# install it
urllib.request.install_opener(opener)

f = urllib.request.urlopen('http://www.google.com/')
"""
3
daz

Pour http et https, utilisez:

proxies = {'http':'http://proxy-source-ip:proxy-port',
           'https':'https://proxy-source-ip:proxy-port'}

plus de procurations peuvent être ajoutées de la même manière

proxies = {'http':'http://proxy1-source-ip:proxy-port',
           'http':'http://proxy2-source-ip:proxy-port'
           ...
          }

usage

filehandle = urllib.urlopen( external_url , proxies=proxies)

N'utilisez aucun proxy (en cas de liens au sein du réseau)

filehandle = urllib.urlopen(external_url, proxies={})

Utiliser l'authentification par proxy via le nom d'utilisateur et le mot de passe

proxies = {'http':'http://username:password@proxy-source-ip:proxy-port',
           'https':'https://username:password@proxy-source-ip:proxy-port'}

Remarque: évitez d'utiliser des caractères spéciaux tels que :,@ dans le nom d'utilisateur et les mots de passe

0
mayure098