Ich öffne URLs mit:
site = urllib2.urlopen('http://google.com')
Und was ich tun möchte, ist auf die gleiche Weise mit einem Proxy zu verbinden, den ich irgendwo bekommen habe und der mir sagt:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
aber das hat auch nicht funktioniert.
Ich weiß, dass urllib2 so etwas wie einen Proxy-Handler hat, aber ich kann mich nicht an diese Funktion erinnern.
uninstall
Methode gibturllib2
, aber wir können einmalige Proxy-Einstellungen vornehmen. Anstelle desinstalling
Öffners erstellen wir einrequest
Objekt und verwenden einen Öffneropen
dafür.HTTP_PROXY
und dann Ihren Code einzuchecken, wenn er mit definiert istos.environ["HTTP_PROXY"]
.Sie müssen einen ProxyHandler installieren
urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler({'http': '127.0.0.1'}) ) ) urllib2.urlopen('http://www.google.com')
quelle
Sie können Proxys mithilfe von Umgebungsvariablen festlegen.
import os os.environ['http_proxy'] = '127.0.0.1' os.environ['https_proxy'] = '127.0.0.1'
urllib2
fügt auf diese Weise automatisch Proxy-Handler hinzu. Sie müssen Proxys für verschiedene Protokolle separat festlegen, da sie sonst fehlschlagen (wenn Sie den Proxy nicht durchlaufen) (siehe unten).Zum Beispiel:
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')
Stattdessen
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')
quelle
Um die Standardsystem-Proxys zu verwenden (z. B. aus der Umgebungsvariablen http_support), funktioniert Folgendes für die aktuelle Anforderung (ohne sie global in urllib2 zu installieren):
url = 'http://www.example.com/' proxy = urllib2.ProxyHandler() opener = urllib2.build_opener(proxy) in_ = opener.open(url) in_.read()
quelle
Zusätzlich zur akzeptierten Antwort: Mein Scipt hat mir einen Fehler gegeben
File "c:\Python23\lib\urllib2.py", line 580, in proxy_open if '@' in host: TypeError: iterable argument required
Die Lösung bestand darin, http: // vor der Proxy-Zeichenfolge hinzuzufügen:
proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com')
quelle
Man kann auch Anfragen verwenden, wenn wir über Proxys auf eine Webseite zugreifen möchten. Python 3-Code:
>>> import requests >>> url = 'http://www.google.com' >>> proxy = '169.50.87.252:80' >>> requests.get(url, proxies={"http":proxy}) <Response [200]>
Es können auch mehrere Proxys hinzugefügt werden.
>>> proxy1 = '169.50.87.252:80' >>> proxy2 = '89.34.97.132:8080' >>> requests.get(url, proxies={"http":proxy1,"http":proxy2}) <Response [200]>
quelle
Legen Sie außerdem den Proxy für die Befehlszeilensitzung fest. Öffnen Sie eine Befehlszeile, in der Sie möglicherweise Ihr Skript ausführen möchten
netsh winhttp set proxy YourProxySERVER:yourProxyPORT
Führen Sie Ihr Skript in diesem Terminal aus.
quelle