python 爬虫处理 POST request payload 请求
最近在采集某网站的时候发现是通过 post 请求来请求数据的, 使用的数据格式是 request payload, 这个和之前看到过的常见的 POST 请求不同 (Form data), 这个时候在使用 Form data 的请求方式来提交时, 就无法请求到真实数据了.
Http 请求中 Form data 和 request payload 的区别: 其实这两种都是 Ajax 中常见的两种传参数的形式
Form data
get 请求的时候我们通常直接在 url 中以 key=value 的形式
post 请求, 表单参数都是在请求体中的, 也就是将 key=value 从 url 中剥离了出来
request payload
要是使用的是原声的 Ajax post 请求的话, 那么在 Chrome 中的开发者模式下会看到单独的 request payload 中的参互展示出来
在请求的 content-Type 中是 application/JSON;charset=UTF=8, 而在请求表单的参数在 request payload 中
两者之间的区别
如果一个请求的 content-Type 被设置成 application/x-www-form-urlencoded, 那么这个 Post 请求会被认为是 Http Post 请求, 那么请求的主体将会以一个标准的键值对和 & 的 querystring 形式出现, 这种方式是 html 表单的默认设置, 所以在过去这种方式更加常见
其他形式的 POST 请求, 是放到 request payload 中 (现在为了方便阅读, 使用了 JSON 进行序列化), 所以请求的 content-Type 设置成了 application/JSON;charset=UTF-8 或者是不指定
python 中使用 requests 模块来请求 post payload 模块
- payloadData = {
- 'initPage': 'false',
- 'pageNum': '1',
- 'pageSize': '20',
- 'supplierCateId': "-1",
- 'queryType': "pro"
- }
- payloadData['pageNum'] = str(jb)
- # 请求头设置
- payloadHeader = {
- 'Host': 'a300010770.casmart.com.cn',
- 'Content-Type': 'application/json',
- }
- r = requests.post(postUrl, data=JSON.dumps(payloadData), headers=payloadHeader).text
来源: http://www.bubuko.com/infodetail-3375130.html