一般服务器都无法多次更换IP,脚本在同一个IP下运行过多,就会导致黑IP,脚本就无法正常运行,要么更换IP,要么给青龙面板配置上代理。例如京东农场。

2023年5月9日更新

这里的全局代理类型为HTTP/HTTPS代理池
前提:已搭建docker

一:搭建代理池教程

1、创建并运行代理池docker

docker run -dit \
--name DaiLiC \`# DaiLiC是容器名`
--hostname auto-proxy-pool \`# 主机名`
--network bridge \`# 容器网络类型`
--restart always \`# 开机自启`
-p 8080:8080 \`# 端口映射,"主机端口:容器端口"`
-v /root/auto-proxy-pool:/run/data \`# 映射目录:配置文件的主机挂载目录`
--privileged=true \
mzzsfy/auto-proxy-pool:latest

第一个8080可修改,防止已占用,记得开放对应的端口防火墙

更新容器命令(通用,改容器名,我的是DaiLiC)

docker run --rm     -v /var/run/docker.sock:/var/run/docker.sock     containrrr/watchtower -c     --run-once DaiLiC

2、配置proxy.yml文件
运行后root/auto_proxy_pool会生成proxy.template.yml文件(该文件每次重启都会被覆盖)
将文件改名为proxy.yml,只需要替换你代理网站提取的代理链接apiUrl即可

#频道&教程: https://t.me/autoProxyPool/2

########################################
#    配置中带有default前缀的都能被覆盖     #
########################################

#!!!!!!!!!!请将本文件改名为proxy.yml,本文件每次重启都会被覆盖!!!!!!!!!!
#!!!!!!!!!!请将本文件改名为proxy.yml,本文件每次重启都会被覆盖!!!!!!!!!!
#!!!!!!!!!!请将本文件改名为proxy.yml,本文件每次重启都会被覆盖!!!!!!!!!!
#!!!!!!!!!!请将本文件改名为proxy.yml,本文件每次重启都会被覆盖!!!!!!!!!!

#是否解密https,不解密https无法获取请求内容,解密则需要安装根证书
decryptHttps: false
#是否默认拦截请求
#defaultBlack: false
#检查代理是否可用url,要求:get请求,http状态码100-399,可填写多个用','分隔
defaultCheckUrl: http://baidu.com
#代理多久检查一次是否有效
#proxyCheckInterval: 1500ms
#检查上游是否有效超时时间
defaultCheckTimeout: 3s
#默认重复check次数
defaultCheckRetryNumber: 3
#重试check前等待时间
defaultCheckRetryWait: 200ms
#默认使用的代理名称,不配置则不使用
defaultProxy: proxy1
#默认用作匹配的ck
#defaultProxyCk: ck1
#启用日志等级
#logLevel: debug
#没有使用代理时的日志等级
#noProxyLogLevel: debug
#黑名单时日志等级
#blackLogLevel: debug
#白名单时日志等级
#whiteLogLevel: debug
#信息详细程度等级,规则个位为请求详细程度,越大越详细,十位为返回结果详细程度,越大约详细
#infoLevel: 1
#启动时输出实际生效的配置,请求路径/help/showConfig也能查看
#showConfig: true

#服务相关一些配置
server:
    #服务端口
    port: 8080
    #本服务读超时
    readTimeout: 30s
    #本服务写超时,秒
    writeTimeout: 30s

#设置本代理池的密码
#users: 
#    username: password

#核心配置
changeRequest:
    
    # 支持多项,从上到下匹配
    ###########################################################################
    # !!!!!!!!未配置decryptHttps:true 遇到https只能匹配host其他匹配将不生效!!!!!!!!!!
    # !!!!!!!!未配置decryptHttps:true 遇到https只能匹配host其他匹配将不生效!!!!!!!!!!
    # !!!!!!!!未配置decryptHttps:true 遇到https只能匹配host其他匹配将不生效!!!!!!!!!!
    # !!!!!!!!未配置decryptHttps:true 遇到https只能匹配host其他匹配将不生效!!!!!!!!!!
    ###########################################################################
    # 目前为或者关系,只要匹配其中一项就生效,后续会改为与关系,有填写的全部匹配才生效
    # 匹配host的正则,性能最高
    - hostRegex: .+\.jd\.com
        #匹配完整url正则,携带参数,功能最全
        #urlRegex: https://.+\.baidu\.com\?.+
        #匹配路径正则
        #pathRegex:/path
        #参数匹配正则
        #paramsRegex:
        #支持多项,写了就会去匹配,如果没有该参数会使用空字符串匹配,后续看是否需要优化
        #name: 正则
        #headersRegex
        #支持多项,写了就会去匹配,如果没有该参数会使用空字符串匹配,后续看是否需要优化
        #name: 正则
        #cookiesRegex
        #支持多项,写了就会去匹配,如果没有该参数会使用空字符串匹配,后续看是否需要优化
        #name: 正则
        
        #使用哪一个代理,这样写会尝试按顺序从proxy1取2次,然后去proxy2取一次,按最先取到有效计算
      proxy: proxy1
        #是否放行,true直接屏蔽该请求
      black: false
        #用来做上游匹配的ck,当ck值一致时会分配到同一上游,https需要配置decryptHttps:true
      #proxyCk: xxxx
        #该规则的日志等级
        #logLevel: debug
        #是否记录未知大小的jsonBody
        #logUnknownSizeBody: true
        
        #拦截指定路径
    #- pathRegex: /xxxx
    #  black: true
        
        #带有test 这个header的单独指定上游为proxy2
   # - headersRegex:
          #test: test
        #指定上游
      #proxy: proxy1
upstream:
    proxy1:
        #请求url,只能为get请求,要求返回为json
        apiUrl: http://api2.xkdaili.com/tools/XApi.ashx?apikey= #这里的链接替换成自己代理链接,见第3步、购买代理,提取的apiUrl
        #api重试超时,最多共重试10秒
        apiRetryTimeout: 10s
        #api重试次数,最多重试3次
        apiRetryNumber: 3
        #go template语法,内置函数 https://masterminds.github.io/sprig/,一次返回多个使用换行符分隔
        #json例子
        template: '{{$x := regexFindAll "\\d{1,3}(\\.\\d{1,3}){3}:\\d{2,5}" . -1}}{{range $s := $x}}{{printf "http://%s" $s}}{{end}}'
        #文本例子
        #template: '{{$x := regexFindAll "\\d{1,3}(\\.\\d{1,3}){3}:\\d{2,5}" . -1}}{{range $s := $x}}{{printf "http://%s\n" $s}}{{end}}'
        #获取到的上游多久后失效,单位:秒,-1不自动生效
        lifecycle: -1
        #保留几个上游,
        maxSize: 4
        #指定该代理检验是否有效url,可填写多个用','分隔
        checkUrl: http://jd.com/,http://baidu.com,http://bilibili.com
        #检验次数,防止误检测
        checkRetryNumber: 2
        #检验重试前等待时间
        checkRetryWait: 500ms
        #请求间隔,在这个时间内只会请求一次api
        requestInterval: 1000ms
        #使用该代理时的日志等级
        #logLevel: warn
    #proxy2:
        #固定为同一上游
        #template: 'http://xxx'

3、购买代理,提取apiUrl
提供一个代理购买地址:
星空代理 每日签到送 100 IP。
进入-订单管理-API提取/生成API-生成API链接-复制生成后的API链接填入配置文件proxy.yml的apiUrl的冒号后面。
提取格式如下:
api代理获取设置:
读取数量选择: 1
读取格式:txt
分 隔 符:换行(\n)
配置好后重启即可

二:青龙配置代理

1、Python设置代理
1.1、局部代理

proxies = {"http":"http://ip:port","https":"http://ip:port"}
requests.get(url,proxies=proxies)

1.2、全局代理
我们只需要在青龙的config.sh文件添加http_proxy、https_proxy环境变量即可:

//仅支持http代理
export GLOBAL_AGENT_HTTP_PROXY="http://ip:port"
//支持http和https代理
export GLOBAL_AGENT_HTTPS_PROXY="http://ip:port"

2、JavaScript设置代理
JavaScript脚本并不像Python那样默认使用系统代理变量,如果需要使用代理进行请求,那只能在代码中设置。
2.1、nodejs中安装global-agent依赖
2.2、局部代理
在需要用代理的js脚本开头加入一行代码:

require('global-agent/bootstrap');
global.GLOBAL_AGENT.HTTP_PROXY="http://ip:port";

2.3、全局代理
我们只需要在青龙的config.sh文件添加GLOBAL_AGENT_HTTP_PROXY、GLOBAL_AGENT_HTTPS_PROXY环境变量即可:

//仅支持http代理
export GLOBAL_AGENT_HTTP_PROXY="http://ip:port"
//支持http和https代理
export GLOBAL_AGENT_HTTPS_PROXY="http://ip:port"

0