分享页面
拖动logo到书签栏,立即收藏青果网络
控制台
|
登录/注册
子
用户在实名认证前无法开通业务
充值
未支付订单
未完成工单
未读消息
会员中心
退出登录
文档中心
产品介绍
使用指南
开发者指南
API接口
代码示例
常见问题
账户中心
查询
常见问题
产品相关
国内4种代理产品的区别
短效代理各提取方式的区别
可以免费试用吗?
常见产品问题
常见购买问题
退款说明
使用相关
“没有空闲通道”提取不到IP怎么办?
IP如何申请和释放
怎么查看已申请的IP
使用代理IP远程服务器返回错误码说明
怎么查看购买的通道IP量使用及剩余情况
如何测试socks5 和http 代理IP 的可用性
API调用频率跟IP的获取次数有关系吗?
如何使用带有用户名密码认证的HTTP(S)代理
代理IP操作中的常见问题汇总
产品相关
国内4种代理产品的区别
短效代理各提取方式的区别
可以免费试用吗?
常见产品问题
常见购买问题
退款说明
使用相关
“没有空闲通道”提取不到IP怎么办?
IP如何申请和释放
怎么查看已申请的IP
使用代理IP远程服务器返回错误码说明
怎么查看购买的通道IP量使用及剩余情况
如何测试socks5 和http 代理IP 的可用性
API调用频率跟IP的获取次数有关系吗?
如何使用带有用户名密码认证的HTTP(S)代理
代理IP操作中的常见问题汇总
常见问题
>
使用相关
>
隧道代理 Go 语言接入指南
隧道代理 Go 语言接入指南
发布时间:2023-04-13 10:55
## 概述 本文档将指引你进行隧道代理的接入,在此文档中使用到的术语将会在下方进行列出。 | 术语 | 解释 | | :------- | :----------------------------------------- | | 隧道 | 自动更换代理 IP 的代理服务 | | 固定时长 | 服务器将在固定时长后自动切换IP,例如1分钟 | | 通道 | 使用多个通道同时发起请求,每个通道的IP不同 | 隧道代理有多种使用方式,具体行为取决于套餐及模式。 - 普通模式 每次请求都自动切换IP - 普通模式打标记 普通模式下,希望多个HTTP请求保证代理IP相同,可以给多个请求的代理协议打上相同的标记,并标记这个代理IP的存活时间(不主动设置存活时间则默认为10秒) - 固定时长多通道模式 服务器定时切换IP,可同时使用多个通道发起请求,即可以同时使用多个IP ## 前置知识 在 go 语言中,通常使用 http.Client 进行 http/s 代理的设定与请求的发送,使用 http.NewRequest 进行请求的构建。 ### Proxy Url Scheme 由协议、用户名、密码、域名、端口几部分组成 例如 http 协议的代理 url ``` http://[user:password@]hostname:port ``` ## 使用 GO 接入 **以下内容假设读者具备基本的 Go 语言编程能力和对网络协议具有一定的了解。** ### 生成 url 普通模式 ```go link := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer) proxyURL, _ := url.Parse(link) ``` 普通模式打标记 ```go link := fmt.Sprintf("http://%s:%s:%s:%d@%s", authKey, password, "channel-1", 20, proxyServer) proxyURL, _ := url.Parse(link) ``` 固定时长多通道模式 ```go link := fmt.Sprintf("http://%s:%s:%s@%s", authKey, password, "channel-1", proxyServer) proxyURL, _ := url.Parse(link) ``` ### 构建 Client 后续将使用该 client 发起 request ```go client := http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxyURL), }, } ``` ### 构建 HTTP/s GET 请求 以 https://api.ipify.org 为例。 因为已确认参数合法,因此构建不会发生错误,无需处理错误。 ``` request, _ := http.NewRequest("GET", "https://test.ipw.cn", nil) // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing ``` ### 执行已构建的 HTTP/s 请求 ```go response, err := client.Do(request) if err != nil { panic(err) } defer response.Body.Close() ``` ### 读取响应实体 response.Body 是 io.Reader 类型,需要手动进行读取 ```go body, err := io.ReadAll(response.Body) if err != nil { panic(err) } fmt.Println(string(body)) ``` ## 示例代码 ```go package main import ( "fmt" "io" "log" "net/http" "net/url" ) const ( authKey = "" password = "" server = "" channel = "channel-1" ) func main() { var link string if channel == "" { link = fmt.Sprintf("http://%s:%s@%s", authKey, password, server) } else { link = fmt.Sprintf("http://%s:%s:%s@%s", authKey, password, channel, server) } proxyURL, _ := url.Parse(link) client := http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxyURL), }, } request, _ := http.NewRequest("GET", "https://test.ipw.cn", nil) // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing response, err := client.Do(request) if err != nil { panic(err) } defer response.Body.Close() body, err := io.ReadAll(response.Body) if err != nil { panic(err) } log.Println("response body", string(body)) } ```
上一篇:没有了
下一篇:没有了
相关文章
火狐浏览器如何使用代理IP
隧道代理(全球HTTP)-使用指南-开发版
安卓手机如何通过SocksDroid软件使用代理IP
短效代理-使用指南-手动版
安卓手机如何使用代理IP
国内4种代理产品的区别
本文导读