Python3.x POST发送JSON数据:解决urlencode编码导致的响应异常
本文介绍在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封装时的结果图片

封装成功后的结果图片

本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













