golang 使用 http socks5 代理

目錄

第一種方法: HTTP(S) 代理

第二種方法: Socket5 代理

第一種方法: HTTP(S) 代理

代碼實現如下:

package main
 
import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
)
 
func main() {
	urli := url.URL{}
	urlproxy, _ := urli.Parse("https://127.0.0.1:9743")
	c := http.Client{
		Transport: &http.Transport{
			Proxy: http.ProxyURL(urlproxy),
		},
	}
	if resp, err := c.Get("https://www.google.com"); err != nil {
		log.Fatalln(err)
	} else {
		defer resp.Body.Close()
		body, _ := ioutil.ReadAll(resp.Body)
		fmt.Printf("%s\n", body)
	}
}

上面這種方法是通過在建立 http.Client 對象時指定代理地址,其實除了這麼一種方式外,還有一種就是通過環境變量來指定代理。代碼如下

package main
 
import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
)
 
func main() {
	// urli := url.URL{}
	// urlproxy, _ := urli.Parse("https://127.0.0.1:9743")
	os.Setenv("HTTP_PROXY", "http://127.0.0.1:9743")
	os.Setenv("HTTPS_PROXY", "https://127.0.0.1:9743")
	c := http.Client{
	// Transport: &http.Transport{
	// 	Proxy: http.ProxyURL(urlproxy),
	// },
	}
	if resp, err := c.Get("https://www.google.com"); err != nil {
		log.Fatalln(err)
	} else {
		defer resp.Body.Close()
		body, _ := ioutil.ReadAll(resp.Body)
		fmt.Printf("%s\n", body)
	}
}

這個方法是通過設置環境變量,go 會自動配置代理。

第二種方法: Socket5 代理

package main
 
import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
 
	"golang.org/x/net/proxy"
)
 
func main() {
	// create a socks5 dialer
	dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:9742", nil, proxy.Direct)
	if err != nil {
		fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)
		os.Exit(1)
	}
	// setup a http client
	httpTransport := &http.Transport{}
	httpClient := &http.Client{Transport: httpTransport}
	// set our socks5 as the dialer
	httpTransport.Dial = dialer.Dial
	if resp, err := httpClient.Get("https://www.google.com"); err != nil {
		log.Fatalln(err)
	} else {
		defer resp.Body.Close()
		body, _ := ioutil.ReadAll(resp.Body)
		fmt.Printf("%s\n", body)
	}
}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://blog.csdn.net/whatday/article/details/109748074