故事一:有个小弟在研究某航空网站,提交的参数如下:
有着丰富经验的他写下了如下的代码,却怎么也获取不到数据,头发倒是掉了不少:
data = {
'request': {"depdate":"2019-09-12","hctype":"DC","orgcity":"SZX","dstcity":"PEK","depdate2":""}
}
r = requests.post(url,data = data)
print (r.text)
一看参数什么的都正确,但就是不知道为什么没有返回正确的数据。
故事二:有位不愿意透露姓名的网友看了我的JS入口篇(一)以后,通过自己的不懈努力,破解出来了那个加密参数,正准备用Python来调用测试一番,确发现那个参数不知道在Python里该怎么提交,都懵了。我估计他以前提交的都是字典类型的参数,现在变成的字符串,就不知道该怎么处理了。
其实不用慌,很轻松就能让你告别脱发的烦恼。
请出我们的大杀器:
https://curl.trillworks.com/
访问这个网站,上面甚至都有教你怎么去使用的教程。我在这里也简单的写一下吧。
下面以故事二为例来看看该怎么做,假设你已经打开了入口(一)中的URL,并输入了账号和密码。
选中参数所在的接口;
单击右键,选择相应的菜单,如图:
注意:一定要选择 这个命令:
Copy as cURL(bash)
复制后,我们将命令粘贴到这个框内:
会自动帮你编写Python该怎么调用的示例:
Python代码入下:
import requests
headers = {
'Accept': 'application/json, text/plain, */*',
'Referer': 'https://m.gojoy.cn/pages/login/index?from=%2Fpages%2Fuser%2Findex',
'Origin': 'https://m.gojoy.cn',
'Authorized-Token': '',
'Private-Platform': 'h5',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'Content-Type': 'application/json',
}
data = 'p57Zp53l.T6J8TROp53lp5chp53lY5YSYgnCYgnCYgnOYG3OY1YOYGpCA9cK706l-ZblYJbK4dblYFcj85ulYK4wcJblYJbl4lblYNIk.FbOYG3OY_uScJbMqZbM4K1MclbM4KuwcGERY5blcG3lP5be'
response = requests.post('https://gmall.gojoy.cn/user-service/user/login', headers=headers, data=data)
细心的你很快就发现,原来和提交 字典是一样的啊。
那故事一中的参数改怎么提交呢,其实,只需要将参数里面的字典变成字符串即可(当然也是这个网站转换得知的):
data = {
'request': '{"depdate":"2019-09-12","hctype":"DC","orgcity":"SZX","dstcity":"PEK","depdate2":""}'
}
r = requests.post(url,data = data)
print (r.text)
如果要深知其原理,还得翻看requests的源码,以及了解一些前端知识。