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.
ist "data.pr4.org" ein gültiger Server zu verbinden? – coder
In der Lage zu wissen, den echten Fehler Python fragen, welche Art von Ausnahme ist: durch eine try & catch-Anweisung mit Druck-Typ (Ausnahme) –
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. –