【问题标题】:Proxy golang https代理 golang https
【发布时间】:2016-11-18 12:11:05
【问题描述】:

我正在尝试使用带有身份验证的代理进入https://www.google.com,我已经传递了标头参数

代理授权

但是代理服务器返回

需要代理验证

代码:

package main

import (
    "crypto/tls"
    "encoding/base64"
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "os"
)

func main() {
    req, _ := http.NewRequest("GET", "https://www.google.com.br", nil)
    req.Header.Set("Host", "www.google.com.br")

    proxyURL := url.URL{
        Host: "IP-HERE:PORT-HEERE"}

    transport := &http.Transport{
        Proxy:           http.ProxyURL(&proxyURL),
        TLSClientConfig: &tls.Config{},
    }
    client := &http.Client{Transport: transport}
    req.RequestURI = ""

    auth := fmt.Sprintf("USER:PASSWORD")
    basic := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
    req.Header.Add("Proxy-Authorization", basic)

    resp, err := client.Do(req)
    if err != nil {
        fmt.Printf("erro: %s", err)
    }
    fmt.Printf("code: %s", resp.StatusCode)
    htmlData, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    fmt.Println(os.Stdout, string(htmlData))
}

我必须传递另一个参数?

当我在http://www.google.com.br 中执行一次获取时,没有 https .. 代理身份验证成功。为什么?

【问题讨论】:

标签: authentication go proxy


【解决方案1】:

我找到了解决方案。 Golang 在 CONNECT 方法中不传递 header 参数,则参数 Proxy-Authorization 不会发送到代理服务器。

为解决此问题,已将字段 ProxyConnectHeader 添加到结构 Transport。但此更改直到发布,此更改仅在 master 中。

为了使用 master 的 golang 测试这个新领域,我在 github 上创建了一个项目并开始工作。

link to golang path

link to project in github that test this new field

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 2021-06-12
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多