2017-09-11 18 views
0

私はPythonで新しく、次の練習問題を理解しようとしています。Webデータを取得しているPython

演習5:(詳細)ヘッダーと空白行を受信した後にのみデータが表示されるようにソケットプログラムを変更します。 recvは行ではなく文字(改行とすべて)を受け取っていることに注意してください。私は残念ながら、私はそれが働いているとは思わない、私が思いついたコードの下に取り付けた

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() 

答えて

1

代わりに行数を数えるのは、ちょうどそのあなたが得るすべてのデータを取得し、分割を受けました最初のダブルでCRLFが見つかります。

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

私は常に分割に焦点を当てているので、私はパーティションを研究します。 – PythonLearner

+0

@ PythonLearner1977ここで同じ結果を得るには、 'resp.split( '\ r \ n \ r \ n'、1)[1]'(分割する引数 '1' 。私はちょうどそれを特に使用するための他の理由はない、 'パーティション'のための好みがあります。 –

関連する問題