如何解决带有 MSG_PEEK 标志的 HTTP 客户端 recv() 奇怪的行为
首先,我尝试仅读取足够的字节来获取标头,因此我可以提取内容长度。请注意,使用了 MSG_PEEK 标志,它不会从队列 (stated on this page).
peek = client.recv(4096,socket.MSG_PEEK).decode(FORMAT)
content_length = get_content_length() # parse headers and get Content-Length
response = client.recv(content_length).decode(FORMAT)
问题是,我没有收到所有数据(在我的例子中是一个 HTML 页面)。即使将缓冲区大小设置为 100.000 等高值,也没有任何区别。
但是,下面的代码确实可以一次检索所有内容。不同的是我这里没有使用 MSG_PEEK。
response = client.recv(100000).decode(FORMAT)
同样适用于阅读 transfer-encoding: Chunked。当我使用 MSG_PEEK 时,只接收到块的一部分。
这是正常行为吗?或者我应该在循环中调用 recv() 直到读取所有内容?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。