gpt4 book ai didi

google-chrome - 如何拦截网络流量并使用 chromedp(或替代方案)获得响应?

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:03 133 4
gpt4 key购买 nike

我的目标是从无法直接检索的目标服务器获得特定的响应,而是通过使用网络驱动程序等技术在加载后触发由网页中固有的 javascript 代码发起的请求。该请求包含一些用于服务器端验证的代码,目前我无法解码生成算法。

Chrome 中的“开发人员工具”提供了一种检查请求和响应的便捷方式,我需要使用功能强大的库(例如 chromedp)来自动执行该过程。 .

据我所知,network 包提供了一个GetResponseBody 函数,但需要一个requestID 参数。如何获取具体的request id?

cdp.ActionFunc(func(ctxt context.Context, h cdptypes.Handler) error {
rptn := &network.RequestPattern{
ResourceType: page.ResourceTypeScript,
}
network.SetRequestInterception([]*network.RequestPattern{rptn}).Do(ctxt, h)

//begin interception
network.ContinueInterceptedRequest("AlphaInterceptor").Do(ctxt, h)

//How to identify the requestID?
network.GetResponseBody("???")

...
}

最佳答案

看来当时 chromedp 库还不完整。我已经实现了事件监听机制并提交了一个 pull request .有需要的可以通过监听网络事件获取具体服务器资源,分别获取RequestID和response body:

cdp.Tasks{
cdp.ActionFunc(func(ctxt context.Context, h cdptypes.Handler) error {
go func() {
echan := h.Listen(cdptypes.EventNetworkRequestWillBeSent, cdptypes.EventNetworkLoadingFinished)
for d := range echan {
switch d.(type) {
case *network.EventRequestWillBeSent:
req := d.(*network.EventRequestWillBeSent)
if strings.HasSuffix(req.Request.URL, "/data_I_want.js") {
reqId1 = req.RequestID
} else if strings.HasSuffix(req.Request.URL, "/another_one.js") {
reqId2 = req.RequestID
}
case *network.EventLoadingFinished:
res := d.(*network.EventLoadingFinished)
var data []byte
var e error
if reqId1 == res.RequestID {
data, e = network.GetResponseBody(reqId1).Do(ctxt, h)
} else if reqId2 == res.RequestID {
data, e = network.GetResponseBody(reqId2).Do(ctxt, h)
}
if e != nil {
panic(e)
}
if len(data) > 0 {
fmt.Printf("=========data: %+v\n", string(data))
}
}
}
}()
return nil
}),
cdp.Navigate(url),
...
}

关于google-chrome - 如何拦截网络流量并使用 chromedp(或替代方案)获得响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47052718/

133 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com