Frage

Ich öffne Urls mit:

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

Und was soll ich tun, ist die gleiche Art und Weise mit einem Proxy-Verbindung Ich habe mich irgendwo sagen:

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

, aber das hat nicht funktioniert.

Ich weiß urllib2 so etwas wie ein Proxy-Handler hat, aber ich kann diese Funktion nicht mehr.

War es hilfreich?

Lösung

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

Andere Tipps

Sie müssen eine ProxyHandler installieren

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

Sie können Proxies Umgebungsvariablen gesetzt.

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

urllib2 wird Proxy-Handler automatisch auf diese Weise hinzufügen. Sie müssen separat Proxies für unterschiedliche Protokolle festgelegt sonst werden sie (in Bezug auf die nicht durch Proxy gehen) fehlschlagen, 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')

Statt

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

das Standardsystem Proxies verwenden (zum Beispiel aus der http_support Umgebungsvariable), die folgenden Werke für die aktuelle Anforderung (ohne sie in urllib2 global Installation):

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

Zusätzlich zu der akzeptierten Antwort: Mein scipt gab mir einen Fehler

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

Lösung war http hinzuzufügen: // vor dem Proxy-String:

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

Man kann auch Anfragen verwenden, wenn wir eine Web-Seite mit Proxys 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]>

Mehr als ein Proxies können ebenfalls 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]>

Darüber hinaus stellen Sie den Proxy für die Sitzung Befehlszeile Öffnen Sie eine Befehlszeile, wo Sie vielleicht Ihr Skript ausführen

netsh winhttp set proxy YourProxySERVER:yourProxyPORT

führen Sie Ihren Skript in diesem Terminal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top