文档章节

python使用request库,出现 Connection broken: IncompleteRead

testwork
 testwork
发布于 2017/03/14 16:45
字数 385
阅读 2303
收藏 0

1) 场景,

    python使用request库,出现如下错误.python2.7, requests 2.5.1 

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

   好好的东西,怎么突然出现这个情况,蛋疼无比

具体的堆栈调用

就是使用requests的post

一看requests的源码,就发现,是在解析stream中的chunked的时候报错了.

补充知识: http的chunked请参考: http://blog.csdn.net/zhangboyj/article/details/6236780 

因为请求的代码是别人的服务器,没办法让对方修改.

一般情况下http返回数据,都会有个Content-Length的东西.但是在chunked的情况下,就没了.

这时候,我们需要改变一下策略.

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就没问题了.

 

© 著作权归作者所有

testwork
粉丝 4
博文 74
码字总数 21048
作品 0
崇明
程序员
私信 提问
urllib3请求网页有时候会提示 IncompleteRead(65149 bytes read)

有时候能正常访问,有时候就会提示 raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.oschina.net ', po......

yak
03/13
487
0
No matching distribution found for pcapy

[root@localhost bin]# ./pip install pcapy DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintain......

打杂uu
06/18
244
0
Tornado 4.5.3 发布,Python Web 框架和异步网络库

Tornado 是使用 Python 开发的全栈式(full-stack)Web 框架和异步网络库,最早由 Friendfeed 开发。通过使用非阻塞 IO,Tornado 可以处理数以万计的开放连接,是 long polling、WebSockets ...

王练
2018/01/07
778
4
Debian pip3 ImportError: cannot import name 'IncompleteRead'错误解决

突然pip3不能正常使用了, 执行pip3 -V报错为如下: 瞬间崩溃,翻阅一些资料给出的解决方案均是 easy_install3 -U pip3 修复,试后仍然无法解决,随换另一种方法,重新安装pip3: apt-get re...

Sunki
01/24
30
0
python3的http.client读数据读不完整

如果不设置http1.0 读数据有时地出现 raise IncompleteRead(b''.join(value)) http.client.IncompleteRead: IncompleteRead(97885 bytes read) 设置http1.0 没有异常了,但是有时只读出一部分......

yak
03/14
203
2

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部