Как открыть URL в браузере с заголовком аутентификации? - PullRequest
0 голосов
/ 08 октября 2019

В Golang мы можем запустить окно браузера, чтобы открыть URL, используя метод exec.Command. Пример можно найти здесь

Мой вопрос: как мы можем открыть этот URL с заголовком?

1 Ответ

0 голосов
/ 08 октября 2019

Если вы используете Chrome, вы можете использовать Chrome DevTools Protocol , чтобы присоединиться к работающему экземпляру Chrome и выполнить команду для перехода к URL с определенными заголовками.

Во-первых,Запустите Chrome с включенным протоколом Chrome Devtools, используя флаг --remote-debugging-port=9222

. Вы получите ответ, аналогичный 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 является портом по умолчанию для этого протокола, но вы можете использовать любой порт, который хотите.
  • Я не сделалt включает код exec.Command для краткости.

Ссылки:

ОБНОВЛЕНИЕ

Найден более простой способ . Вы можете просто запустить Chrome прямо из chromedp, переопределив параметр по умолчанию без головы :

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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...