Python requests库发送body只有一个list的请求的写法

本文探讨了如何使用Python的requests库发送一个包含单一list作为body的POST请求,解决了一个特殊的开发场景问题。

Python requests库发送body只有一个list的请求的写法


今天遇到一个开发奇怪的POST请求,body里只有一个list
贴到be json里竟然说是正确的json格式。
postman如下:
在这里插入图片描述
然后我就抓瞎了,不知道Python发这个请求应该怎么发。
试了很多次,如下:
body = [str(fileId)]
response = requests.post(request_url, json=body, params=params, headers=headers)

<think>我们正在讨论如何使用requests进行接口测试,特别是GET和POST请求的编写方法。用户已经明确要求获取书写这两种请求的方法。 根据用户上一次的问题和我的回答,用户已经了解requests接口测试中的核心价值,现在需要具体的代码示例和方法。 我将按照以下结构回答: 1. GET请求写法(包括带参数、请求头等) 2. POST请求写法(包括不同数据格式:表单、JSON、文件等) 3. 在测试中如何断言响应(状态码、响应体等) 4. 进阶技巧:会话维持、超时设置等 5. 生成相关问题 注意:用户要求参考站内引用,但本次问题中用户并未提供具体引用内容,因此我将基于通用知识回答,并适当引用之前回答中的技术点(如会话维持、断言等)。 同时,按照要求,所有公式使用LaTeX格式,但本回答中公式较少,主要展示代码和文字描述。 另外,用户要求生成相关问题,我将放在最后。 </think>### 使用 Requests 进行接口测试:GET/POST 请求方法详解 Requests Python 中最简洁的 HTTP 请求工具,以下是接口测试中 `GET` 和 `POST` 请求的核心写法及关键注意事项: --- #### 一、GET 请求方法(数据获取) ```python import requests # 基础 GET 请求 response = requests.get("https://api.example.com/users") # 带查询参数(自动编码) params = {"page": 2, "limit": 10} response = requests.get( "https://api.example.com/users", params=params ) # 验证响应 assert response.status_code == 200 user_list = response.json() # 自动解析 JSON assert len(user_list) > 0 ``` **关键参数**: - `params`:URL 查询参数(字典或字节流) - `headers`:自定义请求头(如 `{"Authorization": "Bearer token"}`) - `timeout`:超时控制(如 `timeout=3.0`,单位:秒)[^1] --- #### 二、POST 请求方法(数据提交) ##### 1. 表单提交 (`application/x-www-form-urlencoded`) ```python # 表单数据提交 data = {"username": "test_user", "password": "p@ssw0rd"} response = requests.post( "https://api.example.com/login", data=data ) ``` ##### 2. JSON 数据提交 (`application/json`) ```python # JSON 数据提交(自动设置 Content-Type) payload = {"name": "New Item", "price": 29.99} response = requests.post( "https://api.example.com/items", json=payload # 关键参数 ) # 验证创建结果 assert response.status_code == 201 assert response.json()["id"] is not None ``` ##### 3. 文件上传 (`multipart/form-data`) ```python # 上传单个文件 with open("test_data.xlsx", "rb") as f: files = {"file": f} response = requests.post( "https://api.example.com/upload", files=files ) # 上传多文件+附加字段 files = {"file1": open("a.txt", "rb"), "file2": open("b.jpg", "rb")} data = {"category": "docs"} requests.post(url, files=files, data=data) ``` --- #### 三、高级测试技巧 1. **会话维持**(跨请求保持 Cookie) ```python with requests.Session() as s: s.post(login_url, json=credentials) # 登录 response = s.get(profile_url) # 自动携带会话 ``` 2. **自动化断言** ```python # 响应时间断言 assert response.elapsed.total_seconds() < 0.5 # 响应需在 500ms 内 # JSON Schema 验证 from jsonschema import validate schema = {"type": "object", "properties": {"id": {"type": "integer"}}} validate(response.json(), schema) # 验证数据结构 ``` 3. **错误处理** ```python try: response = requests.get(url, timeout=2) response.raise_for_status() # 自动抛出 4xx/5xx 错误 except requests.Timeout: print("请求超时") except requests.HTTPError as e: print(f"服务端错误: {e.response.status_code}") ``` --- #### 四、对比 GET/POST 的核心差异 | 特性 | GET 请求 | POST 请求 | |---------------|-----------------------------------|------------------------------------| | **数据位置** | URL 查询参数 (`?key=value`) | 请求体 (Body) | | **安全性** | 参数暴露在 URL,不适合敏感数据 | 数据在 Body 中,相对安全 | | **数据长度** | 受 URL 长度限制(通常 ≤2048字符) | 无限制 | | **幂等性** | 幂等(重复请求无副作用) | 非幂等(可能多次创建资源) | | **测试场景** | 数据查询、列表获取 | 资源创建、登录认证、文件上传 | ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值