首页 > 解决方案 > 如何使用 https 和 socks4 代理

问题描述

我在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)
}

标签: goproxy

解决方案


以下代码在我的最后工作正常

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)
}

我希望它对你有同样的帮助


推荐阅读