目录

第一种方法: 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),// },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,body)
	}
}