网站首页 > 博客文章 正文
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-01-02 在测试接口的时候,还在为token过期郁闷?
- 2025-01-02 历史上的今天大事件查询工具推荐 - 历史上的今天 API
- 2025-01-02 面试突击64:了解 HTTP 协议吗?
- 2025-01-02 总结的HTTP比较详细的知识
- 2025-01-02 什么是Http请求走私(Http Request Smugging)及如何发现?
- 2025-01-02 手机号码二要素核验API:提升数据准确性与安全性
- 2025-01-02 真不是吹,Spring 里这款牛逼的网络工具库你可能没用过
- 2025-01-02 详解HTTP协议基本结构
- 2025-01-02 计算机网络-应用层-万维网
- 2025-01-02 Python | Django 通过 form 表单和 ajax 上传文件
你 发表评论:
欢迎- 最近发表
-
- 告别频繁登录!Nuxt3 + TS + Vue3实战:双Token无感刷新方案全解析
- SpringBoot实现单点登录(SSO)的4种方案
- 随机密聊 匿名聊天室程序源码(随机匿名聊天在线)
- SpringBoot大文件上传卡死?分块切割术搞定GB级传输,速度飙升!
- Java 微服务从源码实战开始 | Gitee 项目推荐
- 轻量级埋点sdk搭建,便捷更全面(埋点sdk是什么)
- Spring Boot 实现文件秒传功能(springboot上传文件到指定文件夹)
- 项目中不用redis分布式锁,怎么防止用户重复提交?
- SpringBoot项目日志打印traceId生成
- 如何实现PC端网站扫码登录操作?(网页 扫码)
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)