2010-05-27 3 views
6

Warum funktioniert dieser einfache Python-Code nicht?Warum kann ich die Methode urlopen() von Python nicht auf Windows anwenden?

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

Dies ist der Fehler, die ich bekomme:

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 

ich es mit mehreren verschiedenen Seiten versucht haben, aber ich kann nie richtig die urlopen Methode auszuführen bekommen.

+1

Funktioniert gut für mich. Vielleicht möchten Sie Ihre Firewall-Einstellungen überprüfen. – Syntactic

+0

@Syntactic - Hat daran gedacht ... mein Büro hat eine wirklich starke Firewall. Aber ich kann problemlos auf die Seite in einem Browser navigieren. – froadie

+0

Überprüfen Sie, ob Ihr Python Zugriff auf die Firewall hat. Entschuldigung, ich erinnere mich nicht an die genauen Einstellungen, aber es gibt Variablen in Ihrer Umgebung, die bestimmen, wie Python ins Web gelangt (Firewall/Proxy/etc). – KevinDTimm

Antwort

4

Ihr Code ist nicht das Problem hier.

Haben Sie Proxy-Einstellungen in Ihrem IE?

Dies sagt der Python-Dokumentation für urllib.urlopen:
""“
In einer Windows-Umgebung, wenn keine Proxy-Umgebungsvariablen gesetzt sind,
Proxy-Einstellungen aus dem Internet erhalten werden Einstellungen der Registrierung
Abschnitt
.

1

Wenn Sie wireshark haben, überprüfen Sie, was gesendet wird und ob überhaupt etwas zurückkommt. Es wird Ihnen helfen, das Problem zu beheben, wenn Sie sehen können, dass die GET-Anfrage gesendet wird.

Auch ich erinnere mich einmal ähnliches Problem wie dieses ist, was ich tat, Flush-Cache

(ipconfig/flushdns) und neu gestartet meine dns war. Es hat mein Problem behoben. Es tut nicht weh zu versuchen, denke ich.

3

Verwenden Sie urllib2, wenn es möglich ist, einige Codezeilen zu ändern. Stellen Sie das Argument timeout in Sekunden

Zum Beispiel:

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

Hier ist die Verbindung für eine längere Dauer fortbesteht. Wenn Sie zum Beispiel eine XML-Datei lesen, die zu groß ist, wird ein unvollständiges Lesen vermieden.

Der obige Code funktioniert nie, wenn die Netzwerkverbindung langsam ist oder plötzlich bricht.

Verwandte Themen