go-rod / rod

A Chrome DevTools Protocol driver for web automation and scraping.
https://go-rod.github.io
MIT License
5.25k stars 345 forks source link

Proxy and Hijack #1063

Closed Qedr1 closed 4 months ago

Qedr1 commented 4 months ago

Rod Version: v0.116.0

If I enable Hijack, proxy setting not working, but Hijack working. If I disable HiJack - proxy working well and Hijack working too In both case I see proxy setting for ps ax

Can u help me? Thx

My Launcher

u := launcher.New().
        Set("enable-features", "ConversionMeasurement,AttributionReportingCrossAppWeb").
        Set("enable-chrome-browser-cloud-management", "").
        Proxy("socks5://127.0.0.1:8888").
        Delete("enable-gpu-rasterization").
        Delete("headless").
                Bin(path)

My Hijack

func pageDisableCache(page *rod.Page) {
    router := page.HijackRequests()
    err := router.Add("", "", func(ctx *rod.Hijack) {
        error := ctx.LoadResponse(http.DefaultClient, true)
        if error != nil {
            log.Println("Hijack LoadResponse err:", error)
            return
        }
        ctx.Response.SetHeader("Cache-Control", "no-cache, no-store, must-revalidate")
        ctx.Response.SetHeader("Pragma", "no-cache")
        ctx.Response.SetHeader("Expires", "0")
    })
    if err != nil {
        log.Println("Hijack response headers err:", err)
        return
    }
    go router.Run()
}
github-actions[bot] commented 4 months ago

Please fix the format of your markdown:

9 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```go"]
20 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```go"]

generated by check-issue

Qedr1 commented 4 months ago

Problem solved For this case we need to set htt.Transport

func pageDisableCache(page *rod.Page) {
    router := page.HijackRequests()
    err := router.Add("", "", func(ctx *rod.Hijack) {
        ul, _ := url.Parse("socks5://127.0.0.1:8888")
        proxy := http.ProxyURL(ul)
        transport := &http.Transport{Proxy: proxy}
        error := ctx.LoadResponse(&http.Client{Transport: transport}, true)
        if error != nil {
            log.Println("Hijack LoadResponse err:", error)
            return
        }
        ctx.Response.SetHeader("Cache-Control", "no-cache, no-store, must-revalidate")
        ctx.Response.SetHeader("Pragma", "no-cache")
        ctx.Response.SetHeader("Expires", "0")
    })
    if err != nil {
        log.Println("Hijack response headers err:", err)
        return
    }
    go router.Run()
}
Qedr1 commented 4 months ago

Thx