gpt4 book ai didi

go - 如何在带有身份验证 header 的浏览器中打开 URL?

转载 作者:行者123 更新时间:2023-12-01 22:28:30 28 4
gpt4 key购买 nike

在 Golang 中,我们可以使用 exec.Command 启动浏览器窗口来打开 URL。方法。可以找到一个示例 here

我的问题是我们如何打开带有标题的 URL?

最佳答案

如果您使用的是 Chrome,您可以使用 Chrome DevTools Protocol附加到正在运行的 Chrome 实例并发出命令以导航到具有特定 header 的 URL。

首先,使用标志 --remote-debugging-port=9222 启用 Chrome Devtools 协议(protocol)来启动 Chrome

您将收到类似于 DevTools listening on ws://127.0.0.1:9222/devtools/browser/2393d6e8-a85d-40a2-a79e-13f1585ff336 的响应

通过 ws://... URL 进入下面的程序:

package main

import (
"context"
"flag"
"log"

"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
)

func main() {
var devToolWsURL string
flag.StringVar(&devToolWsURL, "devtools-ws-url", "", "DevTools Websocket URL")
flag.Parse()

// Create contexts.
actxt, cancelActxt := chromedp.NewRemoteAllocator(context.Background(), devToolWsURL)
defer cancelActxt()

// Create new tab.
ctxt, _ := chromedp.NewContext(actxt)

// Custom header.
headers := map[string]interface{}{
"X-Header": "my request header",
}

task := chromedp.Tasks{
network.Enable(),
network.SetExtraHTTPHeaders(network.Headers(headers)),
chromedp.Navigate("http://google.com"),
}

// Run task.
err := chromedp.Run(ctxt, task)
if err != nil {
log.Fatal(err)
}
}

备注:
  • 9222 是此协议(protocol)的默认端口,但您可以使用任何端口
    你要。
  • 我没有包括 exec.Command代码简洁。

  • 引用文献:
  • Header example
  • Remote Chrome control example

  • 更新

    Found a simpler way .您可以直接从 chromedp 启动 Chrome通过覆盖默认的 headless 选项:
    func main() {
    // Create contexts.
    opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false))
    actx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
    ctx, cancel := chromedp.NewContext(actx)

    // Call cancel() to close Chrome on some condition.
    if false {
    cancel()
    }

    // Custom header.
    headers := map[string]interface{}{
    "X-Header": "my request header",
    }

    task := chromedp.Tasks{
    network.Enable(),
    network.SetExtraHTTPHeaders(network.Headers(headers)),
    chromedp.Navigate("http://tested.com"),
    }

    // Run task.
    err := chromedp.Run(ctx, task)
    if err != nil {
    log.Fatal(err)
    }
    }

    关于go - 如何在带有身份验证 header 的浏览器中打开 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58286846/

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