Python3.x POST发送JSON数据:解决urlencode编码导致的响应异常

许南星
许南星
发布时间:2026-10-13| 3人浏览过
原创

本文介绍在Python接口自动化测试中,使用urlencode编码JSON数据常导致服务器返回200但响应不可读的问题。通过定位发现报文结构被破坏,建议改用json.dumps进行封装。文章提供了完整的代码示例,展示如何正确导入json模块并发送HTTP POST请求,确保服务器能正确解析JSON数据,解决响应内容乱码或加密的问题。

一、摘要

在进行接口自动化测试时,经常需要使用Python发送包含JSON内容的接口报文。如果直接使用urlencode对内容进行编码解析并发送请求,可能会遇到服务器返回状态码200(OK),但响应内容却无法读取(表现为类似加密报文的情况)。通过抓包分析发现,发送的报文内容与原始JSON不符(例如去掉了大括号“{”和“}”等关键字符)。因此,重新采用json封装方式后,问题得以解决。

二、解决方法

1. 首先导入json模块,使用json.dumps函数对JSON内容进行封装。

eg:
import json
str = json.dumps({'userid':'381fccbd776c4deb'})

2. 调用封装后的内容,并发送HTTP请求。

eg:

import http.client,urllib.parse
import json

str = json.dumps({'userid':'381fccbd776c4deb'})
print(str)

#下面注释部分这样做是不行的
#pararms = urllib.parse.urlencode({'userid':'381fccbd776c4deb'}).encode(encoding='UTF8')
headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
conn = http.client.HTTPConnection("10.3.93.216",8080)
conn.request('POST', '/ippinte/api/scene/getall', str, headers)
response = conn.getresponse()
print(response.status, response.reason)
data = response.read().decode('utf-8')
print(data)
conn.close()

附上未进行JSON封装时的结果图片与封装成功后的结果图片:

未进行JSON封装时的结果图片

封装成功后的结果图片

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。