在使用golang进行网络请求时,有时需要通过代理来访问目标网站。下面我们介绍如何在golang中设置代理。
- 使用http代理
使用http代理可以在访问http请求时自动使用代理,代码如下:
func main() {
proxyUrl, _ := url.Parse("http://127.0.0.1:8080")
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
},
}
resp, err := client.Get("http://www.baidu.com")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}其中http.ProxyURL(proxyUrl)可以指定代理地址,client.Get()可以发起网络请求。
- 使用http和https代理
如果需要同时访问http和https请求,可以使用如下代码:
func main() {
proxyUrl, _ := url.Parse("http://127.0.0.1:8080")
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}
resp, err := client.Get("https://www.baidu.com")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}其中InsecureSkipVerify参数用于跳过https证书验证。
立即学习“go语言免费学习笔记(深入)”;
- 使用socks5代理
使用socks5代理有很多优势,包括更好的安全性和匿名性。代码如下:
func main() {
dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:1080", nil, proxy.Direct)
if err != nil {
fmt.Println(err)
return
}
httpClient := &http.Client{Transport: &http.Transport{Dial: dialer.Dial}}
resp, err := httpClient.Get("http://www.google.com")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}其中proxy.SOCKS5可以指定socks5代理地址,httpClient.Get()可以发起网络请求。
设置代理也是网络编程中很重要的一部分,学习后可以更好的应对实际情况。










