背景:在进行接口测试时,后台开发使用的是表单形式进行请求参数传递,需要使用application/x-www-form-urlencoded格式,然后尝试了各种方法进行参数传递都不行,最后网上搜索找到一种可行的方式,具体如下:
import requests
import hashlib
import time
import random
from urllib import parse
# 生成指定格式的时间戳
time_stamp = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
# 生成随机请求id
request_id = time_stamp + str(random.randint(1, 10000))
# 签名key值(指定)
key = "a97d1829e966"
add_merc_url = "http://testurl.com" # 已屏蔽为错误url
def add_merchant(*args):
s = ''
biz_req_json = {"agentId": f"{args[0]}",
"merchantNo": f"{args[1]}",
"AgentNo": f"{args[2]}",
"merchanName": f"{args[3]}",
"merchantShortName": f"{args[4]}",
"shopFlag": f"{args[5]}",
"parentMerchantNo": f"{args[6]}",
"bizName": f"{args[7]}",
"bizMphone": f"{args[8]}",,
"Createtime": f"{args[9]}"}
# 拿到用于签名的请求字符串
for k in sorted(biz_req_json):
s += biz_req_json[k]
# 使用MD5签名
m = hashlib.md5()
m.update((s + time_stamp + key).encode('utf8'))
sign = m.hexdigest()
header = {"Content-Type": "application/x-www-form-urlencoded"}
body = {
"sign": sign,
"version": "v1.0.0",
"signType": "MD5",
"charset": "UTF-8",
"timeStamp": time_stamp,
"requestId": request_id,
"bizReqJson": str(biz_req_json)
}
# 使用urllib.parse.urlencode进行转义,将请求参数转成表单形式(重点)
payload = parse.urlencode(body)
print(payload)
r = requests.post(add_merc_url, headers=header, data=payload)
return r
在接口测试中,针对后台使用表单方式传递参数的场景,需要以application/x-www-form-urlencoded格式发送请求。本文介绍了如何在Python中实现这种格式的请求参数传递。

921

被折叠的 条评论
为什么被折叠?



