精选博客反爬过程中 x-ca-noncex-ca-signature 参数的解密过程
Posted 梦想橡皮擦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精选博客反爬过程中 x-ca-noncex-ca-signature 参数的解密过程相关的知识,希望对你有一定的参考价值。
本篇博客在 请求头 x-ca-key、x-ca-nonce、x-ca-signature 加密分析第一篇 的基础上继续编写,大家学习时可以从上一篇入手。
文章目录
在上一篇博客我们已经捕获了参数的JS代码,这篇博客重点要将其在 Python 中进行复现,即使用 Python 重新编写参数逻辑。
x-ca-nonce 代码实现
在请求参数分析的时候,我们得到的代码块如下所示,其中重点的是 p
函数。
e.headers["X-Ca-Nonce"] = p()
查看 p()
函数,可以看到其实际内容是 uuid 生成,在 Python 中对其进行复现。
p = function(e)
var t = e || null;
return null == t && (t = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e)
var t = 16 * Math.random() | 0;
return ("x" === e ? t : 3 & t | 8).toString(16)
))),
python 实现 uuid
在 Python 中可以使用 uuid
模块生成 UUID。
下面是一个生成 UUID 的代码示例:
def get_x_ca_nonce():
random_uuid = uuid.uuid4()
return random_uuid
这段代码比较简单,直接用内置的 uuid 模块即可。
x-ca-signature代码实现
该参数在跟进代码逻辑时,发现重点代码如下所示。
其中用到了 HmacSHA256
加密和 Base64 加密,传递进去的参数如上图所示。
接下来就可以在 Python 中重现这段逻辑了,其中 secret key
是一个固定值, message
先使用上述图片中的值即可。
import hmac
import hashlib
def hmac_sha256(message, secret):
return hmac.new(secret.encode(), message.encode(), hashlib.sha256).hexdigest()
message = "GET\\napplication/json, text/plain, */*\\n\\n\\n\\nx-ca-key:203899271\\nx-ca-nonce:bacf321a-36cb-47e6-8094-c32029747953\\n/community-cloud/v1/new/home/recent?pageNum=6&type=4"
secret = "bK9jk5dBEtjauy6gXL7vZCPJ1fOy076H"
print(hmac_sha256(message, secret))
在这个代码中, message
和 secret
分别代表要加密的信息和密钥。算法使用 hmac.new()
函数,通过编码后的 secret
和 message
以及 hashlib.sha256
来生成 HMAC 值。最后使用 hexdigest()
方法将 HMAC 值转换为十六进制字符串。
在原文JS中最后转换的是 Base64 格式数据,所以进行最后一步转换。
import uuid
import hmac
import hashlib
import base64
def hmac_sha256(message, secret):
hmac_sha256 = hmac.new(secret.encode(), message.encode(), hashlib.sha256)
return base64.b64encode(hmac_sha256.digest()).decode()
if __name__ == '__main__':
# ger_html()
message = "GET\\napplication/json, text/plain, */*\\n\\n\\n\\nx-ca-key:203899271\\nx-ca-nonce:bacf321a-36cb-47e6-8094-c32029747953\\n/community-cloud/v1/new/home/recent?pageNum=6&type=4"
secret = "bK9jk5dBEtjauy6gXL7vZCPJ1fOy076H"
print(hmac_sha256(message, secret))
运行程序,得到Python 的计算结果。
在回到网页端查看原JS的计算结果。
二者一致,表示该加密参数已经被我们翻译掉。
在把参数的拼接实现一下。
def get_params(pageNum, type,nonce):
message = f"GET\\napplication/json, text/plain, */*\\n\\n\\n\\nx-ca-key:203899271\\nx-ca-nonce:nonce\\n/community-cloud/v1/new/home/recent?pageNum=pageNum&type=type"
return message
完成所有配置之后,再次请求得到 200 状态码,完成任务。
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 852 篇原创博客
全网 6000+人正在学习的 爬虫专栏 👇👇👇👇
以上是关于精选博客反爬过程中 x-ca-noncex-ca-signature 参数的解密过程的主要内容,如果未能解决你的问题,请参考以下文章
14. UserAgent 反爬是如何实现的,来看看这篇博客 &
14. UserAgent 反爬是如何实现的,来看看这篇博客 &