![](/img/trans.png)
[英]How do I avoid a BrokenPipeError while using the sockets module in Python?
[英]How do you read a HTTP response using the python sockets module?
我正在使用python sockets模塊實現一個簡單的Web代理。 將客戶端的HTTP請求轉發到服務器后,我使用以下方法讀取響應:
def _read_response(self):
response = ''
while True:
(readable, _, error) = select.select([self.server], [], [self.server], 3)
if error:
break
if readable:
data = self.server.recv(BUFSIZE)
if not data: break
response += data
return response
上面的代碼似乎可以在大多數情況下運行,但是速度很慢 。 我把這個問題縮小到了最后:
data = self.server.recv(BUFSIZE)
當不再有數據要接收時(當data ==”時,此調用將花費20秒以上的時間。
讀取http響應的正確方法是什么,為什么對recv()的調用需要這么長時間?
在讀取正文之前,解析content-length頭。 然后僅從服務器讀取內容長度字節。
您可能要通過以下方式設置套接字的非阻塞模式:
socket.setblocking(flag)
或在套接字操作上設置超時:
socket.settimeout(value)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.