目录
第一种方法: 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)
}
}