2010-07-02 7 views
15

Ich habe dieses Programm, das eine Website zu überprüfen, und ich möchte wissen, wie kann ich es in Python über Proxy prüfen ...Wie kann ich eine Website mit Urllib über Proxy in Python öffnen?

dies der Code ist, nur zum Beispiel

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) 
+0

urllib2 http://StackOverflow.com/Questions/1450132/Proxy-with-URllib2 –

Antwort

29

standardmäßig urlopen verwendet die Umgebungsvariable http_proxy die HTTP-Proxy zu verwenden, fest:

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

Wenn Sie stattdessen einen Proxy in Ihrer Anwendung angeben möchten, können Sie eine proxies ar geben gument zu urlopen:

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

Edit: Wenn ich Ihre Kommentare richtig verstehe, Sie jeden Proxy mehrere Proxies und drucken wollen versuchen, wie Sie es versuchen. Wie wäre es mit so etwas?

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) 
+0

mit Ihrem Beispiel, wie kann ich drucken, welchen Proxy es verwendet, in der Zeit die URLopen auftreten? – Shady

+0

@Shady: Wirf einfach eine 'print'-Anweisung ein, die den Wert von' proxies ['http'] ''ausgibt. Sehen Sie sich mein aktuelles Beispiel an, um zu sehen, wie es gemacht werden könnte. –

+0

ok danke, aber wenn ich mehr Proxies möchte, wie, tonnenweise davon, zum Beispiel 10 Proxies, öffne man vor dem nächsten – Shady

0

Hier Beispielcode Anleitung, wie urllib verwenden über Proxy verbinden:

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/') 
""" 
15

Python 3 ist hier etwas anders. Er wird versuchen, die automatische Proxy-Einstellungen erkennen, aber wenn Sie bestimmte oder manuelle Proxy-Einstellungen benötigen, denken über diese Art von Code:

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

proxy_support = urllib.request.ProxyHandler({'http' : 'http://user:[email protected]: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()' 

Siehe auch the relevant section in the Python 3 docs

0

für http und https:

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

mehr Proxies in ähnlicher Weise

hinzugefügt werden können
proxies = {'http':'http://proxy1-source-ip:proxy-port', 
      'http':'http://proxy2-source-ip:proxy-port' 
      ... 
      } 

Nutzung

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

keine Proxies nicht Verwenden Sie (im Falle von Verbindungen innerhalb des Netzwerks)

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

Proxys verwenden Authentifizierung über Benutzername und Passwort

proxies = {'http':'http://username:[email protected]:proxy-port', 
      'https':'https://username:[email protected]:proxy-port'} 

Hinweis: Vermeiden Sie Sonderzeichen wie :,@ in Benutzername und Passwörter

Verwandte Themen