欲买桂花同载酒,荒泷天下第一斗。|

janbar

园龄:4年6个月 粉丝:29 关注:10

2020-09-17 21:17 阅读 3017 评论 0 推荐

golang的http库使用代理

1.先上代码

copy
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 }

2.使用方法

  1. 使用环境变量的代理,实际代理方式可以不是http:
    HTTP_PROXY=http:/127.0.0.1:1081 ./proxy -u http://www.baidu.com
    http_proxy=http:/127.0.0.1:1081 ./proxy -u http://www.baidu.com
    HTTPS_PROXY=http:/127.0.0.1:1081 ./proxy -u http://www.baidu.com
    https_proxy=http:/127.0.0.1:1081 ./proxy -u http://www.baidu.com
    下面就是用socks5代理
    http_proxy=socks5:/127.0.0.1:1081 ./proxy -u http://www.baidu.com
    不使用代理可以,NO_PROXY可以传以","逗号分隔的IP或域名,表示这些不用代理
    NO_PROXY=* ./proxy -u http://www.baidu.com
    上述三种环境变量可以同时使用,组合起来效果更佳
    2.使用参数指定代理
    ./proxy -u http://www.baidu.com -p http:/127.0.0.1:1081
    ./proxy -u http://www.baidu.com -p socks5:/127.0.0.1:1081
    这种方式是代码指定代理,因此代理规则需要自己设计不像上面环境变量已经是go内置功能了。
posted @   janbar  阅读(3017)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~

FAVOURITE

点击右上角即可分享
微信分享提示
*✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾ 好好学习天天向上
进入亮色模式
进入亮色模式

FAVOURITE