python爬虫-获取headers(报文头)关键参数实例小记
注意!!!!某XX网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!
第一步:请求页面,得到响应。建议首次请求时headers内容都带着,调试的时候根据情况将headers中的参数进行注释,来确定是否为headers的参数或者formdata 参数影响 响应结果。
响应结果:
5分钟后相同参数再次请求
通过排查headers中的 X-Apikey参数为关键参数。
第二步:全网站搜索X-Apikey 参数。但是该参数在js 文件里只有一个,且是个常量,这时候可以看到有个r.Z.getApiKey(),通过对getApiKey 查找可以看到一些关键信息
getApiKey 相关信息,通过查看确定是生产X-ApiKey的关键信息
第三步:打断点(debug),注意由于是找headers的参数,因此断点打完后要去掉cookie重新请求。并且将断点打在 X-ApiKey 的附近会出现断点不起作用,这时候可以考虑在在getApiKey的附近或者该js 文件中搜索headers: 。注意!!!需要耐心等待。加载时间有点长。
第四步:执行encryptApiKey() 函数
第五步:执行encryptTime()函数
第六步:执行comb()函数
注意这块比较坑,comb函数传参时 是e,t。 但是在接收参数显示是t, e。 不要被迷惑了。就按照函数comb(e,t) 这种方式
这里可以看到 最后返回一个 window.btoa(),这里的btoa() 是base64
最后代码展示:
# -*- coding:utf-8 -*- # @Time : 2023/7/13 18:00 # @Author: 水兵没月 import base64 import random import time import requests # LWIzMWUtNDU0Ny05Mjk5LWI2ZDA3Yjc2MzFhYmEyYzkwM2NjfDI3OTk4MzYwOTkxOTU2Mzg= # -b31e-4547-9299-b6d07b7631aba2c903cc|2799836099195638 # -b31e-4547-9299-b6d07b7631ab a2c903cc API_KRY = a2c903cc-b31e-4547-9299-b6d07b7631ab # encryptApiKey===e API_KRY_0 = API_KRY[8:]+API_KRY[:8] # encryptTime===t t = int(time.time()*1000) t_0 = str(1*t+1111111111111) n = random.randint(0, 9) r = random.randint(0, 9) o = random.randint(0, 9) e = t_0+str(n)+str(r)+str(o) # comb comb_n = API_KRY_0+"|"+e x_api = base64.b64encode(comb_n.encode(utf-8)).decode(utf-8) print(x_api) headers = { User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36, X-Apikey:x_api, } s = requests.session() url = https://XXXXXXXXXXXXX # 请求链接 res = s.get(url=url, headers=headers) res.encoding=utf-8 print(res.text)