簡體   English   中英

您如何使用python套接字模塊讀取HTTP響應?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM