Perl Mojo::UserAgent检测网站连通性被Cloudflare拦截报错
问题说明
使用Perl的Mojo::UserAgent模块编写网站连通性校验脚本,指定检测目标为https://www.aba.com,脚本运行后返回Failed Service Temporarily Unavailable错误,排查确认触发了Cloudflare防护机制,默认配置下的Mojo::UserAgent请求被拦截,无法完成连通性校验。
原检测代码如下:
use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; my $timeout = $ua->request_timeout; $ua = $ua->request_timeout(10); my $res = $ua->get('https://www.aba.com')->result; if ($res->is_success) { print 'Success' } elsif ($res->is_error) { print 'Failed ' . $res->message } elsif ($res->code == 301) { print 'Redirect Success ' . $res->headers->location } else { print 'Manual Check Required URL...' }
根因分析
Cloudflare防护默认会对请求的客户端特征做校验,Mojo::UserAgent发起请求时默认携带的User-Agent、请求头字段和真实浏览器存在明显差异,会被识别为自动化脚本流量直接拦截,返回503服务不可用响应。
修复方案
调整Mojo::UserAgent的请求配置,模拟真实浏览器的请求特征,绕过基础防护校验,核心修改点:
- 替换默认User-Agent为主流桌面浏览器的UA标识
- 补全真实浏览器访问时会携带的常规请求头字段
- 开启自动重定向跟随,适配站点的跳转逻辑
修改后的可用代码:
use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; # 配置10秒请求超时 $ua->request_timeout(10); # 配置最多自动跟随5次重定向 $ua->max_redirects(5); # 构造请求并补全Chrome浏览器标准请求头 my $tx = $ua->build_tx(GET => 'https://www.aba.com'); $tx->req->headers->header( 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' ); $tx->req->headers->header( 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' ); $tx->req->headers->header( 'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8' ); $tx->req->headers->header('Accept-Encoding' => 'gzip, deflate, br'); $tx->req->headers->header('Connection' => 'keep-alive'); $tx->req->headers->header('Upgrade-Insecure-Requests' => '1'); my $res = $ua->start($tx)->result; if ($res->is_success) { print 'Success' } elsif ($res->is_error) { print 'Failed ' . $res->message } elsif ($res->code == 301) { print 'Redirect Success ' . $res->headers->location } else { print 'Manual Check Required URL...' }
补充说明
- 以上方案仅可绕过Cloudflare基础防护规则,如果目标站点开启了强制JS挑战、人机验证码等高等级防护,仅修改请求头无法完成校验,需要使用真实浏览器自动化工具(如Playwright、Selenium)发起请求
- 连通性校验过程中需控制请求频率,高频访问同样会触发Cloudflare的限流拦截规则
- 建议定期更新使用的User-Agent值,老旧版本浏览器的UA同样可能被防护规则拦截
内容的提问来源于stack exchange,提问作者Rajeshkanna Purushothaman
相关产品推荐
相关产品推荐

