上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: cxxjackie - 

ajax劫持库ajaxHooker

  [复制链接]

该用户从未签到

0

主题

24

回帖

14

积分

助理工程师

积分
14
发表于 2023-2-7 16:38:08 | 显示全部楼层
908517142 发表于 2023-2-7 09:24
谢谢 终于拿到了,这个引用的脚本真厉害

这个油猴不知道为什么总是出现一些特别的问题,还是太不熟悉了
我在对自己的服务发送小心的时候,无论写什么参数都是收到一个[object Object]
请问大神哥哥知道这是为什么吗
我前端是这么发送的
  1. GM_xmlhttpRequest({
  2.                 url:"http://localhost:8092/api/parseJson/parseContacts",
  3.                 method :"POST",
  4.                 crossDomain: true,
  5.                 async: true,
  6.                 data :  {'res': ''},
  7.                 dataType: 'json',
  8.                 headers: {
  9.                     "contentType": "application/json;utf-8"
  10.                 },
  11.                 onload:function(xhr){
  12.                     console.log('contacts');
  13.                 }
  14.             });
复制代码
回复
订阅

使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-7 20:43:09 | 显示全部楼层
    908517142 发表于 2023-2-7 16:38
    这个油猴不知道为什么总是出现一些特别的问题,还是太不熟悉了
    我在对自己的服务发送小心的时候,无论写 ...
    1. data: JSON.stringify({'res': ''})
    复制代码

    application/json接收的是一个json字符串,而你发送的是一个json对象。另外你GM_xmlhttpRequest的参数写的也不太对,GM_xhr本身就是跨域的,没有crossDomain,默认异步也没有async,dataType是jQuery写法,GM_xhr里叫responseType。建议多看看官方文档:
    https://www.tampermonkey.net/doc ... i:GM_xmlhttpRequest
    也可以试试我写的另一个库:
    https://bbs.tampermonkey.net.cn/thread-2793-1-1.html
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    91

    积分

    初级工程师

    积分
    91

    新人报道

    发表于 2023-2-23 16:52:06 | 显示全部楼层
    1.2.2 版本能给一个完整一点的示例吗
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-23 20:30:22 | 显示全部楼层
    Major 发表于 2023-2-23 16:52
    1.2.2 版本能给一个完整一点的示例吗

    用法没有变化啊,是指filter的示例吗?比如只想捕获所有xhr的get请求和fetch的post请求:
    1. ajaxHooker.filter([
    2.     {type: 'xhr', method: 'get'}.
    3.     {type: 'fetch', method: 'post'}
    4. ]);
    复制代码

    xhr的过滤就相当于把你代码里对url的判断放到这里来了,具体是哪里看不懂呢?
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    91

    积分

    初级工程师

    积分
    91

    新人报道

    发表于 2023-2-24 09:35:43 | 显示全部楼层
    cxxjackie 发表于 2023-2-23 20:30
    用法没有变化啊,是指filter的示例吗?比如只想捕获所有xhr的get请求和fetch的post请求:

    xhr的过滤就相 ...

    我用1.2.0的库写的代码,然后换成1.2.2库然后发现运行不了了。

    然后我用1.2.2的这个库,想hook一个请求,不知道怎么操作了

    1. let a = {

    2.     hook_send_severs:function(){
    3.         let hookurl = /omni\/inventory\/itemInv\/query$/
    4.         ajaxHooker.filter([
    5.             {type: 'xhr', url:hookurl , method: 'GET'},
    6.             {url: hookurl},
    7.             // ajaxHooker.hook(function(request){
    8.             //     console.log("url:",request.url);
    9.             //     console.log("data:",request.data);
    10.             //     console.log("response:",request.response);
    11.             // }),
    12.         ]);

    13.     },
    14. };
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-24 20:34:06 | 显示全部楼层
    Major 发表于 2023-2-24 09:35
    我用1.2.0的库写的代码,然后换成1.2.2库然后发现运行不了了。

    然后我用1.2.2的这个库,想hook一个请求 ...

    不是,你别把hook写进filter里啊,这两个是独立的函数,只是说filter应在hook之前执行:
    1. ajaxHooker.filter(...);
    2. ajaxHooker.hook(...);
    复制代码

    hook的用法跟之前是一样的,加不加filter都能执行,filter是对所有hook生效的过滤器,主要是提升性能用的。
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    91

    积分

    初级工程师

    积分
    91

    新人报道

    发表于 2023-2-27 14:38:25 | 显示全部楼层
    cxxjackie 发表于 2023-2-24 20:34
    不是,你别把hook写进filter里啊,这两个是独立的函数,只是说filter应在hook之前执行:

    hook的用法跟之 ...

    是这样吗,好像没有过滤 例如捕获这个网址的请求数据https://g.cainiao.com/omni/inventory/itemInv/query


    1. let a = {
    2.     hook_send_severs:function(){
    3.         // let hookurl = /omni\/inventory\/itemInv\/query$/

    4.         ajaxHooker.filter(
    5.             {type: 'xhr',   url:'https://g.cainiao.com/omni/inventory/itemInv/query' , method: 'POST'},
    6.             // {type: 'fetch', url:'https://g.cainiao.com/omni/inventory/itemInv/query' , method: 'POST'},
    7.         );

    8.         ajaxHooker.hook(function(request){
    9.             console.log("汉 →   url:",request.url);
    10.             console.log("汉 →   data:",request.data);
    11.             console.log("汉 →   respons:",request.response);
    12.         });

    13.     },
    14. };

    15. (function(){
    16.     if(document.location.href.match(/warehouse-inventory-query-v2/)){
    17.         a.hook_send_severs();
    18.     };
    19. })()
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-27 22:13:21 | 显示全部楼层
    Major 发表于 2023-2-27 14:38
    是这样吗,好像没有过滤 例如捕获这个网址的请求数据https://g.cainiao.com/omni/inventory/itemInv/quer ...

    对象数组,你没加方括号。
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    91

    积分

    初级工程师

    积分
    91

    新人报道

    发表于 2023-2-28 09:43:03 | 显示全部楼层
    cxxjackie 发表于 2023-2-27 22:13
    对象数组,你没加方括号。

    还是不行啊,例如下面的代码 加上filter 之后,一直停留在hook 上转圈圈,一个网址都都hook不到了
    1. let a = {
    2.     hook_send_severs:function(){
    3.         // let hookurl = /omni\/inventory\/itemInv\/query$/

    4.         ajaxHooker.filter([
    5.             {url:'https://g.cainiao.com/omni/inventory/itemInv/query' ,method: 'POST'},
    6.             // {type: 'xhr',   url:'https://g.cainiao.com/omni/inventory/itemInv/query' , method: 'POST'},
    7.             // {type: 'fetch', url:'https://g.cainiao.com/omni/inventory/itemInv/query' , method: 'POST'},
    8.             // {url: /^http/},
    9.         ]);

    10.         ajaxHooker.hook(function(request){
    11.             console.log("汉 →   url:",request.url);
    12.             // console.log("汉 →   data:",request.data);
    13.             // console.log("汉 →   respons:",request.response);
    14.         });

    15.     },
    16. };

    17. (function(){
    18.     if(document.location.href.match(/warehouse-inventory-query-v2/)){
    19.         a.hook_send_severs();
    20.     };
    21. })()
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-28 22:18:16 | 显示全部楼层
    Major 发表于 2023-2-28 09:43
    还是不行啊,例如下面的代码 加上filter 之后,一直停留在hook 上转圈圈,一个网址都都hook不到了
    ...

    不加filter能否hook到?这个过滤是白名单机制,hook不到可能规则有问题,url是否写多了?有些请求url是相对路径,你先不加filter抓一下看看,可能不是http开头的。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表