今又在丰富mock http接口了,由于我的开发速度太快,同事们的开发速度太慢,哈哈别打我, 他们在一定程度上拖慢了哥的大腿.  但又因为哥的接口要大量耦合调用他们的rest api,又为了kpi稳定的推进.  哥直接用tornado自己写一套完整的mock server…  

文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新。

http://xiaorui.cc/2016/01/25/%E5%88%86%E6%9E%90requests%E6%BA%90%E7%A0%81%E8%A7%A3%E5%86%B3headers%E6%97%A0%E6%B3%95json%E9%97%AE%E9%A2%98/


这个是其中遇到的问题,以前都是用msgpack来序列化数据,但因为很多时候不好调试数据,你用json序列化数据还是能看懂的.  下面是我序列化headers头部信息报错.

raise TypeError(repr(o) + ” is not JSON serializable”) ,还真没看到过着问题.  一顿狂搜出来的结果跟我遇到的问题都不一样,最后通过看requests structures类解决的.

我们看看headers的type,是CaseInsensitiveDict类.


这是解决方法.

我们为什么要调用dict函数呢? 因为CaseInsensitiveDict类不能直接使用,他跟原装的dict字典微微有些差异的.

既然搜不出解决方法,那就直接看下requests的源码,看看为什么会有出现那问题… 

vim /Library/Python/2.7/site-packages/requests/structures.py

通过看了requests的相关源码,我们还可以这么理解,所谓是一通百通 …   repr跟str的区别就在于此.

In [111]: str(r.headers)
Out[111]: “{‘x-powered-by’: ‘PHP/5.3.3′, ‘transfer-encoding’: ‘chunked’, ‘content-encoding’: ‘gzip’, ‘server’: ‘nginx/1.8.0′, ‘connection’: ‘keep-alive’, ‘date’: ‘Mon, 25 Jan 2016 09:56:54 GMT’, ‘content-type’: ‘text/html; charset=UTF-8′, ‘x-pingback’: ‘http://xiaorui.cc/xmlrpc.php’}”

In [112]: eval(str(r.headers))
Out[112]:
{‘connection’: ‘keep-alive’,
 ’content-encoding’: ‘gzip’,
 ’content-type’: ‘text/html; charset=UTF-8′,
 ’date’: ‘Mon, 25 Jan 2016 09:56:54 GMT’,
 ’server’: ‘nginx/1.8.0′,
 ’transfer-encoding’: ‘chunked’,
 ’x-pingback’: ‘http://xiaorui.cc/xmlrpc.php’,
 ’x-powered-by’: ‘PHP/5.3.3′}

遇到这个python requests不是坑的坑. 现在也不是很理解为什么要那么设计.  就这样吧,本来不大的问题,扯这么多… 见谅…



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品

发表评论