2017-09-16 3 views
0

Ich lerne, wie man mit Python über HTTP-Protokoll eine Verbindung zu einem Socket herstellen und eine URL abrufen kann. Kann jemand helfen, darauf hinzuweisen, wo ich vielleicht falsch gelaufen bin?Fehler beim Versuch, eine Verbindung zum Socket herzustellen

Python-Code:

# Networking 
## Connect to a Socket 
import socket 
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
mysock.connect(('data.pr4e.org', 80)) # Host, Port Number 

cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.0\r\n\r\n'.encode() 
mysock.send(cmd) 

while TRUE: 
    data = mysock.recv(512) 
    if (len(data)<1): 
     break 
    print(data.decode()) 
mysock.close() 

Ich betreibe das Programm unter Windows 10-Eingabeaufforderung:

C:\Users\Kane\Desktop>python networking.py 

bekomme ich folgende Fehlermeldung:

Traceback (most recent call last): 
    File "networking.py", line 7, in <module> 
    mysock.connect(('data.pr4.org', 80)) # Host, Port Number 
    File "C:\Users\Kane\Anaconda2\lib\socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
socket.gaierror: [Errno 11001] getaddrinfo failed 

Dank.

+0

ist "data.pr4.org" ein gültiger Server zu verbinden? – coder

+0

In der Lage zu wissen, den echten Fehler Python fragen, welche Art von Ausnahme ist: durch eine try & catch-Anweisung mit Druck-Typ (Ausnahme) –

+2

Abgesehen von der Verwendung eines Host-Namen, der nicht durch DNS aufgelöst werden kann, ist die HTTP-Anfrage keine gültige HTTP-Anfrage da es die URL stattdessen nur den Pfad enthält und auch den Host-Header vermisst, der heute in den meisten Fällen benötigt wird, obwohl HTTP/1.0 es nicht unbedingt erfordert. Wenn Sie das HTTP-Protokoll direkt anstelle einer höheren Bibliothek verwenden möchten, die dies für Sie tut, dann raten Sie bitte nicht das Protokoll, sondern studieren Sie den geschriebenen Standard oder schauen Sie sich den vorhandenen HTTP-Verkehr von korrekt implementierten Clients sehr genau an. –

Antwort

0

Stellt sich heraus, dass @ t.m.adam hatte Recht.

Der Code funktioniert gut, außer dass TRUE True sein sollte.

Es könnte früher ein Host- oder Serverproblem gewesen sein. Ich werde die Frage löschen, wenn andere die gleiche Ausgabe unten erhalten können:

C:\Users\Kane\Desktop>python networking.py 
HTTP/1.1 200 OK 
Date: Sun, 17 Sep 2017 00:12:07 GMT 
Server: Apache/2.4.7 (Ubuntu) 
Last-Modified: Sat, 13 May 2017 11:22:22 GMT 
ETag: "1d3-54f6609240717" 
Accept-Ranges: bytes 
Content-Length: 467 
Cache-Control: max-age=0, no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: Wed, 11 Jan 1984 05:00:00 GMT 
Connection: close 
Content-Type: text/plain 
Verwandte Themen