直接上实例
命令测试
curl --proxy 10.0.55.22:8080 -v "http://www.baidu.com/"
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"net"
"time"
)
func main() {
proxyAddr := "http://10.0.55.22:8080/"
url := "http://www.baidu.com/"
cli := NewHttpClient(proxyAddr)
data,_ := HttpGET(cli, url)
fmt.Println(string(data))
}
func NewHttpClient(proxyAddr string) *http.Client {
proxy, err := url.Parse(proxyAddr)
if err != nil {
return nil
}
netTransport := &http.Transport{
Proxy: http.ProxyURL(proxy),
Dial: func(netw, addr string) (net.Conn, error) {
c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(10))
if err != nil {
return nil, err
}
return c, nil
},
MaxIdleConnsPerHost: 10,
ResponseHeaderTimeout: time.Second * time.Duration(5),
}
return &http.Client{
Timeout: time.Second * 10,
Transport: netTransport,
}
}
func HttpGET(client *http.Client, url string) (body []byte, err error) {
rsp, err := client.Get(url)
if err != nil {
return
}
defer rsp.Body.Close()
if rsp.StatusCode != http.StatusOK || err != nil{
err = fmt.Errorf("HTTP GET Code=%v, URI=%v, err=%v", rsp.StatusCode, url, err)
return
}
return ioutil.ReadAll(rsp.Body)
}