我在想,為什么我在使用套接字發送HTTP GET請求時得到了408個請求超時。我只是復制了通過Chrome發送的GET請求,然后把它粘貼到python中,以為會得到一個200的回應,但顯然,我錯過了什么。
def GET()。
headers = (""GET / HTTP/1.1
主機。{在此插入主機}
連接:關閉
快取控制: max-age=0
DNT: 1
升級-不安全-請求。1
用戶代理。Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36
接受: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
接受-編碼: gzip, deflate
接受語言:en-US,en;q=0.9
Cookie: accept_cookies=1
"").encode('ascii')
payload = headers
return payload
def activity1()。
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
user = GET()
sock.sendall(user)
poop = sock.recv(10000)
print(poop)
sock.close()
假設主機名和埠定義正確,這個請求有什么問題嗎,會導致它超時?謝謝。
uj5u.com熱心網友回復:
最初的問題是HTTP頭沒有正確完成,也就是說,它缺少最后的(空行)。
(空行)。一旦這樣做了,你很可能會遇到其他多個問題,比如:
- 你假設所有的東西都可以在一個單一的
recv中被讀取,這只對簡短的答案來說是真的。 - 你可能假設主體是一個單位元組的緩沖區。但是它可以分塊傳輸,因為HTTP/1.1支持這種傳輸編碼。
- 你可能認為正文是純文本的。但它可以被壓縮,因為你明確地接受gzip壓縮的回應。
HTTP并不像它看起來那么簡單的協議。在實作它之前,請閱讀實際的標準,見RFC 7230。或者只需使用一個為你做艱苦作業的庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311827.html
標籤:
