You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cURL可正常访问但Ruby Mechanize无法获取目标页面问题排查

解决Mechanize爬取校园网站未返回登录页的问题

嘿,我来帮你排查这个问题!你的curl命令能正常拿到登录页,但Mechanize脚本不行,大概率是因为网站的反爬机制识别了Mechanize的默认请求特征,下面是几个最可能的原因和对应的修复方案:

1. 缺少浏览器风格的User-Agent

很多网站会检查请求的User-Agent(UA)字段,Mechanize默认的UA是类似Mechanize/2.8.5 Ruby/3.2.2的标识,很容易被判定为爬虫;而curl默认的UA是curl/[版本号],可能没被网站拦截。

你可以手动设置一个主流浏览器的UA来模拟正常访问:

require 'mechanize'
agent = Mechanize.new
# 设置Chrome浏览器的User-Agent(可以替换成你常用浏览器的UA)
agent.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
page = agent.get('https://kampus.izu.edu.tr')
# 打印页面标题验证是否拿到登录页
puts page.title

2. 未正确处理元刷新跳转

有些网站会通过<meta http-equiv="refresh"...>标签跳转登录页,Mechanize默认没有启用跟随这类跳转的设置,你可以手动开启:

agent.follow_meta_refresh = true

3. 补充缺失的请求头字段

除了UA,网站可能还会检查Accept、Accept-Language等请求头,你可以把curl默认的这些字段补充到Mechanize中:

agent.request_headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
agent.request_headers['Accept-Language'] = 'tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7'

你可以先从设置User-Agent开始尝试,这是解决这类问题最常见的方法。如果还是不行,可以对比curl和Mechanize的请求头差异,把缺失的字段都补充进去。

内容的提问来源于stack exchange,提问作者Bilal Ünal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:35:08