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

爬虫逆向学习(十一):实战分享反爬机制快速定位与破解

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理

反爬前置信息

站点:aHR0cHM6Ly9jenFqZC5qc3p3ZncuZ292LmNuL2tkY3B1YXBvcnRhbC8jLw==
接口:/kong/InnerGateway/kdcpua/lib/project/publicity

反爬机制定位

在抓取某个站点时,我们需要找到目标接口,然后确定目标接口所使用的反爬机制,常见反爬机制有cookie请求头签名校验等,只有找到它所使用的反爬机制我们才能对点下药。

找到对应的接口,右键复制其cUrl,然后使用爬虫工具库将其转成python requests代码,这样便于我们快速进入调试定位反爬机制
在这里插入图片描述
在这里插入图片描述

可以看到它只存在两个变量,就是cookie请求头,接下来使用控制变量法,结果如下:

  1. 请求传入headers,传入cookie,请求成功
  2. 请求不传入headers,传入cookie,请求失败
  3. 请求传入headers,不传入cookie,请求成功
  4. 请求不传入headers,不传入cookie,请求成功

根据结果确定它的反爬机制只有请求头

大家看下,红色横线对应的那些请求头不会是检测点,而像AcceptAccept-LanguageRefererUser-Agent都是可以写死的,大家可能会说User-Agent也是反爬机制,User-Agent确实可以反爬,不过它的反爬机制对应的是采集频率,我们现在是请求请求前的反爬
在这里插入图片描述

剔除这些后,剩下的AuthorizationTokenx-date就很明显是动态生成且容易作为检测点了,这里Token不需要关注,我们测试一下Authorizationx-date,结果如下:

  1. 保留Authorization,保留Token,请求成功
  2. 保留Authorization,不保留Token,请求失败
  3. 不保留Authorization,保留Token,请求失败
  4. 不保留Authorization,不保留Token,请求失败

结果两次测试结果可以确定AuthorizationToken是检测点且两者之间存在关系。通过这种方法我们最终确定了接口的反爬机制,接下来就是如何破解它了。

逆向研究

这个站点没有特别的混淆,全局搜索x-date直接锁定关键代码位置,它是一个原生的hmac-sha256加密,加密文本就是x-datex-date是UTC时间字符串
在这里插入图片描述

算法破解

import base64
import hashlib
import hmac
from datetime import datetimeimport requestsdef get_hmac_authorization():hit_time = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')key = '1S7JzAkstxUV1g51IB22otDrwRkFxRJ3'.encode()message = 'x-date: {}'.format(hit_time).encode()hmac_sha256 = hmac.new(key, message, digestmod=hashlib.sha256)hmac_digest = hmac_sha256.digest()encrypt_result = base64.b64encode(hmac_digest).decode()return {'Authorization': 'hmac username="kdcpua", algorithm="hmac-sha256", headers="x-date", signature="{}"'.format(encrypt_result),'x-date': hit_time,}headers = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9","Origin": "Origin","Referer": "Referer","Token": "undefined undefined","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",
}
headers.update(get_hmac_authorization())
url = "url "
response = requests.post(url, headers=headers)print(response.text)

http://www.mrgr.cn/news/51138.html

相关文章:

  • 【深度学习|地学应用】遥感与深度学习:揭示梦柯冰川奥秘的前沿应用与实践解析(二)
  • 【相位失配】阻抗管双传递函数法测量吸声系数:交换双传声器的位置
  • 自动驾驶系列—加速自动驾驶系统开发:多型号SoC快速适配的最佳实践
  • 世界粮食日
  • python基于大数据的电影市场预测分析
  • Python语法进阶:从基础到熟练的飞跃
  • 5 -《本地部署开源大模型》在Ubuntu 22.04系统下ChatGLM3-6B高效微调实战
  • MySQL学习(六):视图和存储过程以及函数
  • docker 数据管理,数据持久化详解 一
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector(无习题)
  • Python实时视频流+网络摄像头+视频检测流程播放
  • 2010年国赛高教杯数学建模A题储油罐的变位识别与罐容表标定解题全过程文档及程序
  • 5种边界填充
  • Python 工具库每日推荐 【Sphinx】
  • 前端路由原理
  • ai抠图怎么抠出来?5招小白秒懂的抠图方法,请收藏
  • 更新yarn之后整个项目运行不起来
  • 互助学习小程序的设计与实现springboot+论文源码调试讲解
  • 【C++刷题】力扣-#121-买卖股票的最佳时机
  • 字体test