船说 CMS 采集代理 IP 怎么配置
照着这篇做完,你能给船说 CMS 的采集模块接上代理 IP,让采集请求从代理服务器出去,不再因为本机 IP 被目标站封掉而采不到数据。
第一步:先确认你的船说 CMS 有没有内置代理入口
这一步要判断后台是否自带代理配置项,它决定你后面走「点界面」还是「改代码」两条完全不同的路。
登录后台(默认入口一般是 /admin 或 /admin.php),看左侧菜单,常见路径是「采集」→「采集节点管理」(有的版本写「内容采集」「采集管理」)。点进任意一个节点的编辑页,往下滚动找「采集设置」或「高级设置」区块,看里面有没有名字带「代理」的输入框,比如「代理服务器地址」「代理 IP」「Proxy」。
- 找得到这个框 → 走第二步、第三步。
- 找不到 → 直接跳到第五步,改采集核心文件。
注意:船说 CMS 有几个不同发行版本,菜单名不完全一致(v1.x 常见「采集节点管理」,部分 v2.x 改成「采集任务」),以你后台实际显示的文字为准,别硬套。
第二步:先把一个能用的代理验证好
这一步要拿到一个格式正确、且此刻真的能通的代理,格式写错是后面采集全失败的罪魁祸首。
代理有两种写法,记清楚:
- HTTP 代理:
http://1.2.3.4:8888 - 带账号密码:
http://用户名:密码@1.2.3.4:8888
在服务器上先手动测一次:
curl -x http://用户名:密码@1.2.3.4:8888 -I https://你要采集的站.com --max-time 15
看到 HTTP/1.1 200 或 301/302 才算通。返回 Could not resolve proxy 是地址写错,Connection timed out 是 IP 已失效或端口被墙。
注意:密码里如果含
@、#、:这些符号,必须做 URL 编码,否则 PHP 解析代理地址时会从错误的位置切开,表现出来就是「配置没错但一直连不上」。
第三步:在采集节点里填代理
这一步把上一步验证过的代理写进配置,填完保存即可生效。
在第二步找到的那个「代理服务器地址」输入框里,粘贴完整的 http://用户名:密码@1.2.3.4:8888,不要只填 IP 和端口。旁边如果有「代理超时」填 15~30(秒),「代理类型」选 HTTP(除非你用的是 SOCKS5,那就选 SOCKS5 并把地址写成 socks5://1.2.3.4:1080)。保存后回到采集页点「测试采集」或「采集一次」。
第四步:分清全局代理和单节点代理
这一步是为了避免你只给一个节点配了代理,别的节点还在用本机 IP 裸奔。
如果后台「系统」→「系统设置」→「采集设置」里有代理项,那是全局代理,所有采集节点都走它;节点编辑页里的代理项通常优先级更高,会覆盖全局值。想统一管理就只配全局,想分站分代理就逐个节点配。
第五步:后台没有代理入口,改采集核心文件
这一步针对的是后台完全不提供代理选项的版本,靠改代码实现。
用 SFTP 或宝塔面板的文件管理器进网站根目录,在 /includes/、/app/ 或 /extend/ 下搜索关键词 curl_setopt,找到采集请求那段函数(文件名常含 collect、spider、caiji)。在 curl_setopt($ch, CURLOPT_URL, ...) 后面补三行:
curl_setopt($ch, CURLOPT_PROXY, 'http://1.2.3.4:8888');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, '用户名:密码');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
注意:如果采集代码用的是
file_get_contents()而不是 cURL,加 cURL 参数完全无效,必须把请求方式换成 cURL,否则你会怀疑人生。
第六步:接代理池做自动轮换
单 IP 代理跑久了照样会被封,这一步让它每次请求换一个。
在同目录建 proxies.txt,一行一个代理地址。在采集函数里替换成:
$list = file(__DIR__ . '/proxies.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$proxy = $list[array_rand($list)];
curl_setopt($ch, CURLOPT_PROXY, $proxy);
如果你买的是「提取型 API」,就改成每次请求前 file_get_contents($apiUrl) 拉一个新鲜 IP。
第七步:测试与排错
这一步确认整条链路真的通了。
后台点「采集测试」采一条内容,成功即配置正确。失败时按顺序查:PHP 错误日志(宝塔面板「网站」→「错误日志」,或 /www/wwwlogs/站点名.error.log)、代理是否过期、目标站是否需要 Cookie。
注意:开了代理以后,图片下载、验证码识别、回调通知这些请求可能一起走代理,如果图片采不回来,去采集设置里把「图片本地化」的代理单独关掉。
小结
- 先确认后台有无「代理服务器地址」输入框,决定走界面还是改代码。
- 代理格式必须是
http://用户名:密码@IP:端口,密码含特殊符号要 URL 编码。 - 配置前先用
curl -x在服务器上单独验证代理可用。 - 采集代码若是
file_get_contents(),加 cURL 代理参数无效,必须先换成 cURL。 - 多 IP 轮换用
proxies.txt+array_rand(),别长期用单一代理。 - 出错优先看 PHP 错误日志,而不是反复改配置。
原文链接:https://www.gj0.com/thread-1223.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。