2010-05-27 16 views
6

Perché non funziona questo semplice codice Python?Perché non riesco a far funzionare il metodo urlopen() di Python su Windows?

import urllib 
file = urllib.urlopen('http://www.google.com') 
print file.read() 

Questo è l'errore che ottengo:

Traceback (most recent call last): 
    File "C:\workspace\GarchUpdate\src\Practice.py", line 26, in <module> 
    file = urllib.urlopen('http://www.google.com') 
    File "C:\Python26\lib\urllib.py", line 87, in urlopen 
    return opener.open(url) 
    File "C:\Python26\lib\urllib.py", line 206, in open 
    return getattr(self, name)(url) 
    File "C:\Python26\lib\urllib.py", line 345, in open_http 
    h.endheaders() 
    File "C:\Python26\lib\httplib.py", line 892, in endheaders 
    self._send_output() 
    File "C:\Python26\lib\httplib.py", line 764, in _send_output 
    self.send(msg) 
    File "C:\Python26\lib\httplib.py", line 723, in send 
    self.connect() 
    File "C:\Python26\lib\httplib.py", line 704, in connect 
    self.timeout) 
    File "C:\Python26\lib\socket.py", line 514, in create_connection 
    raise error, msg 
IOError: [Errno socket 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 

ho provato con diverse pagine diverse, ma non riesco mai a trovare il metodo urlopen per eseguire correttamente.

+1

Funziona bene per me. Potrebbe voler controllare le impostazioni del firewall. – Syntactic

+0

@Syntactic - Ci stavo pensando ... il mio ufficio ha un firewall molto forte. Ma posso navigare verso la pagina in un browser senza problemi. – froadie

+0

controlla che il tuo pitone abbia accesso al firewall. Scusa se non ricordo le impostazioni esatte, ma ci sono variabili nel tuo ambiente che determinano come Python arriva al web (firewall/proxy/etc). – KevinDTimm

risposta

4

Il tuo codice non è il problema qui.

Avete impostazioni proxy nel vostro IE?

Questo dice la documentazione Python per urllib.urlopen:
"""
In un ambiente Windows, se non sono impostate le variabili d'ambiente proxy,
impostazioni proxy sono ottenuti da impostazioni Internet del registro di sistema
sezione
. "" "

1

Se si dispone di wirehark, controllare che cosa viene inviato e se non vi è nulla in arrivo. Ti aiuterà a risolvere il problema se riesci a vedere la richiesta GET che viene inviata.

anche Ricordo di aver problema simile in questo modo una volta, quello che ho fatto è stato il mio filo cache DNS

(ipconfig/flushdns) e riavviato. Ha risolto il mio problema. Non fa male provarlo.

3

Provare a utilizzare urllib2 se è possibile modificare alcune righe di codice. Impostare l'argomento timeout in secondi

Ad esempio:

urllib2.urlopen(http://www.abc.com/api, timeout=20) 

Qui il collegamento persiste per un periodo più lungo. Quindi, se ad esempio stai leggendo un file XML troppo grande, si evita una lettura incompleta.

Il codice precedente non funzionerà mai se la connessione di rete è lenta o si interrompe improvvisamente.

Problemi correlati