gues1688 发表于 2024-10-17 21:28:33

怎么劫持网站请求数据的参数?

本帖最后由 gues1688 于 2024-10-17 21:31 编辑

> 本帖最后由 gues1688 于 2024-10-17 21:29 编辑

打开下面这个网址:

https://fund.eastmoney.com/ztjj/default.html#!zdf/SYL_1N/curr/BK000278-国资云/fst/DESC

会通过ajax向下面这个url请求数据:

https://api.fund.eastmoney.com/ZTJJ/GetBKRelTopicFundNew?callback=jQuery18303897346401549022_1729137195250&sort=undefined&sorttype=DESC&pageindex=1&pagesize=10&tp=BK000278&isbuy=1&_=1729137195380

里面的参数 pagesize=10,想改成 pagesize=30。

我的调试过程是,在chorme浏览器中,按F12进入开发者工具:

1、在【网络】调试中,过滤 GetBKRelTopicFundNew,找到这个网络请求

2、在【请求调用堆栈】中,点击函数 ajax,跳到 ajax 的源代码处

3、在函数 ajax 源代码处,设置条件断点,条件为 c.url.includes('GetBKRelTopicFundNew')

4、按 F5 刷新网页,javaScript 中断于函数 ajax 位置

5、在控制台修改参数:c.url = c.url.replace(/pagesize=10/,'pagesize=300')
6、按 F8 继续运行,完成任务


请教大佬,应该如何劫持,实现上述目标,谢谢大佬!

李恒道 发表于 2024-10-17 21:28:34

gues1688 发表于 2024-10-17 22:05
感谢大佬回复,对劫持还没怎么入门,我学习一下相关知识,如有不懂再来请教! ...

查询https://developer.mozilla.org/zh-CN/docs/Web/API/Node
可以得出原型链在Node.prototype.insertBefore
可以得出劫持代码
```js
// ==UserScript==
// @name         New Userscript
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      https://fund.eastmoney.com/*
// @run-at       document-start
// ==/UserScript==
const origin=Node.prototype.insertBefore
Node.prototype.insertBefore=function(...args){
    debugger;
    console.log(args.src)
    return origin.call(this,...args)
}
```
最核心的替代部分我没写
就留给哥哥当课后作业了

李恒道 发表于 2024-10-17 21:53:59

他这个没有使用XHR通信
send的源码是
```js
                send: function(s, o) {
                  n = i.createElement("script"),
                  n.async = "async",
                  e.scriptCharset && (n.charset = e.scriptCharset),
                  n.src = e.url,
                  n.onload = n.onreadystatechange = function(e, i) {
                        if (i || !n.readyState || /loaded|complete/.test(n.readyState)) {
                            n.onload = n.onreadystatechange = null,
                            r && n.parentNode && r.removeChild(n),
                            n = t,
                            i || o(200, "success")
                        }
                  }
                  ,
                  r.insertBefore(n, r.firstChild)
               
```
可以看出是通过createElement创建标签然后通过insertBefore插入
我们可以得出针对DOM的insertBefore函数进行劫持可以修改设置的src参数

gues1688 发表于 2024-10-17 22:05:19

李恒道 发表于 2024-10-17 21:53
他这个没有使用XHR通信
send的源码是
```js


感谢大佬回复,对劫持还没怎么入门,我学习一下相关知识,如有不懂再来请教!

gues1688 发表于 2024-10-17 22:43:35

李恒道 发表于 2024-10-17 22:20
查询https://developer.mozilla.org/zh-CN/docs/Web/API/Node
可以得出原型链在Node.prototype.inser ...

太感谢大佬了!正不知所措。。。看到大佬的再次回复,看到了一丝曙光
我学习一下,看看能否入门!
再次感谢!

gues1688 发表于 2024-10-17 23:17:32

李恒道 发表于 2024-10-17 22:20
查询https://developer.mozilla.org/zh-CN/docs/Web/API/Node
可以得出原型链在Node.prototype.inser ...

解决了!感谢大佬!
最终代码如下,js入门不久,不太会写,很菜:
```
      const origin=Node.prototype.insertBefore
      Node.prototype.insertBefore=function(...args){
            // debugger;
            if (args.src !== undefined){
                if (args.src.includes('GetBKRelTopicFundNew')){
                  args.src = args.src.replace(/pagesize=10/,'pagesize=300')
                }
            }
            // console.log(args.src)
            return origin.call(this,...args)
      }

```
顺便问一下,问题解决了,要怎么结束悬赏,没看懂

李恒道 发表于 2024-10-17 23:41:07

gues1688 发表于 2024-10-17 23:17
解决了!感谢大佬!
最终代码如下,js入门不久,不太会写,很菜:
```


棒棒
油猴可以多查看https://learn.scriptcat.org/来学习技巧和开发方法

希望哥哥没事多来论坛玩哦

gues1688 发表于 2024-10-30 15:45:26

李恒道 发表于 2024-10-17 23:41
棒棒
油猴可以多查看https://learn.scriptcat.org/来学习技巧和开发方法



谢谢大佬!
我会常来学习和请教的!
页: [1]
查看完整版本: 怎么劫持网站请求数据的参数?