【发布时间】:2013-07-13 18:33:34
【问题描述】:
我正在尝试将分块编码数据发布到 httpbin.org/post。我尝试了两个选项:Requests 和 httplib
使用请求
#!/usr/bin/env python
import requests
def gen():
l = range(130)
for i in l:
yield '%d' % i
if __name__ == "__main__":
url = 'http://httpbin.org/post'
headers = {
'Transfer-encoding':'chunked',
'Cache-Control': 'no-cache',
'Connection': 'Keep-Alive',
#'User-Agent': 'ExpressionEncoder'
}
r = requests.post(url, headers = headers, data = gen())
print r
使用 httplib
#!/usr/bin/env python
import httplib
import os.path
if __name__ == "__main__":
conn = httplib.HTTPConnection('httpbin.org')
conn.connect()
conn.putrequest('POST', '/post')
conn.putheader('Transfer-Encoding', 'chunked')
conn.putheader('Connection', 'Keep-Alive')
conn.putheader('Cache-Control', 'no-cache')
conn.endheaders()
for i in range(130):
conn.send(str(i))
r = conn.getresponse()
print r.status, r.reason
在这两种情况下,每当我分析 Wireshark 跟踪时,我都没有看到发送多个块。相反,我看到的是所有数据都在一个块中发送?我在这里遗漏了什么吗?
【问题讨论】:
-
你确定吗?在 Wireshark 中选择单个 HTTP 消息,您应该能够展开超文本传输协议部分。该扩展部分应该有另一个名为“HTTP 分块响应”的子标题,其中包含您的数据。
-
@Lukasa:是的,你是对的。出于某种原因,我对分块数据如何出现在 Wireshark 上的理解存在缺陷。我认为它总是显示为一个单独的数据包。感谢您的宝贵时间。
-
用httplib是否也需要逐行打印块的长度?
-
它工作正常。我期待在 pcap 上看到每组块的单独跟踪,这不会发生。
标签: python http python-requests httplib chunked-encoding