python使用request庫,出現 Connection broken: IncompleteRead

1) 場景,python

    python使用request庫,出現以下錯誤.python2.7, requests 2.5.1 git

ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))github

   好好的東西,怎麼忽然出現這個狀況,蛋疼無比json

具體的堆棧調用服務器

就是使用requests的postapp

一看requests的源碼,就發現,是在解析stream中的chunked的時候報錯了.python2.7

補充知識: http的chunked請參考: http://blog.csdn.net/zhangboyj/article/details/6236780 curl

由於請求的代碼是別人的服務器,沒辦法讓對方修改.post

通常狀況下http返回數據,都會有個Content-Length的東西.可是在chunked的狀況下,就沒了.url

這時候,咱們須要改變一下策略.

chunked是http1.1纔有的東西,

咱們將http請求的版本,修改成1.0

使用curl命令能夠添加一個參數 -0或者-1 

curl -0 http://xx.com -v 

能夠看到提交請求的頭HTTP/1.0

curl -1 http://xx.com -v 

能夠看到提交請求的頭HTTP/1.1

如今爲了保留大部分代碼都不變的狀況,須要修改requests發送http請求的時候,修改成1.0的http頭

import httplib
httplib.HTTPConnection._http_vsn = 10
httplib.HTTPConnection._http_vsn_str = 'HTTP/1.0'
header = {
    'Content-Type': 'application/json;',
    'Host':'www.xxxx.com'
}
resp = requests.post(url=url, data='{}', headers= header ,timeout=120)

某些狀況下,竟然必定要帶Host.請留意

而後繼續請求,經過wireshark抓包能夠看到.

從返回的數據包裏面,沒有看到chunked的字樣了,不過也沒Content-Length

 

備註: https://github.com/ryanmcgrath/twython/issues/288

       上面連接說更新requests版本到2.12.1就沒問題了.

相關文章
相關標籤/搜索