Je connais bien le fait que je devrais définir la variable d'environnement HTTP_RPOXY sur l'adresse proxy.
Généralement, urllib fonctionne bien, le problème concerne urllib2.
>>> urllib2.urlopen("http://www.google.com").read()
résultats
urllib2.URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it>
ou
urllib2.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
J'ai essayé de répondre @Fenikso mais je reçois cette erreur maintenant:
URLError: <urlopen error [Errno 10060] A connection attempt failed because the
connected party did not properly respond after a period of time, or established
connection failed because connected Host has failed to respond>
Des idées?
Vous pouvez le faire même sans la variable d’environnement HTTP_PROXY. Essayez cet échantillon:
import urllib2
proxy_support = urllib2.ProxyHandler({"http":"http://61.233.25.166:80"})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
html = urllib2.urlopen("http://www.google.com").read()
print html
Dans votre cas, il semble vraiment que le serveur proxy refuse la connexion.
Quelque chose de plus à essayer:
import urllib2
#proxy = "61.233.25.166:80"
proxy = "YOUR_PROXY_GOES_HERE"
proxies = {"http":"http://%s" % proxy}
url = "http://www.google.com/search?q=test"
headers={'User-agent' : 'Mozilla/5.0'}
proxy_support = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)
req = urllib2.Request(url, None, headers)
html = urllib2.urlopen(req).read()
print html
Edit 2014: Cela semble être une question/réponse populaire. Cependant, aujourd’hui, j’utiliserais un tiers requests
module.
Pour une demande, faites simplement:
import requests
r = requests.get("http://www.google.com",
proxies={"http": "http://61.233.25.166:80"})
print(r.text)
Pour plusieurs requêtes, utilisez l'objet Session
afin d'éviter de devoir ajouter le paramètre proxies
à toutes vos demandes:
import requests
s = requests.Session()
s.proxies = {"http": "http://61.233.25.166:80"}
r = s.get("http://www.google.com")
print(r.text)
Je vous recommande simplement d'utiliser le module de requêtes.
C'est beaucoup plus facile que les clients http intégrés: http://docs.python-requests.org/en/latest/index.html
Exemple d'utilisation:
r = requests.get('http://www.thepage.com', proxies={"http":"http://myproxy:3129"})
thedata = r.content
Je voulais juste mentionner que vous devrez peut-être également définir la variable d’environnementhttps_proxy
OS au cas où il faudrait accéder à des URL https . .
Mon cas d'utilisation: Win 7, installation de jython-standalone-2.5.3.jar, setuptools via ez_setup.py
Python 3:
import urllib.request
htmlsource = urllib.request.FancyURLopener({"http":"http://127.0.0.1:8080"}).open(url).read().decode("utf-8")
J'ai rencontré cela sur le client Jython.
Le serveur ne parlait que TLS et le client utilisant le contexte ssl javax.net.ssl.SSLContext.getInstance ("SSL")
Une fois que le client était sur TLS, les choses ont commencé à fonctionner.