爬虫JS逆向思路-hook钩子

文章介绍了Python爬虫中的hook技术,包括requests的pre_request和response钩子,以及如何使用hook处理异常。同时,文章提供了JS逆向的一些常见钩子写法,如JSON.parse和JSON.stringify的hook,用于处理加密数据。此外,还展示了寻找header、URL参数和cookie参数的hook示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 网络上几千块都学不到的JS逆向思路这里全都有👏🏻👏🏻👏🏻

本系列持续更新中,三连关注不迷路👌🏻  

干货满满不看后悔👍👍👍

🕧注意本文爬虫逆向仅供学习交流使用

📝个人主页→数据挖掘博主ZTLJQ的主页

53ee43dc8e344ae0b6dd6c7123b7babd.gif

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python


hook技术介绍

Python爬虫中的hook技术是指在爬取网页时通过钩子函数对请求进行修改或者拦截,从而达到定制化需求的目的。这种技术在爬虫开发中非常重要,它可以让我们更加灵活地控制爬取过程。

Python爬虫中的hook技术主要包括以下几种:

1.requests的hook

requesthook是在发送请求前对请求进行修改的操作。它通常用于添加请求头、设置代理等操作。例如,我们可以使用requesthook实现对每个请求都添加一个User-Agent头部:

import requests

def add_user_agent(request):
    headers = request.headers
    headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    return request

requests.get('http://www.baidu.com', hooks={'pre_request': add_user_agent})

2.response的hook

responsehook是在接收到响应后对响应进行处理的操作。它通常用于解析网页数据、保存数据等操作。例如,我们可以使用responsehook实现对每个响应都打印出网页内容:

import requests

def print_response(response):
    print(response.text)

requests.get('http://www.baidu.com', hooks={'response': print_response})

3.exception的hook

exceptionhook是在爬虫发生异常时对异常进行处理的操作。它通常用于重试操作、记录日志等操作。例如,我们可以使用exceptionhook实现对每个异常都进行重试:

import requests

def retry(exception):
    if isinstance(exception, (requests.ConnectionError, requests.Timeout)):
        return True
    return False

requests.get('http://www.baidu.com', hooks={'response': retry})

hook技术可以很好的帮助大家在爬虫中找到一些参数和数据


hook常用钩子写法--改一点参数可以直接使用

1、当我们遇到 JSON.parse这种加密数据可以直接使用下面的钩子

(function(){
    var parse = JSON.parse;
    JSON.parse = function(params) {
    console.log("Hook -->",params);
    debugger;
    return parse(params);
}
}
 )();

2、当我们遇到 JSON.stringify() 这种方法就可以用到下面这个钩子

(function(){
    var stringify = JSON.stringify;
    JSON.stringify = function(params) {
    console.log("Hook -->",params);
    debugger;
    return stringify(params);
}
}
 )();

3、当我们需要找header的时候,就可以用下面这个代码

var code = function(){
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){
    if(key=='Authorization'){
        debugger;
    }
    return org.apply(this,arguments);
}
}

4、当我们需要找url的参数的时候就用下面这个钩子

var code = function(){
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function(method,url,async){
    if(url.indexOf("/改参数api")>-1){
        debugger;
    }
    return open.apply(this,arguments);
};
}

5、当我们找cookie参数的时候,可以这样注入钩子

(function (){
    'use strict';
    var cookieTemp = '';
    Object.defineProperty(document,'cookie',{
    set: function(val){
        if(val,indexOf('要找的参数') != -1){
        debugger;
    }
    console.log('Hook抓取到的cookie->',val);
    cookieTemp = val;
    return val;
},
    get: function(){
    return cookieTemp;
},
});
})();

最后希望以上内容能够帮助到大家谢谢!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZTLJQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值