激情的开头,大意的结局,Python反爬加更,好友求助米哈游的API,给他安排上 Y24

举报
梦想橡皮擦 发表于 2022/04/29 10:02:29 2022/04/29
【摘要】 📢📢📢📢📢📢💗 你正在阅读 【梦想橡皮擦】 的博客 ⛳️ 实战场景本篇博客属于加更系列,源自 78 技术人社群(点击博客下卡片你也可以加入)本次的需求是一个站点,地址如下所示,群友提供的地址。bbs.mihoyo.com/dby/article/21147956打开页面一看,果然~在按照群友提供的 API 寻找对应的请求逻辑,下述是群友提供的地址。bbs-api.Python脱...

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客

⛳️ 实战场景

本篇博客属于加更系列,源自 78 技术人社群(点击博客下卡片你也可以加入)
image.png

本次的需求是一个站点,地址如下所示,群友提供的地址。

bbs.mihoyo.com/dby/article/21147956

打开页面一看,果然~

image.png

在按照群友提供的 API 寻找对应的请求逻辑,下述是群友提供的地址。

bbs-api.Python脱敏处理.com/post/wapi/getPostFull?gids=5&post_id=21147956&read=1

它的代码截图如下所示。

image.png

在请求头中基本参数具备的情况下,依旧得到了 403 状态码,可以猜测请求头中大概率有加密逻辑,这不巧了么,撞上门的案例。

⛳️ 反爬分析

打开开发者工具之后,直接被无限 debugger 阻挡了。

先禁止这行代码的运行,在行号位置选择下图所示按钮。

找到群友提供的接口,查看其请求头,判断校验参数。

请求网址: bbs-api.脱敏处理.com/post/wapi/getPostFull?gids=5&post_id=21147956&read=1
请求方法: GET

除了 cookie 外,下图框选的几个参数有很大的嫌疑。

这里看数据的格式,可以盲猜是时间戳和 md5 加密。

使用 PostMan 模拟一下请求,结果直接访问到数据了,尴尬了,难道跟加密参数无关?

编写代码如下所示:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
    "Origin": 'https://bbs.mihoyo.com/',
    "User-Agent": "https://bbs.mihoyo.com/"

}
r = requests.get('https://bbs-api.mihoyo.com/post/wapi/getPostFull?gids=5&post_id=21147956&read=1', headers=headers,
                 timeout=3)
print(r.text)

结果返回的依旧是 403 ,禁止访问。

这种情况有可能是我们缺少某些请求头参数,继续补齐即可。

多次尝试之后,发现 Cookie 中有个参数竟然是 acw_tc,每次刷新的时候会发生变化,是不是这个原因导致的我们无法访问数据呢?

使用下述代码一下:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
    "Origin": 'https://bbs.mihoyo.com/',
    "User-Agent": "https://bbs.mihoyo.com/",
    "Host": "bbs-api.mihoyo.com"

}


s = requests.Session()
params = {
    "gids": 5,
    "post_id": 21147956,
    "read": 1
}
with s.get('https://bbs-api.mihoyo.com/post/wapi/getPostFull', params=params, headers=headers) as r:
    print(r)

还是无法请求到数据,从开发者工具中发现 acw_tc 是一个 httponly 形式的 Cookie。

image.png

但是该格式的参数,只是为了防止 XSS 跨域攻击的,也就是防止 JS 获取 cookie,原则上从 Python 代码中发起是不会有限制的。

难道还有其它参数加密了,但是 PostMan 是可以正常请求的,此时我陷入了迷茫~

但是当我复盘代码的时候,我发现犯了一个错误 🤡🤡🤡🤡,我竟然没有写 referer。

修改代码之后,数据成功的获取到了。

📣📣📣📣📣📣
右下角有个大拇指,点赞的漂亮加倍

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200