关于flask自带web应用服务器Werkzeug 使用requests请求时出现的错误。
先说明一下当时的情况,下午遇到一个需求需要先从jd那边拿到图片然后上传到本地的cdn服务器来获取对应的ident 和地址。
于是就需要首先拿到京东的图片url,然后按照图片url去请求图片到内存然后再将图片上传到cdn上来获取cdn返回的ident和url。
其实,着么解释起来并不是一个复杂的需求
但是今天,当我用python requests包去上传的时候却出现了这个报错
Traceback (most recent call last):
File "create_jd_goods_to_xcf.py", line 38, in <module>
print get_jd_goods(1)
File "create_jd_goods_to_xcf.py", line 28, in get_jd_goods
xcf_info_pic = create_xcf_pic(sku_id, PREFIX_PIC, API_KEY, API_SECRETKEY, jd_goods_info_pic)
File "/home/piperck/project/kepler/kepler/broker/xcf_api.py", line 35, in create_xcf_pic
primary_pic, vice_pics = xcf_get_request_file(URL, data, primary_pic, vice_pics, api_secretkey)
File "/home/piperck/project/kepler/kepler/modules/xcfapi.py", line 52, in xcf_get_request_file
vps = [requests.post(url, data=payload, files={'image': vice_pic}).text for vice_pic in vice_pics]
File "/home/piperck/miniconda2/envs/laplace/lib/python2.7/site-packages/requests/api.py", line 109, in post
return request('post', url, data=data, json=json, **kwargs)
File "/home/piperck/miniconda2/envs/laplace/lib/python2.7/site-packages/requests/api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "/home/piperck/miniconda2/envs/laplace/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/home/piperck/miniconda2/envs/laplace/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/home/piperck/miniconda2/envs/laplace/lib/python2.7/site-packages/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
网上搜了一下,并没有什么答案。于是就开始着手排错了
首先,我怀疑是是由于我使用了列表解析式所产生的问题,因为有五个图片在一个数组里,我直接写了一个列表解析式轮流用requests包去请求京东的图片。
vice_pics = [requests.get(vice_pic).content for vice_pic in vice_pics]
然后再使用 同样的方式将他们轮流上传到公司的cdn上
vps = [requests.post(url, data=payload, files={'image': vice_pic}).text for vice_pic in vice_pics]
于是就出现了上面的报错。
在排除了并非是图片下载的问题之后,所有的目光都集中在请求我们自己的openapi接口上。由于使用的是测试服务器,所以使用的是flask自带的Werkzeug应用服务器。使用的是app.run()这种命令调用的测试服务器。很遗憾,做了一万种测试之后,发现还是报相同的错。百思不得其解。
也怀疑过,可能是请求速度过快造成的。但是在使用了time.sleep(10)之后,依然是报同样的效果,所以基本上可以 排出这种可能。剩下的可能就是服务器bug了。
后来在更换了测试启动的wsgi服务器之后,就可以正常访问和请求了。暂时使用了gevent 提供的wsgi测试服务器就可以正常返回了。这真的非常奇怪,也非常折腾。弄了两个小时,证明了两件事情。
1. 二进制流对象是可以使用数组保存的。
2. 要多从不同的角度尝试可能发生错误的原因。
----------------------------2016年7月28日补充----------------------------
这可能并不是因为flask服务器引发的问题,我记得当时那个项目使用了gevent协程库,但是似乎没有使用monkey_patch对服务器进行包装。导致可能使用的socket等东西都还是标准库里面的东西,在我这边使用请求的时候就发生了错误。 所以后来换成gevent提供的wsgi由于提供了对协程的支持,所以就恢复了正常。现在看来情况应该是这样,上面的文章的分析仅供参考了。。
关于flask自带web应用服务器Werkzeug 使用requests请求时出现的错误。的更多相关文章
- 安卓版微信自带浏览器和IE6浏览器ajax请求abort错误处理
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46419567 给页面元素绑定了一个click事件用来触发ajax请求.在安卓微信自 ...
- 【Flask】微型web框架flask大概介绍
Flask Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持 ...
- Flask自带的常用组件介绍
Flaskrender_templatesessionurl_forredirectflashmake_responsejsonifyblueprintrequestabortgsend_from_d ...
- 个人学期总结及Python+Flask+MysqL的web建设技术过程
一个学期即将过去,我们也迎来了2018年.这个学期,首次接触了web网站开发建设,不仅是这门课程,还有另外一门用idea的gradle框架来制作网页. 很显然,用python语言的flask框架更加简 ...
- Python+Flask+MysqL的web建设技术过程
一.前言(个人学期总结) 个人总结一下这学期对于Python+Flask+MysqL的web建设技术过程的学习体会,Flask小辣椒框架相对于其他框架而言,更加稳定,不会有莫名其妙的错误,容错性强,运 ...
- Python flask 基于 Flask 提供 RESTful Web 服务
转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...
- JSP之WEB服务器:Apache与Tomcat的区别 ,几种常见的web/应用服务器
注意:此为2009年的blog,注意时效性(针对常见服务器) APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等 ...
- Web服务器、应用程序服务器、web应用服务器、反向代理服务器
参考链接:https://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html 首先我们来了解什么是服务器(server) 一般来说,serve ...
- 使用Flask设计带认证token的RESTful API接口
大数据时代 Just a record. 使用Flask设计带认证token的RESTful API接口[翻译] 上一篇文章, 使用python的Flask实现一个RESTful API服务器端 简 ...
随机推荐
- QT写TXT文件
#include <QDir> //头文件 QDir *TEST = new QDir; bool exist = TEST->exists("TEST") ...
- ubuntu和windows系统双系统的开机选项界面有很多无关选项
我的电脑是双系统,在进入系统选项的时候有很多无关的选项, 例如: 解决的方法是在终端输入 sudo gedit /boot/grub/grub.cfg 把文件多余的开机选项删除例如: 保存就可以,开机 ...
- 微软官方的Excel android 移动版的折腾
微软官方的Excel android 移动版,有重大bug.害我折腾了一天多时间.最终确认是Excel自身的问题. 现象描述:手机上新建或是保存excel后.放到电脑上,不能打开.提示”Excel在B ...
- 实现Cookie集合
以前Insus.NET有在博客上有写过一篇<在程序中使用Cookie集合>http://www.cnblogs.com/insus/archive/2011/05/25/2055531.h ...
- WPF中, 启用添加到RichTextBox中的控件
原文:WPF中, 启用添加到RichTextBox中的控件 WPF中, 启用添加到RichTextBox中的控件 ...
- C# 简单的 Job 作业~
改变之前的前言,这次咱这样写: 一个习惯只需十天的坚持就可以养成,坏习惯也不例外!吸烟喝酒的我能否做到十天不吸烟喝酒呢? 呵呵 养成习惯关键还要看决心和意志力 恩,努力控烟吧! 废话说完了,就进入咱们 ...
- Luogu P2657 [SCOI2009]windy数
一道比较基础的数位DP,还是挺套路的. 首先看题,发现这个性质和数的大小无关,因此我们可以直接数位DP,经典起手式: \(f[a,b]=f(b)-f(a-1)\) 然后考虑如何求解\(f(x)\).我 ...
- 校内模拟赛 旅行(by NiroBC)
题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...
- 记一次MongoDB裸奔
导言 大意失荆州,裸奔的 MongoDB 被黑了.虽然并不是什么非常重要的数据,但也给自己敲响的一个警钟.虽然我们平时不容易接触到数据安全,但我们在开发,部署项目的时候,一定要养成良好的安全意识. 根 ...
- R绘图 第十二篇:散点图(高级)
散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过3D图形或气泡来展示,多个变量之间的两两关系可以通过散点图矩阵来展示. 一,添加了最佳拟合曲线的散点图 使用基础函数plot(x,y)来 ...