3
我想將分塊編碼數據發佈到httpbin.org/post。我嘗試了兩種選擇:請求和httplib的如何在Python中分塊編碼數據
使用要求
#!/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的痕跡,我沒有看到發送多個塊。相反,我所看到的是所有數據都是以單個塊的形式發送的?我在這裏錯過了什麼嗎?
[如何強制http.client在python中發送chunked-encoding HTTP主體?](http://stackoverflow.com/q/9237961/95735) –
你確定嗎?在Wireshark中選擇單個HTTP消息,您應該能夠擴展超文本傳輸協議部分。該擴展部分應該有另一個名爲「HTTP chunked response」的子頭,它包含你的數據。 – Lukasa
@Lukasa:是的,你說得對。出於某種原因,我對Wireshark中分塊數據如何出現的理解是有缺陷的。我認爲它總是作爲一個單獨的數據包出現。謝謝你的時間。 –