package main
import (
	"crypto/tls"
	"flag"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
)
func main() {
	u := flag.String("u", "http://www.baidu.com", "get url")
	p := flag.String("p", "http://127.0.0.1:1081", "proxy string")
	flag.Parse()
	err := useProxyFromEnvironment(*u)
	if err != nil {
		fmt.Println(err)
		return
	}
	err = useProxyURL(*u, *p)
	if err != nil {
		fmt.Println(err)
		return
	}
}
func useProxyFromEnvironment(u string) error {
	req, err := http.NewRequest(http.MethodGet, u, nil)
	if err != nil {
		return err
	}
	r, err := (&http.Client{
		Transport: &http.Transport{
			TLSClientConfig: &tls.Config{
				InsecureSkipVerify: true,
			}, // 使用环境变量的代理
			Proxy: http.ProxyFromEnvironment,
		}}).Do(req)
	if err != nil {
		return err
	}
	if r != nil {
		defer r.Body.Close()
	}
	b, err := ioutil.ReadAll(r.Body)
	if err != nil {
		return err
	}
	fmt.Println("useProxyFromEnvironment:", string(b))
	return nil
}
func useProxyURL(u, proxy string) error {
	req, err := http.NewRequest(http.MethodGet, u, nil)
	if err != nil {
		return err
	}
	tr := &http.Transport{TLSClientConfig: &tls.Config{
		InsecureSkipVerify: true,
	}}
	if proxy != "" {
		proxyUrl, err := url.Parse(proxy)
		if err == nil { // 使用传入代理
			tr.Proxy = http.ProxyURL(proxyUrl)
		}
	}
	r, err := (&http.Client{Transport: tr}).Do(req)
	if err != nil {
		return err
	}
	if r != nil {
		defer r.Body.Close()
	}
	b, err := ioutil.ReadAll(r.Body)
	if err != nil {
		return err
	}
	fmt.Println("useProxyURL:", string(b))
	return nil
}
  
  