接口请求体-json
接口请求体 - json
简介
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),JSON是轻量级的文本数据交换格式(数据传递)
JSON 独立于语言,JSON 使用 Javascript 语法来描述数据对象,JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持 JSON。
比如接口需要上传 JSON 格式或者我们返回的响应信息也是 JSON 格式
JSON 的语法规则和数据类型如下:
- 数字(整数或浮点数),如
{"age": 18, "score": 70.5}
- 字符串(只能被双引号包裹),如
{"name": "zs" , "sex": "女"}
- 逻辑值(true 或 false),如
{"flag": true}
- 数组(在中括号中),如
{"score": [100, 80, 90]}
- 对象(在大括号中),如
{"stu1": {"name": "zs", "sex": "女"}, "url": "https://www.baidu.com"}
- null,如
{"score": null}
JSON 与 Python 字典的区别:
JSON: - 键只能是字符串,值可以是字符串、数字、对象、数组、布尔值或 null
Python 字典: - 键可以是数字、字符串、元组。值可以是数字、字符串、元组、列表或字典
JSON 是一种数据交换格式,比较简洁和通用,而 Python 字典则是 Python 中的数据结构,更灵活且用于在 Python 中进行数据处理及存储。
访问JSON对象值:
myobj={"name":"zs","sal":10000,"add":None}
# 将字典对象转换为 JSON 字符串
json_str = json.dumps(myobj)
print(json_str)
访问JSON数组:
n = {"name": "qingan", "age": 22, "sites": ["Google", "baidu", "Taobao"]}
x = n["sites"][0]
print(x)
常用接口请求体
类型 | 介绍 | Content-type |
---|---|---|
JSON(JavaScript Object Notation) | 轻量级的数据交换格式,最常见的一种类型。 | application/json |
表单数据(Form Data) | 以键值对的形式提交数据,例如通过 HTML 表单提交数据。 | application/x-www-form-urlencoded |
XML(eXtensible Markup Language) | 常用的标记语言,通常用于传递配置文件等数据。 | application/xml text/xml |
文件(File) | 可以通过请求体上传文件数据,例如上传图片、视频等文件。 | 上传文件的 MIME 类型,例如 image/jpeg multipart/form-data |
纯文本(Text) | 纯文本数据,例如发送邮件、发送短信等场景 | text/plain |
其他格式 | 二进制数据、protobuf 等格式 |
接口中上传的类型除了 json
还有 data
,我们可以看请求头内的 content-type
参数来判断该上传什么格式:
- 若是 application/json
,为 json 格式,则使用 json 参数
- 若是 application/x-www-form-urlencoded
,为表单格式,则使用 data 参数
练习
练习一:
# 导入依赖
import requests
def test_post_json():
# 定义接口的 url 和 json 格式请求体
url = "https://httpbin.ceshiren.com/post"
#定义变量json,将变量json发送到接口的 JSON 格式请求体数据
json = {
"post_key": "post_value"
}
# 发出 POST 请求,r 接收接口响应
r = requests.post(url, json=json)
print(r)
test_post_json()
练习二:
网站:= 高德开放平台
也可以自己在网上搜索免费api网站去练习
import requests
#导入pprint模块
#pprint模块是 Python 中的一个标准库,用于漂亮地打印数据结构,通常用于对复杂数据结构进行格式化的输出
import pprint
api_url = "https://restapi.amap.com/v3/place/text?parameters"
# 请求参数,指定获取METAR报告
params = {
#key可以直接复制这个值即可
"key": "e094cccaa9f94c734344ab015d8b4ec6",
"keywords": "美食",
"city": "北京",
}
# 发送HTTP GET请求获取数据
response = requests.get(api_url, params=params)
#通过pprint规范一下输出结果
pprint.pprint(response.json())
JSON 类型接口请求体构造(Java)
- 通过
given().body(jsonData)
添加请求体信息:JSON
对象 。- 直接复制
String
。
示例网址:Litemall
- 进入登录页面。
- 打开开发者工具。
- 输入用户名密码,点击登录。
示例代码:
package com.ceshiren.headers;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
/**
* 通过REST Assured发送JSON格式的POST请求的测试类。
* 包含两种方式:使用JSONObject构建请求体和直接使用JSON字符串作为请求体。
*/
public class TestJson {
/**
* 使用JSONObject构建POST请求体的测试方法。
* 此方法创建了一个JSONObject对象,向其中添加键值对,然后将其转换为字符串用作请求体。
*/
@Test
void objectPostJson() {
// 创建一个JSONObject实例
JSONObject requestBody = new JSONObject();
// 向JSONObject中添加键值对
requestBody.put("username", "hogwarts");
requestBody.put("password", "test12345");
// 使用given()方法设置请求体为JSON字符串
given()
.body(requestBody.toString())
.log().all() // 打印所有的请求信息
.when()
.post("https://litemall.hogwarts.ceshiren.com/admin/auth/login") // 发送POST请求
// 打印全部的响应信息
.then().log().all();
}
/**
* 直接使用JSON字符串作为POST请求体的测试方法。
* 此方法定义了一个JSON格式的字符串,直接用作请求体。
*/
@Test
void stringPostJson() {
// 定义一个JSON格式的字符串
String jsonData = "{\"username\":\"hogwarts\",\"password\":\"test12345\",\"code\":\"\"}";
// 使用given()方法设置请求体为JSON字符串
given()
.body(jsonData)
.log().all() // 打印所有的请求信息
.when()
.post("https://litemall.hogwarts.ceshiren.com/admin/auth/login") // 发送POST请求
// 打印全部的响应信息
.then().log().all();
}
}
总结
JSON
语法规则- 常用接口请求体
JSON
类型接口请求