2016-11-18 69 views
1

我試圖讓使用與認證代理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 ..代理驗證成功。爲什麼?

回答

1

我找到了解決方案。 Golang不在方法CONNECT中傳遞頭部參數,那麼參數Proxy-Authorization不會發送到代理服務器。

要解決此問題,字段ProxyConnectHeader被添加到struct Transport。但是這個改變直到發佈,這個改變只在主人看來。

來測試這個新領域使用從大師golang,我在github項目和工作。

link to golang path

link to project in github that test this new field