继上一篇requests发送json请求的文章后,实际工作中遇到了以下2种情况。

1:服务端要求json字符串,键名的顺序固定 

2、服务端对于接收到的json数据中,若key和value之间有空格,则解析不了。

第1种情况:服务端要求json字符串,键名的顺序固定 

服务端在解析客户端请求时,要求收到的请求json数据中,键名的顺序要固定 。比如第一个键名必须是mac,第二个键名必须是agentCode等。

而我们使用requests发送请求数据时,我们是对字典进行json处理的,顺序并不是固定的。

处理方法:在给requests传参时,就给固定顺序的字典就好。

使用collections.OrderedDict。它是有序字典,记住了键值对的添加顺序。

请注意:如果初始化的时候同时传入多个参数,它们的顺序是随机的,不会按照位置顺序存储。

示例代码:

 import collections

 content  = collections.OrderedDict()
content ["mac"] = "NDU1N2RkOTRiYjQ3ZDI5YzI0ZmI5YTQ3ZjMxZGU0OTc2YWY2ZTc3Zg=="
content ["agentcode"] = ""
content ["msgbody"] = {"customercode":"","sourceinfo":[{"SourceCode":"","startdate":"","enddate":""}]} print(content) #输出结果:按键名添加的顺序输出
OrderedDict([('mac', 'NDU1N2RkOTRiYjQ3ZDI5YzI0ZmI5YTQ3ZjMxZGU0OTc2YWY2ZTc3Zg=='), ('agentcode', ''), ('msgbody', {'sourceinfo': [{'SourceCode': '', 'startdate': '', 'enddate': ''}], 'customercode': ''})])

通过使用orderedDict处理之后,将content作为requests请求中json参数值。那么发给服务器端的数据,就是固定的键名顺序。

处理之后,服务器收到的请求数据:

第2种情况:服务端对于接收到的json数据中,若key和value之间有空格,则解析不了。

在解决了固定顺序键名问题之后,可能你还会遇到,后台开发大佬 跟你说:不行啊,你这键名和键值之间有空格,我们不支持解析。

这种情况下,要么你让开发改代码,要么你自己发送的请求中去掉空格。如果你说服不了开发改,那就只能自己处理啦。自己的处理的话,请继续往下看。

此乃空格:

首先,找原因。空格是怎么来的??

在requests库的源码当中,发送出去的请求数据,默认键名和键值之间都是带空格的。

在源码当中,对传进来的json参数,使用json库的dumps函数转换成json对象,而dumps函数默认设置了键名和键值之间的留有一个空格。

所以,要消除键与值之间的空格,需要在requests的源码当中,将参数转换成json对象时,设置separators的值去掉空格。这样发往服务器的数据中键名和值之间就没有空格了。

修改源码如下:

在requests源码的models.py文件中,找到prepare_body函数,修改如下图片中,红色框框中的内容:指定json中键名和键值之间无空格

修改完成之后,再次向服务器发送json数据格式的post请求,服务器收到的数据如下(可以看到键名和值之间没有空格了哦。。):

requests(二): json请求中固定键名顺序&消除键和值之间的空格的更多相关文章

  1. requests:json请求中中文乱码处理

    requests库中,在处理json格式的请求时调用的json.dumps方法参数ensure_ascii默认为True.表示序列化时对中文默认使用的ascii编码.如果想要显示中文,则将此参数的值改 ...

  2. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  3. sql语句查询数据库中的表名/列名/主键/自动增长值

    原文地址:http://blog.csdn.net/pukuimin1226/article/details/7687538 ----查询数据库中用户创建的表 ----jsj01 为数据库名 sele ...

  4. **iOS发JSON请求中字符串加转义,返回的JSON去转义

    iOS中使用NSSerialization把对象转为JSON字符串后,多出来反斜杠的问题 http://segmentfault.com/q/1010000000576646 NSDictionary ...

  5. php数组array,知道键名如何提取键值

    如果是知道键值,需要查找键名,直接使用array_search()即可.现在反过来,如何操作?   (1)array_walk_recursive()加自定义函数查找   $arr=array( 'n ...

  6. requests(三):json请求中中文乱码处理

    最近收到一个问题:json格式请求数据中有中文,导致服务端签名失败. 问题详情: 一位同学在发送json格式的post请求时,请求数据中有中文内容: {"inputCodes":[ ...

  7. Django用户认证系统(二)Web请求中的认证

    在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...

  8. Postman集合/文件夹/请求中脚本的执行顺序

    Postman的Collection(集合)/Folder(集合的子文件夹)/Request(请求)中都有Pre-request Script(请求前脚本)和Tests(请求后脚本) 这个功能类似于不 ...

  9. linux中如何对一个文件的内容进行处理,文件中每行有多个字段的值,中间用空格分隔开?

    需求描述: 今天在帮同事看个需求,将操作系统上的文件进行修改名字,改为特定的名字,所以呢,就先把这些原名字及对应的新名字关系放到了一个文本中,对于这个文本执行循环. 文件格式如下: .00000005 ...

随机推荐

  1. [沈航软工教学] 学生项目Coding地址汇总

    同学们把自己的coding主页链接贴在评论里,要求格式"班号+学号+coding主页链接",如: "1301+13061193 + https://coding.net/ ...

  2. 【MOOC EXP】Linux内核分析实验四报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...

  3. 实验作业:使gdb跟踪分析一个系统调用内核函数

    实验作业:使gdb跟踪分析一个系统调用内核函数(我使用的是getuid) 20135313吴子怡.北京电子科技学院 [第一部分] 根据视频演示的步骤,先做第一部分,步骤如下 ①更新menu代码到最新版 ...

  4. Apache修改了配置文件中的路径后,登录该地址网页出现问题 (其中介绍了selinux的域和安全上下文)

    默认的网站数据存放在: /var/www/html 首页名称: index.html Apache服务程序的主配置文件: /etc/httpd/conf/httpd.conf (若是将  119  行 ...

  5. Java标识符和关键字(static,final,abstract,interface)

    本文的主要内容如下   1.标识符合关键字 2.Java中的关键字 3.static关键 字 4.static方法 5.静态代码块 6.static修饰符综述 7.final关键字 8.final修饰 ...

  6. shell之三大文本处理工具grep、sed及awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. 【大数据】Sqoop学习笔记

    第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MyS ...

  8. 做前端好还是Java好?

    做前端好还是Java好?看这三方面 转载 2017年11月14日 00:00:00 1047这几年来伴随着互联网的迅速发展,新兴互联网产业的兴起,传统行业也逐渐开始互联网化,使得互联网职业在这样的背景 ...

  9. Python Django性能测试与优化指南

    摘要:本文通过一个简单的实例一步一步引导读者对其进行全方位的性能优化.以下是译文. 唐纳德·克努特(Donald Knuth)曾经说过:“不成熟的优化方案是万恶之源.”然而,任何一个承受高负载的成熟项 ...

  10. 上传文件到aws的s3存储

    只要有aws-cli客户端就可以上传文件到aws的S3存储.可以在任意机器上.这里以centos为例. 1.安装python.pip. # yum install -y python python-p ...