【问题标题】:How to use https and socks4 proxies如何使用 https 和 socks4 代理
【发布时间】:2020-12-16 05:46:33
【问题描述】:

我在 golang 中找不到这样做的方法,所以我在问。

我有各种代理(http://~、https://~ 等)

将接受 http://ip:port 和 socks5://ip:port 的请求,但不接受 https://ip:port 和 sock4://ip:port 的请求。

我该怎么办?

是将其分配给环境变量的唯一方法吗?

package main

import (
    "fmt"
    "net/http"
    "net/url"
)

func main(){
    req, _ := http.NewRequest("GET", site URL, nil)
    req.Close = true

    var proxy string = "proxy"
    a, _ := url.Parse(proxy)
    i := &http.Transport{
        Proxy: http.ProxyURL(a),
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{
        Transport: i,
    }
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    doc, _ := goquery.NewDocumentFromReader(resp.Body)
    fmt.Println(doc)
}

【问题讨论】:

  • 您是否收到“错误请求”错误?
  • 是的。 client.Do 返回“Bad request”错误?

标签: go proxy


【解决方案1】:

以下代码在我的末尾可以正常工作

package main

import (
    "fmt"
    "net/http"
    "net/url"
)

func main(){
    req, _ := http.NewRequest("GET", site URL, nil)
    req.Close = true

    var proxy string = "proxy"
    a, _ := url.Parse(proxy)
    i := &http.Transport{
    Proxy: http.ProxyURL(a),
    //Proxy: http.ProxyFromEnvironment,
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    TLSNextProto:    make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),

    }

    client := &http.Client{}
    client.Transport = i
    resp, err := client.Do(req)

if err != nil {
    log.Fatalln(err)
    return
}
defer resp.Body.Close()

    doc, _ := goquery.NewDocumentFromReader(resp.Body)
    fmt.Println(doc)
}

希望对你有帮助

【讨论】:

  • 谢谢 我已经在其他问题的答案中看到了这一点,但是 sock4 也会这样吗?禁用https?我以为是一回事。 sock4 的请求尚未通过。
猜你喜欢
  • 2023-04-05
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 2020-04-10
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
相关资源
最近更新 更多