代理golang HTTPS

问题描述:

我试图让使用与认证代理https://www.google.com一送,我已经传球头球参数代理golang HTTPS

代理授权

但代理服务器返回

需要代理验证

code:

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 ..代理验证成功。为什么?

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

要解决此问题,字段ProxyConnectHeader被添加到struct Transport。但是这个改变直到发布,这个改变只在主人看来。

来测试这个新领域使用从大师golang,我在github项目和工作。

link to golang path

link to project in github that test this new field