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

使用file_get_contents抓取页面为何始终返回目标站点首页内容?

问题原因及解决方案

核心触发原因

  • 站点HTTP重定向规则不标准:你用HTTP协议请求HTTPS站点时,站点没有按照路径做301/302跳转,而是将所有HTTP请求统一重定向到HTTPS首页,这是最高概率的诱因,你之前认为该因素不是问题根源的判断有误。
  • 请求头校验不通过:file_get_contents默认发送的请求头字段极少,站点校验User-Agent、Referer、Accept等常规浏览器请求头,判定为爬虫请求后统一返回首页内容。
  • Cookie会话校验缺失:站点首次访问会下发会话Cookie,后续访问内页需要携带对应Cookie,file_get_contents默认不会自动存储、携带请求返回的Cookie,导致所有请求都被判定为首次访问,返回首页。
  • 反爬策略拦截:站点识别到请求来源为非浏览器环境,或者服务器IP被临时限制,统一返回首页响应。

排查解决步骤

  1. 优先将请求URL替换为HTTPS协议地址,不要使用HTTP请求HTTPS站点,先排除重定向规则问题。
  2. 为file_get_contents自定义HTTP上下文,补全常规请求头,参考代码如下:
// 构造自定义请求上下文
$context = stream_context_create([
    'http' => [
        'method' => 'GET',
        'header' => [
            'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
            'Referer: https://www.american-cosmograph.fr/',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
        ],
        'follow_location' => 1,
        'max_redirects' => 3
    ],
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false
    ]
]);

// 用HTTPS地址发起请求
$targetUrl = 'https://www.american-cosmograph.fr/seances.html?view=seances&week=2021-10-11';
$content = file_get_contents($targetUrl, false, $context);
  1. 若上述方法无效,改用cURL扩展发起请求,开启Cookie自动处理和请求日志输出,可以更清晰的查看完整请求链路,定位重定向、拦截类问题。

内容的提问来源于stack exchange,提问作者Etienne Delcambre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:39:04