http - 使用 auth 访问 http 代理

标签 http authentication go proxy

我需要通过使用 PostForm 方法的身份验证来使用代理。 如果我使用类似(简化)的东西:

request, err := http.NewRequest("GET", url.String(), nil)
response, err := client.Do(request)

我可以轻松地执行 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)

它不起作用,在我看来,它在字符串 resp.Header.Add("Proxy-Authorization", basicAuth) 处失败了。 在此示例中,没有授权的代理工作正常。 有谁知道,在这种情况下我可以使用带有身份验证的代理吗?

最佳答案

您可以使用以下代码创建一次客户端。然后在第三方包中替换您的 HTTP 客户端。

&http.Client{
  Transport: &http.Transport{
    Proxy: http.ProxyURL(&url.URL{
      Scheme: "http",
      User:   url.UserPassword("username", "password"),
      Host:   "146.137.9.45:65233",
    }),
  },
}

或者您也可以解析 URL

url, _ := url.Parse("http://username:password@146.137.9.45:65233")
&http.Client{
  Transport: &http.Transport{
    Proxy: http.ProxyURL(url),
  }
}

关于http - 使用 auth 访问 http 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175487/

相关文章:

java - 关闭在 HttpRequestHandler 的句柄中创建的套接字

java - 调用 HttpURLConnection.getInputStream() 两次以上会发生什么

http - Node.js:node.js 中是否有 `http.get` 方法的同步版本?

json - 从结构中删除字段或将其隐藏在JSON响应中

用于将两个(证书和证书 key )文件作为多部分表单数据发送的 HTTP post 请求的 Java 代码

php - 如何防止不同设备同时登录同一个账号?

php - Facebook 访问 token - 服务器端身份验证

java - validator getPasswordAuthentication 未调用

templates - Golang 模板.ParseFiles "not a directory"错误

go - 从命名管道读取不会提供任何输出,并且会无限期地阻塞代码