网站首页 > 技术文章 正文
Http请求中Form Data 和 Request Payload两种参数的区别 ?
Ajax Post请求中常用的两种的形式:form data 和 request payload
一、默认的表单方式请求 Form Data
post请求的Content-Type为
application/x-www-form-urlencoded(默认的),参数是在请求题中,即上面请求中的Form Data。
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
代码格式:
data = {
'i': '\u903B\u8F91\n',
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '15752746021826',
'sign': 'c62688ce2eab6fd7a95cac50c3e88752',
'ts': '1575274602182',
'bv': '5bc00aa7005fda30bbc3c3735a53d97d',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
复制代码
二、经浏览器解析后的表单请求 Request Payload
PS: 请求的Content-Type是application/json;charset=UTF-8,而请求表单的参数在Request Payload中。
Content-Type: application/json (这里用的是json格式)
代码格式:
payload = '{"operationName":"","query":"","variables":{"ownerId":"5c3f3c415188252b7d0ea40c","size":20,"after":""},"extensions":{"query":{"id":"b158d18c7ce74f0d6d85e73f21e17df6"}}}'
复制代码
二者之间的区别 ?
post请求,如果表单参数是在请求体中,也是以key1=value1&key2=value2的形式在请求体中。
通过chrome的开发者工具可以看到,比如:
fanyi.youdao.com/translate_o…
1、如果一个请求的Content-Type设置为
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
那么这个Post请求会被认为是Http Post表单请求,请求主体也将以一个标准的键值对和&的str形式出现。这种方式是HTML表单默认的设置,对现如今的网络请求构造是很常见的。
2、Request payload形式的POST请求,网站为了方便阅读,使用了Json这样的数据格式,请求的方式为
Content-Type: application/json 或者指定charset=UTF-8。
- 实战
使用requests模块post payload请求
在抓取个人数据的时候发现get形式获取不到数据,通过分析网站结构发现需要Post请求的json格式数据;进而发现其使用的Post格式并不是Form Data 而是Request Payload
第一步:先请求拿到数据再说
import requests
import json
# 首页地址
url = "https://web-api.juejin.im/query"
# 伪装成浏览器
headers = {
'X-Legacy-Device-Id': '1574318487465',
'Origin': 'https://juejin.im',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Legacy-Token': 'eyJhY2Nlc3NfdG9rZW4iOiJBNVNuRUNPb1Jad0doWm1wIiwicmVmcmVzaF90b2tlbiI6IkpuVkFoZFozdjNFdDZMOFMiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ==',
'Content-Type': 'application/json',
'Referer': 'https://juejin.im/user/3650034335487975',
'X-Legacy-Uid': '5dd631975188254e310b4cbb',
}
payload = '{"operationName":"","query":"","variables":{"ownerId":"5c3f3c415188252b7d0ea40c","size":20,"after":""},"extensions":{"query":{"id":"b158d18c7ce74f0d6d85e73f21e17df6"}}}'
# 发起网络请求,获取到返回的html
result = requests.post(url=url, headers=headers, data=payload).content.decode('utf-8')
print(result)
复制代码
这时候已经可以拿到payload表单形式的json数据了,因为考虑到是json格式的数据,不方便我们进行数据处理!接下来咱们先转换一下格式!这里转换成字典格式。
result=json.loads(result)
result_list=result['data']['ownActivityFeed']['items']['edges']
print(result_list)
复制代码
这个时候已经成功的将数据格式进行转换,之后并通过一直获取键值对的形式拿到网站所包含的数据;数据类型的格式为列表, 再次深入获取
for item in result_list:
# # 用户名
node_list=item['node']
user_targets_content=node_list['targets']
for item_name_list in user_targets_content:
try:
user=item_name_list['user']
user_name=user['username']
user_content=item_name_list['content']
except:
continue
print('*' * 30, '\n', user_name, user_content, '\n', '*' * 30)
with open('lg_Tony.txt','a') as file:
file.write(user_name+'\t\t'+user_content+'\n\n')
复制代码
考虑到只是获取简单的界面内容,所以这里只用了txt文件进行保存。
最终显示数据内容
在这个浮躁的时代;竟然还有人能坚持篇篇原创;
如果本文对你学习有所帮助-可以点赞+ 关注!将持续更新更多新的文章。
支持原创。感谢!
猜你喜欢
- 2025-05-11 四个小案例,学懂Python爬虫的requests库
- 2025-05-11 干货!最简单的检测爬虫突破封禁的方法
- 2025-05-11 SNAT/DNAT实现外网访问内网
- 2025-05-11 PHP类Web网站适应移动设备十贴士
- 2025-05-11 DrissionPage:让你的 Python 爬虫和自动化脚本飞起来!
- 2025-05-11 vue 如何实现跨域
- 2025-05-11 这个前端黑科技可能是YouTube比B站、优酷、爱奇艺加载快的原因
- 2025-05-11 实战Python爬虫(二):requests请求库
- 2025-05-11 还在用 postman?手把手教你用 curl 提高工作效率
- 2025-05-11 搭建网站SEO优化技巧:从小白到流量高手的蜕变之路
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)