我正在尝试将分块编码的数据发布到httpbin.org/POST。我尝试了两种选择:请求和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
#!/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跟踪时,都不会看到发送多个数据块。相反,我看到的是所有的数据都是在一个块中发送的?我是不是丢了什么东西?
你发布的代码不应该正常工作。您仍然获得成功响应的原因是httpbin.org当前不支持分块传输编码。请参阅错误https://github.com/kennethreitz/httpbin/issues/102。
就像上面链接的postPiotr一样,您应该用十六进制写出每个块的长度,然后写出块本身。
我杀掉了你的代码作为例子。http://httpbin.org/post端点有a form that you can use for testing。这就是我生成
chunk1
和chunk2
表单数据的地方。wireshark中的流看起来如下所示,这是不正确的,因为它没有等待(注意后面的
0
)或解释我们发送的请求体(注意json: null
):相关问题 更多 >
编程相关推荐