## 概述 本文档将指引你进行隧道代理的接入,在此文档中使用到的术语将会在下方进行列出。 | 术语 | 解释 | | :------- | :----------------------------------------- | | 隧道 | 自动更换代理 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进行详细说明,具体步骤如下: ## 1 查看IP密钥 在【代理ip】-【按时业务/按量业务】里查看自己购买的代理ip,然后点击【查看详情】查看自己的代理IP业务信息(AuthKey和AuthPwd),具体如下图; ![image-20221115092956709](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2022-11-15/0929581197607.png) ![image-20221115092903635](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2022-11-15/0929059a2bbec.png) ## 2 提取代理IP 使用自己购买的AuthKey去【调试工具】里面选择【提取IP资源】获取ip,如下图: ![image-20221115092646500](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2022-11-15/0926472e7ceef.png) ![image-20221115092802349](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2022-11-15/09280386ce312.png) ## 3 浏览器设置代理 ### 3.1 遨游浏览器设置代理 步骤如下: 打开傲游浏览器,点击右上角的菜单,再点击【设置】并在搜索栏里面输入【代理】进行搜索,如下图: ![img](https://cos.qg.net/uploads/image/20210809/8013870a66cc7e35f20ebce454dad291.png) ![img](https://cos.qg.net/uploads/image/20210809/2ee707278d8b9fca4a1272f01ad10cc2.png) 打开的设置页面中选择【使用自定义代理设置】然后点击【添加】; ![img](https://cos.qg.net/uploads/image/20210809/ca1d022e2a5efdbfd1a5489d91ae539a.png) 在弹出的窗口输入【名称】,然后需要选择代理的类型,类型包括(http、https、socks模式),然后输入代理的【地址】跟【端口】,然后输入【用户名】和【密码】(用户名就是AuthKey,密码就是AuthPwd),输入完成后点击【确定】即可。 ![img](https://cos.qg.net/uploads/image/20210809/3b7ce18103f74d4059a1d3c673f41c1f.png) 添加完成后选择刚刚添加的代理,点击【启用】即完成遨游浏览器的代理设置; ![image-20221119141212923](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2022-11-19/1412161ad7675.png) ### 3.2 设置成功验证 使用傲游浏览器打开浏览器打开https://www.baidu.com/s?word=ip ,查看ip是否和设置的代理ip相同,相同则为设置成功; ![img](https://cos.qg.net/uploads/image/20210809/fa13aca8223cb2aad84738b7af3f33d7.png) ### 3.3 取消代理设置 取消代理的话,直接在设置里面点击【不使用代理】即可取消掉。 ![img](https://cos.qg.net/uploads/image/20210809/7fa78b0cbad47c0648854312701ed8fa.png)
**简要描述:**
- 业务购买询价
**输入参数:**
|参数名|必选|类型|说明|
|:---- |:---|:----- |----- |
|spec_id |是 |integer |按时产品ID |
|duration |是 |string | 购买时长 单位:
- s: 小时,免费试用时长 例:2s(2小时)
- d: 天 例:1d(1天)
- w: 周 例:1w(1周)
- m: 月 例:1m(1个月)
|
|number |否 |integer | 通道数,IP类型为静态、动态和隧道固定时长时必传;IP类型为隧道每次请求换ip时不需要传 |
|connect |否 |integer | 连接数,IP类型为隧道每次请求换ip时必传;其他类型不需要传 |
**输入示例:**
- https://qg.net/api/Proxyip/getPrice?spec_id=888&duration=1m&number=1
**返回示例**
JSON格式
```
{
"RequestId":"ASDF4ASF-ASDFASF",
"Code": 200,
"Data": {
"OriginPrice":134,
"TotalPrice":68
},
"Message":"获取成功"
}
```
**返回参数说明**
|参数名|类型|说明|
|:----- |:-----|----- |
|RequestId |string |请求编号 |
|Code |integer |返回状态码 |
|Message |string |返回内容 |
|OriginPrice |float |原价 |
|TotalPrice |float |应付价格| |
**备注:**
更多返回错误代码请看首页的错误代码描述。
## 1 说明
通过编码使用独享代理主要有以下4步骤:
1.先在[提取工具](https://www.qg.net/tools/IPget.html)或[调试工具](https://www.qg.net/tools/IPdebug.html)上获取api接口;
2.使用白名单或账密进行授权验证;
3.进行代理测试;[查看测试步骤>>](https://www.qg.net/doc/1574.html "查看测试步骤")
4.参考[代码样例](https://www.qg.net/list/192.html)编写采集程序,使用代理IP。
## 2 API接口
独享代理API接口一览
| 接口类型 | API | 描述 |
| ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 资源相关 | - [get](https://www.qg.net/doc/product/6_257_271_272/1840.html)
- [query](https://www.qg.net/doc/product/6_257_271_272/1841.html)
- [delete](https://www.qg.net/doc/product/6_257_271_272/1842.html)
- [replace](https://www.qg.net/doc/product/6_257_271_272/1843.html)
- [channels](https://www.qg.net/doc/product/6_257_271_272/1844.html)
- [resources](https://www.qg.net/doc/product/6_257_271_272/1845.html)
| - 提取IP资源
- 查询在用IP资源
- 释放IP资源
- 释放并重新提取IP资源
- 查询通道数
- 查询资源地区
|
| 白名单相关 | - [whitelist/query](https://www.qg.net/doc/180.html "whitelist/query")
- [whitelist/add](https://www.qg.net/doc/178.html "whitelist/add")
- [whitelist/del](https://www.qg.net/doc/179.html "whitelist/del") | - 查询IP的白名单
- 添加IP的白名单
- 删除IP的白名单 |
**重点:**独享代理只提供给单个客户使用,独享带宽和IP资源,IP可自主释放申请,因此新增接口更换IP资源/replace、释放IP资源/delete。
独享代理还有一种地区锁的模式,需要IP资源在固定地区的用户可以选择使用,相关API接口文档请[点击此处](https://www.qg.net/doc/product/6_257_271_273/2142.html)查看
**简要描述:** - 获取规格信息 **输入示例:** - https://qg.net/api/Proxyip/PackageList **返回示例** JSON格式 ``` { "RequestId":"ASDF4ASF-ASDFASF", "Code": 200, "Data": { "1":{ "Id": 2, "Type_name": "共享动态1-5分钟", "Type": 2, "Ip_type": 2, "Bandwidthlimit_down": 2, "Bandwidthlimit_up": 2, "Brand_name": "青果云", "Alivetime": "5分钟" } }, "Message":"获取成功" } ``` **返回参数说明** |参数名|类型|说明| |:----- |:-----|----- | |RequestId |string |请求编号 | |Code |integer |返回状态码 | |Message |string |返回内容 | |Id |integer |ID | |Type_name |string |规格名称 | |Type |integer |资源类型 1:独享;2:共享 | |Ip_type |integer |IP类型 1:静态;2:动态; 3: 隧道 | |Alivetime |integer |存活周期,单位为分钟,格式为1-5,表示最小存活周期为1分钟,最大存活周期为5分钟;IP类型为隧道时,该参数类型分别为1:每次请求换IP,2:固定时长 | |Bandwidthlimit_down |integer |下行带宽限制 | |Bandwidthlimit_up |integer |上行带宽限制 | |Brand_name |integer |品牌名称 | **备注** - 更多返回错误代码请看首页的错误代码描述
Mac系统如何使用代理IP,本文将为你讲解,详细步骤如下: 在【系统偏好设置】里选择【网络】; ![image-20230114115236847](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-01-14/115241e1e35f3.png) 选择【高级】; ![image-20230114115258037](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-01-14/1152598025e46.png) 设置HTTP代理时如图进行设置,填写获取到的代理IP和端口号,填写密钥信息,用户名和密码对应的是青果代理业务中的【Authkey】和【AuthPw】,设置完成后点击【好】即可; ![image-20230114115314654](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-01-14/115315e4712dc.png) 设置SOCKS代理时如图进行设置、填写获取到的代理IP和端口号,填写密钥信息,用户名和密码对应的是青果代理业务中的【Authkey】和【AuthPw】,设置完成后点击【好】即可; ![image-20230114115349597](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-01-14/1153514ae1224.png) 点击【应用】; ![image-20230114115409198](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-01-14/1154100a9af57.png) 使用浏览器查看IP与代理一致则说明设置成功。 ![image-20230114115430953](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-01-14/115433ae71b0d.png)
## 步骤总览
![image-20240429171152960](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads%2Fimage%2F2024-04-29%2F1711528fd4aa6.png)
**注:若使用白名单验证模式,请先添加白名单再进行API接口获取。**
## 一、获取隧道地址
1.在开通隧道代理(全球HTTP)后,就会进入后台管理面板,会看到如以下画面。在业务列表中,可以看到对应的隧道地址。
隧道代理特殊的地方就在于不需要提取和管理大量IP,只需要拿到1个隧道地址便可直接在使用过程中获得所需动态IP,获取隧道地址就近似于获取其他代理产品的IP地址与端口。
![image-20240429165920934](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads%2Fimage%2F2024-04-29%2F165921b79228f.png)
**请注意,**目前国内代理IP和全球HTTP的产品,除了按量提取对应的套餐是按量业务之外,其他产品都属于按时业务。
#### 二、授权验证
获取隧道地址之后,还需要有授权验证才能使用代理。青果代理支持白名单和帐密两种验证方式,可自主选择使用。
白名单模式,即把要实现代理的服务器IP添加进代理白名单中,后续使用该IP连接代理就能成功;
账密模式,即先获取该代理业务的账号密码信息,连接代理时填入账密进行验证就可使用代理。
![image-20240429170736889](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads%2Fimage%2F2024-04-29%2F170736df1d19c.png)
详细步骤可查看[代理验证](https://www.qg.net/doc/use/8_244/1574.html)
##三、代理测试
在代理服务器中打开命令行,输入相应的代理信息进行运行,若响应成功,则代理可用。
以下图为例,通过curl命令测试账密模式的代理结果,查询IP并成功响应。
`curl -x http://{authkey}:{authpwd}@隧道地址 {targetUrl}`
![image-20240429171647434](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads%2Fimage%2F2024-04-29%2F171647213d98a.png)
若使用白名单模式,不需要添加authkey和authpwd。
`curl -x {隧道服务器} {目标url}`
例子 curl -x overseas.tunnel.qg.net:15561 www.baidu.com
## 四、编写采集程序
测试代理可用后,便可开始编写代理采集程序了。
青果提供了以下的编程语言的代码示例以及SDK下载包供开发者进行隧道代理参考,
>>[SDK下载](https://www.qg.net/doc/sdk/9_230/1745.html)
>>[隧道代理 Go 语言接入指南](https://www.qg.net/doc/sdk/9_230/1872.html)
>>[隧道代理 Python 语言接入指南](https://www.qg.net/doc/sdk/9_230/1879.html)
## 其他应用
另外,虽然隧道代理不需要API接口就能使用代理,但也提供了白名单验证的接口,以下简单介绍隧道相关的白名单接口使用以及一些指定功能。
### API列表
隧道不支持API的调用,只有白名单功能的API接口。
| 接口类型 | 接口 |
| ---------- | --------------------- | ------------------ |
| 白名单相关 | [添加白名单IP](https://www.qg.net/doc/178.html "添加白名单IP")
[删除白名单IP](https://www.qg.net/doc/179.html "删除白名单IP")
[查询白名单IP](https://www.qg.net/doc/180.html "[查询白名单IP]")
### 指定使用某个国家的IP
因为隧道代理每次请求都会随机更换IP,如果你希望随机范围限定在某个国家,可以通过添加国家编码参数来指定使用某个国家的IP。具体编码请查看 [区域编码表](https://www.qg.net/doc/1975.html)
```curl
curl -x {authkey}:{authpwd}:A{国家编码}@{隧道服务器} {目标url}
// 例子,指定使用美国IP
curl -x HBRMO154:4799868CE54:A990100@overseas.tunnel.qg.net:15561 www.baidu.com
```
### 保持IP不变
如果用户需要多个请求在维持一个IP,比如:需要登录,获取数据两个请求在一个IP下,则可对IP进行打标记,通过标记请求在代理有效期内使用相同的代理IP,并且可以支持设定该通道的存活时间。
```curl
curl -x {authkey}:{authpwd}:C{自定义通道名}:T{存活时间}:A{国家编码}@{隧道服务器} {目标url}
// 例子,通道名自定义为100,存活时间设为60秒
curl -x HBRMO154:4799868CE54:Cchannel-1:T60:A990100@overseas-us.tunnel.qg.net:15561 www.baidu.com
```
**注意:如果需要保持IP不变一段时间,那么不可以使用通用的overseas.tunnel.qg.net域名,需要使用特定地区的服务器域名,比如:overseas-us.tunnel.qg.net/overseas-hk.tunnel.qg.net等!!!否则服务器无法保证是否可以保持IP不变。**
### 指定隧道服务器
为了降低使用隧道服务的延迟,青果网络为隧道代理(全球HTTP)提供了多个隧道服务器,用户可根据自身的使用情况就近选择隧道服务器。隧道服务器的地址可在控制台中查看。
```curl
curl -x {authkey}:{authpwd}:C{自定义通道名}:T{存活时间}:A{国家编码}@{隧道服务器} {目标url}
// 例子,更换隧道服务器为美国的隧道服务器
curl -x HBRMO154:4799868CE54:Cchannel-1:T60:A990100@overseas-us.tunnel.qg.net:15561 www.baidu.com
```
第一步,进入调试工具后,选择接口方法为【通道配额】; 第二步,在Key的输入框输入已购买的代理IP业务AuthKey值; 第三步,点击测试按钮即可进行查询。 如下图所示: ![image-20221123173211497](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2022-11-23/1732128441675.png) 参数说明: Total:总计可用通道数量(按时或按时按量)或总计购买IP数量(按量模式); Available:当前可用通道或IP数量; Used:当前已经使用的通道或IP数量。
## 1 接口描述 接口地址: https://proxy.qg.net/monopolies 本接口是根据key查询用户已占用到且可用的独占资源列表。 请求频率限制:60次/分钟; 方法:GET; 编码:参数和返回内容均采用utf-8编码。 ## 2 输入参数说明 | 参数名 | 是否必选 | 类型 | 描述 | | :----- | :------- | :----- | :----------------------------: | | Key | 是 | String | 查询独占资源的Key值; | | UUIDs | 否 | String | 独占资源编号,多个用逗号隔开。 | ## 3 返回值 接口可返回文本格式、json格式、xml格式,字段说明如下: | 返回字段 | 类型 | 描述 | | :------- | :----- | :----------: | | data | Array | 独占资源列表 | | error | String | 错误信息 | ## 4 示例 请求接口示例: ``` curl "https://proxy.qg.net/monopolies?Key=请改成您的Key&UUIDs=XXX,XXX" ``` 返回示例: ``` { "data": [{ "uuid": "fj_qzdx9-1:ppp10", "area": "福建省泉州市", "isp": "电信", "state": "在线", //分成在线、离线、重拨中、排队中(等待秒数X) "monopolize_time": "2022-02-17 14:01:05", //独占时间 "last_dial_time": "2022-02-17 14:01:05", //最近一次拨号时间 "ip": "127.0.0.1:10800", //当前IP,状态为在线时才有此数据 "heartbeat": "2022-02-17 14:01:05", //最后一次心跳,状态为在线时才有此数据 },{ ... }] } ``` ## 5 接口返回错误码 | 错误码 | 描述 | | :----: | :------: | | 200 | 查询成功 | | 500 | 未知错误 |
**简要描述:** - 获取按量产品列表信息 **输入示例:** - https://qg.net/api/Proxyip/resourceSpecList **返回示例** JSON格式 ``` { "RequestId":"ASDF4ASF-ASDFASF", "Code": 200, "Data": { "1":{ "Id": 62, "Spec_name": "短效代理1-5分钟", "Spec_no": "dtgx001", "Ip_nums": 10000, "Price": "30.00", "Months": 24, "Show_status": 1, "Buy_status": 1, "Group_type_id": 2, "Desc": "IP数量 : 同时可使用的IP数等于购买的通道数 \r\nIP存活时长 : IP长久有效\r\nIP可用率 : 99.9%\r\nIP重复率 : <1%\r\nIP分布地区 : 全国主要省份\r\n终端数限制 : 不限制\r\n带宽峰值限制 : 2Mbps\r\n地区筛选 : 支持指定获取某个城市IP或全国随机\r\n代理类型 : HTTP、HTTPS、SOCKS5\r\n", "Brand_name": "青果云", "Create_time": 1615887813, "Update_time": null, "Connect" : "33" } }, "Message":"获取成功" } ``` **返回参数说明** |参数名|类型|说明| |:----- |:-----|----- | |RequestId |string |请求编号 | |Code |integer |返回状态码 | |Message |string |返回内容 | |Id |integer |ID | |Spec_name |string |产品名称 | |Ip_nums |integer |IP数量 单位万个| |Price |float |价格 | |Months |integer |有效期 | |Show_status |integer |状态 1:显示 0:不显示 | |Buy_status |integer |状态 1:禁用 0:禁用 | |Desc |string |基本介绍| |Group_type_id |integer |规格ID| |Brand_name |string |品牌名称| |Connect |string |连接数| |Connect_limit |string |连接数限制| **备注** - 更多返回错误代码请看首页的错误代码描述