前言
今天在看某团h5页面时,听朋友说有个mtgsig
加密参数,于是先来抓包看下
网站地址:aHR0cHM6Ly9tZWlzaGkubWVpdHVhbi5jb20vaS8=
遇到问题
加密参数位置:
但是今天不分析加密参数(我还没看),先分析下这个请求,从中再看requests方法中的(json参数和data参数的区别)
post请求一般会有from-data、payload两种参数类型,按照如下网站(https://developer.aliyun.com/article/1006527
以及https://www.jb51.net/article/237344.htm
)的说法:
(1)在Python中发送Form Data表单请求
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
requests.post(url, data=data, headers=headers)
(2)在Python中发送Request Payload表单请求
传递json数据
headers = {
"Content-Type": "application/json"
}
requests.post(url, data=json.dumps(data), headers=headers)
#或者
requests.post(url, json = data, headers=headers)
在实际中我也是看到from-data数据使用data=dic
的形式,看到payload数据使用json=dic
的形式.
但是这次当我把代码写好后,发送请求,显示下面的错误:
然后我又使用fiddler抓包,重放请求,结果又是可以的??
上次遇到这个题目还是猿人学第3题:请求头参数顺序反爬
于是我按照这个题目的解题思路:采用session.headers=headers的方式保留请求头顺序
结果还是一样的错误,后续分析fiddler中成功与失败请求的区别:发现是使用json=data发送请求后,会将字典dic转换为的json字符串加一些不必要的空格,如果服务器校验严格,就会失败
一般遇到这个问题的都是这样写的,正式因为json传参默认进行格式化造成的问题。
data= {"a":111,"b":222}
request.post(url,json=data)
发送请求时,会转换为
{"a": 111, "b": 222}
解决方案
解决方案就是使用json.dumps手动转换
data_= {"a":111,"b":222}
request.post(url,data=json.dumps(data_,separators=(',', ':')))
本文含有隐藏内容,请 开通VIP 后查看