requests之post请求data传参和json传参区别

这篇具有很好参考价值的文章主要介绍了requests之post请求data传参和json传参区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

在一次接口post测试请求传参异常的记录

    print(header)
    rp = requests.post(
        EvnUrlConfig.getUrl(url),
        headers=header,
        data=userDevcieParam
    )

传输到后台服务器报了异常

requests之post请求data传参和json传参区别,软件自动化测试,python


原因分析:

显而易见我的请求头的content-type类型有异常了,但我明明传的是application/json为什么给我转成了另外的格式呢?

requests 中 post 请求参数区别

在解释之前先提一下 httpbin.org 这个网站,这个网站的介绍是 A simple HTTP Request & Response Service. ,简单来说就是它是一个调试网站,可以通过网站返回的数据来了解我们发送给服务器的数据是怎么样的,服务器接收到了什么类型的数据,它的功能有很多,大家可以到它的官网多多了解下。

使用 requests 这个库可以通过不同的参数发送不同编码类型的数据,先看一段代码:

from pprint import pprint

import requests

url = 'http://httpbin.org/post'
data = {'a_test': 112233, 'b_test': 223344}
r = requests.post(url=url, data=data).json()
pprint(r)

url = 'http://httpbin.org/post'
data = {'a_test': 112233, 'b_test': 223344}
r = requests.post(url=url, json=data).json()
pprint(r)

我们使用同一个字典,使用 data 参数和 json 参数分别发送同样的数据,来对比数据是如何被处理的,以及被处理的结果。先看打印出来的返回值:

 {'args': {},
 'data': '',
 'files': {},
 'form': {'a_test': '112233', 'b_test': '223344'},
 'headers': {'Accept': '*/*',
             'Accept-Encoding': 'gzip, deflate',
             'Content-Length': '27',
             'Content-Type': 'application/x-www-form-urlencoded',
             'Host': 'httpbin.org',
             'User-Agent': 'python-requests/2.24.0',
             'X-Amzn-Trace-Id': 'Root=1-5f4869c6-b3834c881b400bc9b2877715'},
 'json': None,
 'origin': '125.36.92.42',
 'url': 'http://httpbin.org/post'}
{'args': {},
 'data': '{"a_test": 112233, "b_test": 223344}',
 'files': {},
 'form': {},
 'headers': {'Accept': '*/*',
             'Accept-Encoding': 'gzip, deflate',
             'Content-Length': '36',
             'Content-Type': 'application/json',
             'Host': 'httpbin.org',
             'User-Agent': 'python-requests/2.24.0',
             'X-Amzn-Trace-Id': 'Root=1-5f4869c6-a9b34c351c0adeed9669ac2a'},
 'json': {'a_test': 112233, 'b_test': 223344},
 'origin': '125.36.92.42',
 'url': 'http://httpbin.org/post'}

通过上面数据可以看出,使用 data 参数时,发送的数据默认使用 application/x-www-form-urlencoded 编码方式进行处理,然后发送了出去,证据就是我们发送的数据出现在了 form 表单字段中,而且 Content-Type 字段的值为 application/x-www-form-urlencoded,并且 json 字段的数据为 None(因为它的服务端是用 python 写的,所以会出现 None)。

而使用 json 参数发送的数据,Content-Type 字段的值为 application/json,证明是通过 application/json 编码发送的数据,并且数据出现在了 json 字段中,证明服务端正常收到了 json 类型的数据并且可以正常处理。

参考链接:https://zhuanlan.zhihu.com/p/202978890?utm_id=0


解决方案:

将data改成json就可以了文章来源地址https://www.toymoban.com/news/detail-682979.html

    rp = requests.post(
        EvnUrlConfig.getUrl(url),
        headers=header,
        json=userDevcieParam
    )

到了这里,关于requests之post请求data传参和json传参区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • axios中get、post请求传参区别及使用

    params 中的参数是通过地址栏传参,一般用于get请求 data 是添加到请求体(body)中的, 一般用于post请求 get请求只能传query参数,query参数都是拼在请求地址上的 post可以传body和query两种形式的参数 一般情况下post请求方式的Parameter Type是body,在一些极少情况下,post请求的参数

    2024年02月14日
    浏览(48)
  • python使用requests提交post请求并上传文件(multipart/form-data)

    目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返回结果。考虑使用python的requests,一般这种查询或上传文件的接口都是post请求。

    2024年02月12日
    浏览(60)
  • jar程序部署的外部依赖和按名传参和shellUtil传参json串及返回pid问题

    java -cp 命令跟jar路径和指定的编译类(main)路径; java -jar 跟jar路径也ok,但是需要打包的时候指定 jar包里的 MANIFEST.MF 文件中 Main-Class项的值 。即默认运行的main函数。 使用getopts命令。 getopts命令识别出各个入参选项之后(用:分隔),遍历case判断。其操作中,有两个\\\"常量

    2024年02月16日
    浏览(38)
  • 理解 flask中request中form、data、json、values属性的区别

    flask的request对象中关于请求参数的获取有几个不同的属性,例如 args、form、data、json。估计大部分人一开始也分不清什么情况下哪个属性有值,哪个属性没值,这篇文章全面整理了这几个属性之间的区别和使用场景。 flask.request对象其实是对HTTP请求的一种封装,我们知道HTTP

    2024年02月12日
    浏览(41)
  • 接口自动化【一】(抓取后台登录接口+postman请求通过+requests请求通过+json字典区别)

    文章目录 前言 一、requests库的使用 二、json和字典的区别 三、后端登录接口-请求数据生成 四、接口自动化-对应电商项目中的功能 五、来自postman的代码-后端登录 总结 记录:json和字典的区别,json和字段的相互转化;postman发送请求与Python中代码发送请求的区别。 安装: p

    2024年02月01日
    浏览(55)
  • 使用接口调试软件(PostMan和APIPost)的技巧和注意事项(附加Get和Post请求区别)

    看完这篇文章,不仅能学会使用接口调试软件,还能 高效 的生成接口说明文档 首先,先来告诉各位Get请求和Post请求的区别 (记住:除了标注是Post的请求,其他都是Get请求) Get请求有: (1). form标签method=get (2). a标签 (3). Iink标签引入css (4). Script标签引入js文件 (5). img标签引入

    2024年04月12日
    浏览(47)
  • Java http GET POST 请求传参

    HTTP POST请求传参方式 方式一: 方式二 HTTP GET请求传参方式

    2024年02月15日
    浏览(49)
  • axios的post请求所有传参方式

    Axios支持多种方式来传递参数给POST请求。以下是一些常见的方式: 作为请求体: 你可以将参数作为请求体的一部分,通常用于发送表单数据或JSON数据。例如: 作为URL参数: 你可以将参数作为URL的一部分,通常用于RESTful风格的API。例如: 作为查询字符串参数: 你可以将

    2024年02月04日
    浏览(36)
  • 前端post,get请求传参方式 以及后台接收

    post请求: 1:js中 2:使用 首先引入方法js: 调用方法 3:浏览器请求 4:后台参数接收 get请求: 第一种:通过params对象传递,将参数以键值对的形式传递,当传递的参数为多个时,浏览器会自动拼接进行分割 1:js中 2:使用 首先引入方法js: 调用方法 3:浏览器请求 4:后台

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包