已经找到“” 的记录158条
隧道代理(固定时长)使用指南

1 步骤说明

  1. 在开通隧道代理IP后,单击网站右上角的【控制台】,进入后台管理面板,在左侧栏目里选择【代理IP】-【按时/按量业务】,找到已经开通的隧道代理业务;
    image-20221119161844905image-20230608102558525

  2. 隧道代理无须提取IP,接入隧道服务即可;

  3. 参考代码样例请求隧道代理;

  4. 在程序中通过调用API接口获取代理,然后请求目标网站。

    1. API调用需要验证,验证方式包括密钥验证和白名单验证,根据实际使用自主选择;
    2. 密钥验证方式请求头带Authkey和Authpwd信息即可;
    3. 添加白名单可以免密,添加白名单后大概在30s之后生效。

2 API列表

隧道不支持API的调用,只有白名单功能的API接口。

接口类型 接口
白名单管理 添加白名单IP
删除白名单IP
查询白名单IP

3 测试代理的可用性

隧道代理支持密钥验证和白名单两种验证方式,建议先在本机测试;
需要注意的是,隧道代理(固定时长)的同时可用请求不超过购买时选择的通道数,测试OK后就可以正常使用了。

查看测试步骤 >

4 使用模式

隧道代理(固定时长)可以切换两种使用模式:云端模式、客户端模式。

云端模式指的是直接使用青果网络提供的隧道代理服务器,简单易用。

客户端模式指的是使用青果网络提供的隧道代理程序,部署在自己的机器上,适用性更好。

4.1 云端模式

云端模式支持在请求参数中指定自定义的通道名称。
通道的IP在有效期内保持不变,如果短时间内需要使用相同的IP,请使用相同的通道名称即可。
以下为简单的python代码示例:

  1. proxyUrl = "http://%(user)s:%(password)s:%(channel)s@%(server)s" % {
  2. "user": authKey,
  3. "password": password,
  4. "channel": "channel-1",
  5. "server": proxyAddr,
  6. }

4.2 客户端模式

4.2.1 安装并启用客户端

  1. 使用SSH连接工具,连接到您的Linux服务器。
  2. 根据系统执行相应命令开始安装
    1. Centos安装脚本:rpm -Uvh https://d.qg.net/qgproxy-client-1.0.0-release.x86_64.rpm
    2. Ubuntu安装脚本:dpkg -i https://d.qg.net/qgproxy-client_1.0.0-release_amd64.deb
    3. 安装结果:
  3. 将自己Authkey和Authpwd写入到配置文件中并保存。vi /etc/qgproxy-client/qgproxy-client.tomlimage-20230224180018515
  4. 重新加载配置文件并启动服务:systemctl daemon-reload && systemctl start qgproxy-client
  5. 查看服务状态:systemctl status qgproxy-client.serviceimage-20230224181319409
  6. 查看端口监听是否开启:netstat -atnp |grep LISTENimage-20230224181420945

4.2.2 使用线程池模式获取IP

每个爬虫线程访问固定的本地代理端口(默认30000端口起),由客户端来管理和绑定该端口对应的出口IP,每个端口绑定的出口IP在IP有效期内固定不变。详情如图所示:
image-20230608134006330

执行命令,测试查看出口IP地址:curl -x 127.0.0.1:30000 d.qg.net/ip

通过下图可以看到,30000端口和30001的出口IP不同,且在IP有效期内保持不变。

image-20230224190127491

4.2.3 使用隧道模式获取IP

爬虫只需访问唯一的本地代理端口(默认20000端口),每个请求将随机分发到该端口映射的多个出口IP的其中之一。

image-20230608134035701

执行命令,测试查看出口IP地址:curl -x 127.0.0.1:20000 d.qg.net/ip

通过下图可以看到,每次请求获取到的IP是不同的。但是这个IP池的大小取决于您所购买的通道数数量。

image-20230224185853571

5 错误码一览表

HTTP返回码 说明
400 客户端错误。客户端协议无法被识别;
431 请求头过大。出现在http代理中,header头部信息过多导致;
302 出现302一般有两种情况:
(1).客户端IP为海外IP,服务器会重定向到预警页面;
(2).客户端访问的目标站被拦截,比如银行网站、邮箱、社交软件等,服务器返回重定向到预警页面;
407 授权错误,出现407一般有两种情况:
(1).白名单模式,可能是用户有多出口IP,没有全部添加到白名单;或可能连接使用IP资源,是添加白名单前获取的,白名单未对其生效;
(2).账密模式,可能是账密信息错误;
(3)共享IP产品中可能是IP已过期;
408 目标站不可达。服务端与目标站建连失败,服务端不可达或者当前代理IP掉线;
429 请求数超出。隧道产品中用户QPS大于购买的请求数;独享和共享产品中,用户当前的代理tcp连接超出限制数;
508 代理目标站为代理IP地址导致死循环。一般不出现;
503 当前代理协议不支持,比如ss代理协议;

6 代理请求数据统计

代理请求数据统计包括IP请求统计,提供了对请求量和请求错误的统计分析。方便随时关注采集程序的运行情况,及时发现错误并修正。

同时IP请求统计还提供几种常见的错误类型分析,如请求成功、授权失败、请求数超出、连接超时等,助力数据高效采集。
image-20221108103607172

隧道代理(动态请求)使用指南

1 步骤说明

1.在开通隧道代理IP后,单击网站右上角的【控制台】,进入后台管理面板,在左侧栏目里选择【代理IP】-【按时/按量业务】,找到已经开通的隧道代理业务;
image-20221119161844905

2.隧道代理无须提取IP,接入隧道服务即可;

3.参考代码样例请求隧道代理;

4.在程序中通过调用API接口获取代理,然后请求目标网站。

(1)API调用需要验证,验证方式包括密钥验证和白名单验证,根据实际使用自主选择;

(2)密钥验证方式请求头带AuthKey和AuthPwd信息即可;

(3)添加白名单可以免密,添加白名单后大概在30s之后生效。

2 API列表

隧道不支持API的调用,只有白名单功能的API接口。

接口类型 接口
白名单相关 添加白名单IP
删除白名单IP
查询白名单IP

3 测试代理的可用性

隧道代理支持密钥验证和白名单两种验证方式,建议先在本机测试;
需要注意的是,隧道代理(动态请求)的请求不超过购买时选择的每秒并发数,支持短期高并发;
隧道代理(固定时长)的同时可用请求不超过购买时选择的通道数,测试OK后就可以正常使用了。

查看测试步骤 >

4 保持IP/IP打标记

如果用户需要多个请求在维持一个IP,比如:需要登录,获取数据两个请求在一个IP下,则可对IP进行打标记,通过标记请求在代理有效期内使用相同的代理IP。
隧道代理(固定时长)需要同时使用多IP,也需要对多个IP打标记,方便识别与使用。
查看代码示例 >

5 错误码一览表

HTTP返回码 说明
400 客户端错误。客户端协议无法被识别;
431 请求头过大。出现在http代理中,header头部信息过多导致;
302 出现302一般有两种情况:
(1).客户端IP为海外IP,服务器会重定向到预警页面;
(2).客户端访问的目标站被拦截,比如银行网站、邮箱、社交软件等,服务器返回重定向到预警页面;
407 授权错误,出现407一般有两种情况:
(1).白名单模式,可能是用户有多出口IP,没有全部添加到白名单;或可能连接使用IP资源,是添加白名单前获取的,白名单未对其生效;
(2).账密模式,可能是账密信息错误;
(3)共享IP产品中可能是IP已过期;
408 目标站不可达。服务端与目标站建连失败,服务端不可达或者当前代理IP掉线;
429 请求数超出。隧道产品中用户QPS大于购买的请求数;独享和共享产品中,用户当前的代理tcp连接超出限制数;
508 代理目标站为代理IP地址导致死循环。一般不出现;
503 当前代理协议不支持,比如ss代理协议;

6 代理请求数据统计

代理请求数据统计包括IP请求统计,提供了对请求量和请求错误的统计分析。方便随时关注采集程序的运行情况,及时发现错误并修正。

同时IP请求统计还提供几种常见的错误类型分析,如请求成功、授权失败、请求数超出、连接超时等,助力数据高效采集。
image-20221108103607172

7 代码样例

静态独享代理使用指南

1 步骤说明

1.在开通静态独享代理IP后,单击网站右上角的【控制台】,可进入后台管理面板,在左侧栏目里选择【代理IP】-【按时/按量业务】,找到已经开通的静态独享代理业务;
image-20221119161844905

image-20221119161801706

2.在业务列表选择【操作-提取IP】,或提取工具调试工具上选择对应的key提取IP,先进行本地调试和验证;
image-20221119162106612

3.参考代码样例请求静态独享代理;

4.在程序中通过调用API接口获取代理,然后请求目标网站。

(1)API调用需要验证,验证方式包括密钥验证和白名单验证,根据实际使用自主选择;

(2)密钥验证方式请求头带AuthKey和AuthPwd信息即可;

(3)添加白名单可以免密,添加完白名单,立即对已申请的IP生效。

2 API列表

接口类型 API
资源相关 提取资源
查询资源
提取并查询资源
查询通道数
查询地区和运营商
白名单相关 添加白名单IP
删除白名单IP
查询白名单IP

IP数量和时长可自主控制,存活时长24小时起,24小后可释放申请新的IP,一周自主更换2次。

在线API链接提取 >

3 测试代理的可用性

静态独享代理支持密钥验证和白名单两种验证方式,建议先在本机测试,测试OK后就可以正常使用了。

查看测试步骤 >

4 错误码一览表

HTTP返回码 说明
400 客户端错误。客户端协议无法被识别;
431 请求头过大。出现在http代理中,header头部信息过多导致;
302 出现302一般有两种情况:
(1).客户端IP为海外IP,服务器会重定向到预警页面;
(2).客户端访问的目标站被拦截,比如银行网站、邮箱、社交软件等,服务器返回重定向到预警页面;
407 授权错误,出现407一般有两种情况:
(1).白名单模式,可能是用户有多出口IP,没有全部添加到白名单;或可能连接使用IP资源,是添加白名单前获取的,白名单未对其生效;
(2).账密模式,可能是账密信息错误;
(3)共享IP产品中可能是IP已过期;
408 目标站不可达。服务端与目标站建连失败,服务端不可达或者当前代理IP掉线;
429 请求数超出。隧道产品中用户QPS大于购买的请求数;独享和共享产品中,用户当前的代理tcp连接超出限制数;
508 代理目标站为代理IP地址导致死循环。一般不出现;
503 当前代理协议不支持,比如ss代理协议;

5 代理请求数据统计

代理请求数据统计包括IP请求统计、IP提取明细,提供了对请求量和请求提取的统计和记录。方便随时关注采集程序的运行情况,及时发现错误并修正。

同时IP请求统计还提供几种常见的错误类型分析,如请求成功、授权失败、请求数超出、连接超时等,助力数据高效采集。
image-20221108103607172

6 代码样例

  • 调用API

  • 代码示例

动态独享代理使用指南

1 步骤说明

开发者可以通过如下4个步骤使用动态独享代理

  1. 在开通动态独享代理产品后,单击网站右上角的【控制台】,进入后台管理面板,在左侧栏目里选择【代理IP】-【按时/按量业务】,找到已经开通的动态独享代理业务;
    image-20221119161844905image-20221119161801706

  2. 在业务列表选择【操作-提取IP】,或提取工具调试工具上选择对应的key提取IP,进行本地调试和验证。

  3. 参考代码样例请求动态独享代理。

  4. 在程序中通过调用API接口获取代理,然后请求目标网站。

    1. API调用需要验证,验证方式包括密钥验证和白名单验证,根据实际使用自主选择。
    2. 密钥验证方式请求头带AuthKey和AuthPwd信息即可。
    3. 添加白名单可以免密,需要在未提取IP之前添加白名单。

2 API接口

接口类型 接口
动态独享代理 提取资源
查询资源
提取并查询资源
查询通道数
查询地区和运营商
动态独享代理(启用地区锁) 提取资源
查询资源
提取并查询资源
查询通道数
查询地区和运营商
白名单相关 添加白名单IP
删除白名单IP
查询白名单IP

3 测试代理的可用性

动态独享代理支持密钥验证和白名单两种验证方式,建议先在本机测试,测试OK后就可以正常使用了。

查看测试步骤 >

4 地区锁功能

地区锁指的是用户可以锁定地区IP进行切换,不会因为资源紧张而出现提取不到指定地区IP的情况。适合于需要使用固定地区家庭IP的场景。

启用地区锁后,提取速度会降低,使用方式也会改变。

  1. 查看地区锁启用状态:在控制台中筛选“动态独享代理”产品,可通过地区锁字段查看当前业务是否启用地区锁功能image-20230427115810055
  2. 启用或者停用地区锁:在业务列表中找到需要操作的业务,查看详情image-20230427134032050在详情页中,找到”地区锁”字段,进行启用或停用。切换地区锁功能,将强制释放已提取IP,并且12小时后才能切换地区锁。image-20230427134229110
  3. 在控制台中使用地区锁模式:在业务列表找到已启用地区锁的业务,点击“地区锁”,进入管理页面。image-20230427135104616在管理页面中,先根据购买的通道数资源,添加需要锁定的城市资源,然后在IP管理中进行切换或者移除即可。image-20230427135310848
  4. 当启用地区锁之后,所调用的API接口也会发生变化,查看详情

5 错误码一览表

HTTP返回码 说明
400 客户端错误。客户端协议无法被识别;
431 请求头过大。出现在http代理中,header头部信息过多导致;
302 出现302一般有两种情况:
1.客户端IP为海外IP,服务器会重定向到预警页面
2.客户端访问的目标站被拦截,比如银行网站、邮箱、社交软件等,服务器返回重定向到预警页面
407 授权错误,出现407一般有两种情况:
1.白名单模式,可能是用户有多出口IP,没有全部添加到白名单;或可能连接使用IP资源,是添加白名单前获取的,白名单未对其生效
2.账密模式,可能是账密信息错误
3.共享IP产品中可能是IP已过期
408 目标站不可达。服务端与目标站建连失败,服务端不可达或者当前代理IP掉线
429 请求数超出。隧道产品中用户QPS大于购买的请求数;独享和共享产品中,用户当前的代理tcp连接超出限制数
508 代理目标站为代理IP地址导致死循环。一般不出现
503 当前代理协议不支持,比如ss代理协议

6 代理请求数据统计

代理请求数据统计包括IP请求统计、IP提取明细,提供了对请求量和请求提取、使用的统计和记录。方便随时关注采集程序的运行情况,及时发现错误并修正。

同时IP请求统计还提供几种常见的错误类型分析,如请求成功、授权失败、请求数超出、连接超时等,助力数据高效采集。
image-20221108103607172

7 代码样例&SDK下载

  • 调用API

  • 代码示例

  • SDK下载 

动态共享代理使用指南

1 步骤说明

1.在购买动态共享代理产品后,单击网站右上角的【控制台】,进入后台管理面板,在左侧栏目里选择【代理IP】-【按时/按量业务】,找到已经开通的动态共享代理业务;

2.在业务列表选择【操作】-【提取IP】,或【提取工具】或【调试工具】上选择对应的key提取IP,进行本地调试和验证;

需要注意的是,按量动态共享提取IP不收费,使用IP才收费。IP的初始免费提取额度为1000个,之后每使用一个IP,新增5个提取额度,每10分钟后重置一次免费提取额度;
IP有效时长从提取时开始计算,提取后需尽快使用,以免IP过期;

3.参考代码样例请求动态共享代理;

4.在程序中通过调用API接口获取代理,然后请求目标网站。

(1) API调用需要验证,验证方式包括密钥验证和白名单验证,根据使用自主选择;

(2) 密钥验证方式请求头带AuthKey和AuthPwd信息即可;

(3) 添加白名单可以免密,需要在未提取IP之前添加白名单。需要注意的是,动态共享产品的不同key,不能添加相同的白名单IP。

2 API列表

动态共享代理(按时)API接口一览

接口类型 接口
资源相关 提取资源
查询资源
提取并查询资源
查询通道数
查询地区和运营商
白名单相关 添加白名单IP
删除白名单IP
查询白名单IP

动态共享代理(按量)API接口一览

接口类型 接口
资源相关 提取资源
查询余额
查询地区和运营商
白名单相关 添加白名单IP
删除白名单IP
查询白名单IP

在线API链接提取 >

3 测试代理的可用性

动态共享代理支持密钥验证和白名单两种验证方式,建议先在本机测试,测试OK后就可以正常使用了。

查看测试步骤 >

4 错误码一览表

HTTP返回码 说明
400 客户端错误。客户端协议无法被识别;
431 请求头过大。出现在http代理中,header头部信息过多导致;
302 出现302一般有两种情况:
(1)客户端IP为海外IP,服务器会重定向到预警页面;
(2)客户端访问的目标站被拦截,比如银行网站、邮箱、社交软件等,服务器返回重定向到预警页面;
407 授权错误,出现407一般有两种情况:
(1) 白名单模式,可能是用户有多出口IP,没有全部添加到白名单;或可能连接使用IP资源,是添加白名单前获取的,白名单未对其生效;
(2) 账密模式,可能是账密信息错误;
(3)共享IP产品中可能是IP已过期;
408 目标站不可达。服务端与目标站建连失败,服务端不可达或者当前代理IP掉线;
429 请求数超出。隧道产品中用户QPS大于购买的请求数;独享和共享产品中,用户当前的代理tcp连接超出限制数;
508 代理目标站为代理IP地址导致死循环,一般不出现;
503 当前代理协议不支持,比如ss代理协议;

5 代理请求数据统计

代理请求数据统计包括IP请求统计、IP提取明细和IP使用记录,提供了对请求量和请求提取和使用的统计与记录。方便随时关注采集程序的运行情况,及时发现错误并修正。

同时请求统计还提供几种常见的错误类型分析,如请求成功、授权失败、请求数超出、连接超时等,助力数据高效采集。
image-20221108103607172

6 代码样例

  • 调用API

  • 代码示例

手动设置代理步骤

1.设置代理步骤详解

1.1 进入会员中心

飞网账号登录,进入会员中心,选择“代理IP”模块,根据购买的按量业务或按时业务,查看您的所有代理业务;

1.2 设置白名单

通过添加白名单IP,业务可以免帐密使用代理IP,方便快捷。
需要注意的是每个业务的白名单需要单独设置,同时需要在使用代理IP前设置白名单才能有效应用与业务;

1.2.1 查询您将使用代理的机器的外网IP;

  • 如果是办公室电脑,可以访问https://ip.cn/api/index?ip=&type=0查询您的外网IP ;

  • 如果是Linux服务器,可以通过如下命令查看机器外网IP:curl myipip.net

1.2.2 在会员中心—代理IP—按时业务/按量业务—操作点击“白名单”,进行白名单管理,如下图:

1.2.3 输入您的外网IP,点击“添加”即可;

1.3 提取IP

1.3.1 进入会员中心,在代理IP业务列表中选择要使用的业务,点击“提取IP”;

1.3.2 选择提取的IP数量、存活周期、地区等要素,默认随机,数量和存活周期不可超过业务最大值;

1.4.设置代理IP

复制提取的IP与端口号,根据您的使用场景和设备,选择合适的设置代理方式。

手机/平板 电脑 软件 浏览器
安卓 Windows 10 花刺代理 360浏览器
iPhone/iPad Windows 7 SocksCap64 谷歌浏览器
  Mac Proxifier 搜狗浏览器
      火狐浏览器

2.代理设置常见问题

2.1 提示输入用户名和密码

飞网代理IP使用验证包括帐密验证和白名单,帐密验证需要每次使用进行验证,建议用户优先使用白名单;

帐密验证具体流程如下:

2.1.1 进入会员中心,在代理IP业务列表中选择要使用的业务,点击“管理”查看业务密钥,如下图:

2.1.2 使用代理IP进行帐密身份验证,根据提示对应输入用户名(Authkey)和密码(Authpwd),如下图:

2.2 全局代理和局部代理

全局代理:设置全局代理后,电脑的整个网络都使用的是代理。

局部代理:只是针对指定的浏览器或软件使用代理,其他软件不受影响。

 

测试代理IP的可用性

静态独享、动态共享和动态独享通过API获取代理IP列表后,您就可以在程序里通过代理服务器获取网页数据。
隧道代理无需调用API获取代理,在会员中心查看隧道的IP和端口号。

您获取的代理IP是这样的:122.96.59.105:23068
122.96.59.105 是代理服务器的IP地址;
23068 是代理服务器的端口号。

代理验证

使用静态独享、动态独享和动态共享的IP需要进行授权验证,购买后只有通过您的用户名密码或设置您的IP白名单后才能使用。

隧道共享则是通过访问飞网隧道服务器,服务器访问只对您的业务授权使用,同时支持用户名密码(Authkey和Authpwd)和IP白名单。

我们支持两种验证方式:

1.绑定您机器的IP作为白名单

如果是办公室电脑,可以访问https://ip.cn/api/index?ip=&type=0查询您的外网IP;

如果是Linux服务器,可以通过如下命令查看机器外网IP:curl myipip.net

进入会员中心,找到您所在的业务,管理白名单(包括添加删除白名单),白名单设置详情如下图:

image-20211026174537109

image-20211026174620025

2.帐密验证

进入会员中心,在您所在的代理IP业务找到用于代理IP验证的用户名密钥信息(Authkey和Authpwd)。

image-20211026175216540

(1).HTTP代理

通过用户名密码的进行身份认证,格式如下:

curl -x http://{key}:{passwd}@{ip}:{port} {targetUrl}

http/https代理,-x 填写的协议头只能是http,不能是https,如果填写下面那样的格式,将无法访问

curl -x https://{ip}:{port} {targetUrl}

(2).SOCKS代理

curl -x socks5://{ip}:{port} {targetUrl}

curl返回的是未渲染的html内容,这属于正常现象。

命令行测试

如果您的程序在Linux上运行,我们非常推荐您在命令行下先通过curl命令测试代理服务器的可用性,然后再进行编程。

例如您的用户名是authkey,密码是authpwd,提取到的代理IP是118.92.69.112:32105,IP白名单是36.90.191.92:32140,可执行如下命令测试代理可用性:

http/https代理,帐密模式

curl -x http://{authkey}:{authpwd}@{118.92.69.112}:{32105} {targetUrl}

http/https代理,白名单模式

curl -x http://{36.90.191.92}:{32140} {targetUrl}
Python自动化测试Selenium+chrome连接代理ip(账密模式)

此示例Python使用Selenium调用Chrome浏览器并通过代理进行自动化测试。

  • 代码示例
  1. import time
  2. import string
  3. import zipfile
  4. from selenium import webdriver
  5. from selenium.webdriver.chrome.service import Service
  6. targetURL = "http://myip.ipip.net" # 访问的目标站点
  7. proxyHost = "61.171.76.145" # 代理IP地址
  8. proxyPort = "50353" # 代理IP端口号
  9. authKey = "x" # 代理IP的AuthKey
  10. password = "x" # 代理IP的AuthPwd
  11. def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http',
  12. plugin_path=None):
  13. if plugin_path is None:
  14. plugin_path = r'./{}_{}_qgnet_proxyauth_plugin.zip'.format(proxy_username, proxy_password)
  15. manifest_json = """
  16. {
  17. "version": "1.0.0",
  18. "manifest_version": 2,
  19. "name": "Chrome Proxy",
  20. "permissions": [
  21. "proxy",
  22. "tabs",
  23. "unlimitedStorage",
  24. "storage",
  25. "",
  26. "webRequest",
  27. "webRequestBlocking"
  28. ],
  29. "background": {
  30. "scripts": ["background.js"]
  31. },
  32. "minimum_chrome_version":"22.0.0"
  33. }
  34. """
  35. background_js = string.Template(
  36. """
  37. var config = {
  38. mode: "fixed_servers",
  39. rules: {
  40. singleProxy: {
  41. scheme: "${scheme}",
  42. host: "${host}",
  43. port: parseInt(${port})
  44. },
  45. bypassList: ["localhost"]
  46. }
  47. };
  48. chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
  49. function callbackFn(details) {
  50. return {
  51. authCredentials: {
  52. username: "${username}",
  53. password: "${password}"
  54. }
  55. };
  56. }
  57. chrome.webRequest.onAuthRequired.addListener(
  58. callbackFn,
  59. {urls: [""]},
  60. ['blocking']
  61. );
  62. """
  63. ).substitute(
  64. host=proxy_host,
  65. port=proxy_port,
  66. username=proxy_username,
  67. password=proxy_password,
  68. scheme=scheme,
  69. )
  70. with zipfile.ZipFile(plugin_path, 'w') as zp:
  71. zp.writestr("manifest.json", manifest_json)
  72. zp.writestr("background.js", background_js)
  73. return plugin_path
  74. if __name__ == '__main__':
  75. # 此处指定您的webdriver路径,版本需要跟您所使用的Chrome版本一致,
  76. # 下载地址https://registry.npmmirror.com/binary.html?path=chromedriver/
  77. driver_location = "./chromedriver/chromedriver_v106_win.exe"
  78. proxy_auth_plugin_path = create_proxy_auth_extension(
  79. proxy_host=proxyHost,
  80. proxy_port=proxyPort,
  81. proxy_username=authKey,
  82. proxy_password=password)
  83. option = webdriver.ChromeOptions()
  84. option.add_argument("--start-maximized") # 窗口最大化运行
  85. option.add_extension(proxy_auth_plugin_path) # 添加proxy插件
  86. # 此处selenium版本为4.8.0
  87. driver = webdriver.Chrome(service=Service(driver_location), options=option)
  88. driver.get(targetURL)
  89. time.sleep(100)
  90. driver.quit()
  • 运行结果
Python自动化测试Selenium+chrome连接代理ip(白名单模式)

此示例Python使用Selenium调用Chrome浏览器并通过代理进行自动化测试。

  • 代码示例
  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.service import Service
  3. targetURL = "http://myip.ipip.net" #访问的目标站点
  4. proxyAddr = "您的代理IP:端口号"
  5. if __name__ == '__main__':
  6. browser_location = r".\Chrome\chrome.exe" #指定浏览器路径位置
  7. driver_location = r".\Chrome\chromedriver.exe" #指定Driver路径位置
  8. option = webdriver.ChromeOptions()
  9. option.binary_location = browser_location #设置浏览器位置
  10. option.add_argument("--start-maximized") #窗口最大化运行
  11. option.add_argument('--proxy-server=%(server)s' % {"server": proxyAddr})
  12. driver = webdriver.Chrome(service=Service(driver_location), options=option)
  13. driver.get(targetURL)
  14. print(driver.page_source)
  • 运行结果

隧道代理(固定时长)python语言代码示例
  1. import base64
  2. import time
  3. import requests
  4. from requests.adapters import HTTPAdapter
  5. auth_key = "请改成您的Key"
  6. password = "请改成您的AuthPwd"
  7. tunnel_server = "http://请改成您的隧道地址" # 如:tunnel3.qg.net:19263
  8. target_url = "https://ip.cn/api/index?ip=&type=0" # 要访问的目标地址
  9. proxy_headers = {}
  10. proxy = {
  11. "http": tunnel_server,
  12. "https": tunnel_server
  13. }
  14. def encode_authorization(key, passwd):
  15. # python 使用 bytes 类型进行 base64 编码
  16. basic_str = bytes("%s:%s" % (key, passwd), "ascii")
  17. # 得到的返回值也是 bytes 类型,所以需要再 decode 为字符串
  18. return "Basic %s" % base64.b64encode(basic_str).decode("utf-8")
  19. def reset_tunnel_proxy_headers():
  20. global proxy_headers
  21. proxy_headers = {
  22. tunnel_server: {
  23. "Proxy-Authorization": encode_authorization(auth_key, password)
  24. }
  25. }
  26. def update_tunnel_proxy_headers(key, val):
  27. global proxy_headers
  28. proxy_headers[tunnel_server][key] = val
  29. def new_session():
  30. adapter = TunnelProxyAdapter()
  31. se = requests.Session()
  32. se.mount('https://', adapter)
  33. se.mount('http://', adapter)
  34. return se
  35. class TunnelProxyAdapter(requests.adapters.HTTPAdapter):
  36. def proxy_headers(self, p):
  37. if p in proxy_headers:
  38. print("session with headers:", proxy_headers[p])
  39. return proxy_headers[p]
  40. else:
  41. return None
  42. def multi_channel_tunnel():
  43. """
  44. 结果类似:
  45. request on multi channel
  46. request id: 1 , channel id: channel-1, code: 200, result: 183.155.88.224
  47. request id: 2 , channel id: channel-2, code: 200, result: 125.112.38.153
  48. request id: 3 , channel id: channel-3, code: 200, result: 183.155.89.125
  49. request id: 4 , channel id: channel-4, code: 200, result: 49.71.121.169
  50. request id: 5 , channel id: channel-5, code: 200, result: 115.210.67.220
  51. request id: 6 , channel id: channel-6, code: 200, result: 36.25.41.178
  52. request id: 7 , channel id: channel-7, code: 200, result: 180.125.162.116
  53. request id: 8 , channel id: channel-8, code: 200, result: 140.250.150.158
  54. request id: 9 , channel id: channel-9, code: 200, result: 121.227.102.227
  55. request id: 10, channel id: channel-10, code: 200, result: 49.88.106.198
  56. request id: 1 , channel id: channel-1, code: 200, result: 183.155.88.224
  57. request id: 2 , channel id: channel-2, code: 200, result: 125.112.38.153
  58. request id: 3 , channel id: channel-3, code: 200, result: 183.155.89.125
  59. request id: 4 , channel id: channel-4, code: 200, result: 49.71.121.169
  60. request id: 5 , channel id: channel-5, code: 200, result: 115.210.67.220
  61. request id: 6 , channel id: channel-6, code: 200, result: 36.25.41.178
  62. request id: 7 , channel id: channel-7, code: 200, result: 180.125.162.116
  63. request id: 8 , channel id: channel-8, code: 200, result: 140.250.150.158
  64. request id: 9 , channel id: channel-9, code: 200, result: 121.227.102.227
  65. request id: 10, channel id: channel-10, code: 200, result: 49.88.106.198
  66. """
  67. print("request on multi channel")
  68. reset_tunnel_proxy_headers()
  69. for i in range(1, 11):
  70. se = new_session()
  71. chan_id = "channel-%s" % i
  72. update_tunnel_proxy_headers("Proxy-TunnelID", chan_id)
  73. resp = se.get(target_url, proxies=proxy, headers={"Connection": "close"})
  74. print("request id: %-2s, channel id: %s, code: %s, result: %s" % (i, chan_id, resp.status_code, resp.text))
  75. time.sleep(10)
  76. # 因为固定时长为1分钟,所以在1分钟内继续使用已有通道,仍是之前的IP
  77. for i in range(1, 11):
  78. se = new_session()
  79. chan_id = "channel-%s" % i
  80. update_tunnel_proxy_headers("Proxy-TunnelID", chan_id)
  81. resp = se.get(target_url, proxies=proxy, headers={"Connection": "close"})
  82. print("request id: %-2s, channel id: %s, code: %s, result: %s" % (i, chan_id, resp.status_code, resp.text))
  83. if __name__ == "__main__":
  84. multi_channel_tunnel()

客户热线:4007-567-365

客户服务中心
点击联系微信客服