问题描述
首先,我尝试仅读取足够的字节来获取标头,因此我可以提取内容长度。请注意,使用了 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 (将#修改为@)