2017-09-11 1 views
0

Ich bin neu bei Python und ich habe versucht, die folgende Übung herauszufinden.python retrieving web data

Übung 5: (Erweitert) Ändern Sie das Socket-Programm so, dass es nur Daten zeigt, nachdem die Header und eine Leerzeile empfangen wurden. Denken Sie daran, dass Recv Zeichen (Zeilenumbrüche und alle) empfängt, keine Zeilen.

ich unter dem Code angebracht kam ich mit, leider glaube ich nicht daran zu arbeiten:

import socket 
mysocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
mysocket.connect(('data.pr4e.org', 80)) 
mysocket.send('GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()) 

count=0 
while True: 
      data = mysocket.recv(200) 

      if (len(data) < 1): break 

      count=count+len(data.decode().strip()) 
      print(len(data),count) 
      if count >=399: 
       print(data.decode(),end="")   
mysocket.close() 

Antwort

1

Statt die Anzahl der Zeilen des Zählens empfangen, alle Daten nur greifen Sie bekommen und dann Split auf der ersten Doppel CRLF finden Sie.

resp = [] 
while True: 
      data = mysocket.recv(200) 

      if not data: break 
      resp.append(data.decode()) 
mysocket.close() 

resp = "".join(resp) 
body = resp.partition('\r\n\r\n')[2] 
print(body) 
+0

Ich werde die Partition studieren, wie ich immer auf Split konzentriert habe. – PythonLearner

+0

@ PythonLearner1977 können Sie 'resp.split ('\ r \ n \ r \ n', 1) [1]' verwenden (das Argument '1' teilt es auf, um nur einen Split auszuführen), um das gleiche Ergebnis zu erhalten . Ich mag nur "Partition", keinen anderen Grund, es speziell zu verwenden. –