Оле*_*ров 3 authentication proxy http go
我需要使用 PostForm 方法使用带有身份验证的代理。如果我使用类似(简化)的东西:
request, err := http.NewRequest("GET", url.String(), nil)
response, err := client.Do(request)
Run Code Online (Sandbox Code Playgroud)
我可以轻松做到request.Header.Add("Proxy-Authorization", basicAuth),而且效果很好。但是现在,我正在编辑第三方包,并尝试将代理添加到现有代码中:
proxyStr := "http://proxy.com:8080"
proxyURL, _ := url.Parse(proxyStr)
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
bot.Client = &http.Client{
Transport: transport,
}
resp, err := bot.Client.PostForm(method, params)
auth := "username:password"
basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
resp.Header.Add("Proxy-Authorization", basicAuth)
Run Code Online (Sandbox Code Playgroud)
它不起作用,在我看来,它在 string 处失败resp.Header.Add("Proxy-Authorization", basicAuth)。在这个例子中,没有身份验证的代理工作正常。有谁知道,在这种情况下我可以使用带有身份验证的代理吗?
您正在尝试向响应添加标头,该标头不是您发送到服务器的内容,而是您收到的内容。您必须向请求添加标头和数据,您必须首先组装它们,然后像这样执行它:
data := url.Values{} // the form data
data.Add("foo-key", "some data")
req, err := http.NewRequest("POST","https://yoururl", strings.NewReader(data.Encode()))
auth := "username:password"
basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
req.Header.Add("Proxy-Authorization", basicAuth)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := bot.Client.Do(req)
Run Code Online (Sandbox Code Playgroud)
然后你只需使用响应 ( resp)
您可以使用以下代码创建一次客户端。然后在第三方包中替换您的 HTTP 客户端。
&http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(&url.URL{
Scheme: "http",
User: url.UserPassword("username", "password"),
Host: "146.137.9.45:65233",
})
}
}
Run Code Online (Sandbox Code Playgroud)
或者你也可以解析 URL
url, _ := url.Parse("http://username:password@146.137.9.45:65233")
&http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(url),
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5387 次 |
| 最近记录: |