当前位置: 首页 > news >正文

【二】CURL命令解析

curl请求解析

curl 'https://www.kuaishou.com/graphql' \-H 'Accept-Language: en,zh-CN;q=0.9,zh;q=0.8' \-H 'Cache-Control: no-cache' \-H 'Connection: keep-alive' \-H 'Cookie: weblogger_did=web_140476153E50FC40; kpf=PC_WEB; clientid=3; did=web_6c1bfef1bff5f0e063c16c6381ffc8d0; userId=1926344872; kuaishou.server.webday7_st=ChprdWFpc2hvdS5zZXJ2ZXIud2ViZGF5xxxxAU-QhpLs58EqWw14KtRN3ktXeVV4IUBH-whoUB9UX3l00ZEd9B3n92xxx03QtoxlPf1OuMPcCZg_WwoR6sy5p6VyZobi7CqqXtr-8XLF7slXPq8_PhjMjB5BRkekJPuKCZCSYTPMFYUWTr1AJEzk2Zt-eTtZox9VWK6XPjUUhVxxxxxpwjTvo01wN_qChrZHEG-4f5yJd10AXaDXiGhJglXWxx8RvW8kJJMTzKPTd1I8iIGnzLs4NhZxxxxAmlC8W8L-ZzYA0UByzvqOerFQahKAUwAQ; kuaishou.server.webday7_ph=1b4a3594exxxxxd82c6013531408cb; kpn=KUAISHOU_VISION' \-H 'Origin: https://www.kuaishou.com' \-H 'Pragma: no-cache' \-H 'Referer: https://www.kuaishou.com/search/video?searchKey=22' \-H 'Sec-Fetch-Dest: empty' \-H 'Sec-Fetch-Mode: cors' \-H 'Sec-Fetch-Site: same-origin' \-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36' \-H 'accept: */*' \-H 'content-type: application/json' \-H 'sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"' \-H 'sec-ch-ua-mobile: ?0' \-H 'sec-ch-ua-platform: "Windows"' \--data-raw '{"operationName":"visionSearchPhoto","variables":{"keyword":"22","pcursor":"","page":"search"},"query":"fragment photoContent on PhotoEntity {\n  __typename\n  id\n  duration\n  caption\n  originCaption\n  likeCount\n  viewCount\n  commentCount\n  realLikeCount\n  coverUrl\n  photoUrl\n  photoH265Url\n  manifest\n  manifestH265\n  videoResource\n  coverUrls {\n    url\n    __typename\n  }\n  timestamp\n  expTag\n  animatedCoverUrl\n  distance\n  videoRatio\n  liked\n  stereoType\n  profileUserTopPhoto\n  musicBlocked\n  riskTagContent\n  riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n  __typename\n  id\n  duration\n  caption\n  originCaption\n  likeCount\n  viewCount\n  commentCount\n  realLikeCount\n  coverUrl\n  photoUrl\n  photoH265Url\n  manifest\n  manifestH265\n  videoResource\n  coverUrls {\n    url\n    __typename\n  }\n  timestamp\n  expTag\n  animatedCoverUrl\n  distance\n  videoRatio\n  liked\n  stereoType\n  profileUserTopPhoto\n  musicBlocked\n  riskTagContent\n  riskTagUrl\n}\n\nfragment feedContent on Feed {\n  type\n  author {\n    id\n    name\n    headerUrl\n    following\n    headerUrls {\n      url\n      __typename\n    }\n    __typename\n  }\n  photo {\n    ...photoContent\n    ...recoPhotoFragment\n    __typename\n  }\n  canAddComment\n  llsid\n  status\n  currentPcursor\n  tags {\n    type\n    name\n    __typename\n  }\n  __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n  visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n    result\n    llsid\n    webPageArea\n    feeds {\n      ...feedContent\n      __typename\n    }\n    searchSessionId\n    pcursor\n    aladdinBanner {\n      imgUrl\n      link\n      __typename\n    }\n    __typename\n  }\n}\n"}'

以下是 curl 命令中每个参数及其对应请求头/数据的详细用途说明:

1. 基础请求参数

curl 'https://www.kuaishou.com/graphql'
  • curl:命令行工具,用于发起网络请求。
  • URL:目标接口地址(GraphQL 端点)。

2. 请求头参数(-H--header

通用请求头
参数用途
-H 'Accept-Language: en,zh-CN;q=0.9,zh;q=0.8'告知服务器客户端支持的语言及优先级(q 为权重,值越高优先级越高)。此处表示优先中文(简体),其次英文。
-H 'Cache-Control: no-cache'禁用缓存,要求服务器返回最新资源(等价于 Pragma: no-cache,但更符合 HTTP/1.1 规范)。
-H 'Connection: keep-alive'要求服务器保持 TCP 连接,以便后续请求复用(减少连接建立开销)。
-H 'Cookie: ...'携带客户端存储的 Cookie,用于身份验证、会话保持(如用户登录状态、设备标识)。此处包含用户 ID、设备信息、会话令牌等。
-H 'Origin: https://www.kuaishou.com'声明请求来源域名(跨域请求时必填),用于服务器验证是否允许跨域访问(CORS)。
-H 'Pragma: no-cache'兼容 HTTP/1.0 的禁用缓存指令(与 Cache-Control 功能重复,现代浏览器优先使用 Cache-Control)。
-H 'Referer: https://www.kuaishou.com/search/video?searchKey=22'告知服务器请求的来源页面(即从哪个页面跳转而来),用于统计分析或防盗链。
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'标识客户端身份(浏览器类型、版本、操作系统等),服务器可据此返回适配内容(如桌面版/移动版页面)。
浏览器特有的跨域请求头(Sec-Fetch 系列)
参数用途
-H 'Sec-Fetch-Dest: empty'指示请求的目标用途(empty 表示无需接收响应体,仅获取状态码等元数据,但实际请求体存在,可能为浏览器默认值)。
-H 'Sec-Fetch-Mode: cors'声明请求模式为跨域(CORS),允许与不同源的服务器通信(需服务器配置 Access-Control-Allow-Origin)。
-H 'Sec-Fetch-Site: same-origin'声明请求来源与目标是否同源(same-origin 表示同源,此处实际为跨域,可能为浏览器兼容逻辑)。
客户端 UA 扩展信息(sec-ch-ua 系列)
参数用途
-H 'sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"'提供浏览器指纹信息(品牌、版本),用于客户端特性检测(如 UA Client Hints 标准)。
-H 'sec-ch-ua-mobile: ?0'声明是否为移动设备(?0 表示非移动设备,?1 表示移动设备)。
-H 'sec-ch-ua-platform: "Windows"'声明操作系统平台(此处为 Windows)。
其他关键头
参数用途
-H 'accept: */*'允许接收任意类型的响应内容(实际服务器会返回 application/json,因请求体为 JSON)。
-H 'content-type: application/json'声明请求体格式为 JSON,服务器需按此解析(如解析 GraphQL 查询参数)。

3. 请求体参数(--data-raw-d

--data-raw '{"operationName":"visionSearchPhoto","variables":{"keyword":"22","pcursor":"","page":"search"},"query":"..."}'
  • 用途:发送 POST 请求的正文数据(原始字符串,不进行 URL 编码)。
  • 内容
    • operationName:GraphQL 操作名称(visionSearchPhoto 表示搜索视频)。
    • variables:查询变量(keyword 为搜索关键词 22pcursor 为空表示获取第一页,page 为页面类型 search)。
    • query:GraphQL 查询语句,包含多个 fragment(字段片段),用于指定需要返回的具体数据字段(如视频 ID、播放量、封面链接等)。

4. 隐含的请求参数

  • 请求方法:通过 --data-raw 自动推断为 POST(若使用 -GET 则为 GET 请求)。
  • 编码方式content-type: application/json 表明请求体需按 JSON 解析,而非表单编码(如 application/x-www-form-urlencoded)。

总结:整个 curl 命令的作用

该命令模拟浏览器向快手的 GraphQL 接口发起 跨域 POST 请求,携带:

  1. 身份信息(Cookie、User-Agent)以验证用户状态;
  2. 跨域相关头(Origin、Sec-Fetch-*)以通过服务器 CORS 校验;
  3. 搜索参数(关键词 22、查询字段)以获取视频搜索结果。
    最终目的是获取符合条件的视频数据(如 ID、播放量、作者信息等),用于页面渲染或数据采集。
http://www.xdnf.cn/news/364375.html

相关文章:

  • 报错 <pcl/features/feature_evaluation/feature_evaluation_framework.h> 不存在的解决办法
  • Java中的控制流语句:if、switch、for、foreach、while、do-while
  • Redis 8.0携新功能,重新开源
  • 【Unity】Unity中修改网格的大小和倾斜网格
  • 如何解决Jmeter中的乱码问题?
  • 【PHP】基于币安链,一个完整的USDT转账示例
  • 【python】 python拆包
  • 【QT】项目打包与发布安装
  • 图灵爬虫练习平台第七题千山鸟飞绝js逆向
  • 宠物医院预约|基于Java+vue的宠物医院预约平台系统(源码+数据库+文档)
  • windows celery OSError: [WinError 6] 句柄无效
  • ELF-如何学习
  • C++(1):整数常量
  • Mysql存储引擎
  • 期刊论文写作注意点
  • LVGL源码学习之渲染、更新过程(1)---标记和激活
  • 【C/C++】为什么要noexcept
  • 机器学习第二讲:对比传统编程:解决复杂规则场景
  • 机器学习实操 第二部分 第19章 大规模训练和部署 TensorFlow 模型
  • RPG11.创建玩家Ability类
  • 基于CNN的猫狗图像分类系统
  • 推荐系统(二十五):基于阿里DIN(Deep Interest Network)的CTR模型实现
  • SpringCloud的作用
  • Java高频基础面试题
  • EMC|AC/DC转换器ESD静电防护
  • The 2024 ICPC Kunming Invitational Contest G. Be Positive
  • 【Python-Day 11】列表入门:Python 中最灵活的数据容器 (创建、索引、切片)
  • 【Spring】手动创建Spring|Boot项目
  • 【Golang】gin框架动态更新路由
  • C++--NULL和nullptr的区别