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

PHP抓取Investing.com全球主要指数实时数据存在延迟问题求助

问题原因及解决方案

原因分析

  • 请求方式错误:你用POST请求访问该页面,但该页面正常通过GET加载。服务器收到不符合预期的POST请求时,可能返回缓存的历史数据而非实时内容。同时你设置的Content-type头是表单提交专用,对GET请求完全多余,会导致请求被识别为异常。

  • 请求头缺失:你的请求没有模拟浏览器的User-Agent、Accept等关键标识,被服务器判定为非浏览器请求后,返回缓存的静态快照,而非实时更新的数据。

  • 动态数据加载机制:该网站的实时指数数据并非嵌入初始HTML,而是页面加载后通过JavaScript异步调用API获取的。file_get_contents只能抓取初始静态HTML,其中仅包含页面加载时的历史数据,无法获取JS动态加载的实时内容。

  • 服务器缓存策略:网站对非浏览器请求启用了更长的缓存周期,返回的是之前生成的页面副本,而非实时数据。

解决方案

  1. 修正请求配置
    将请求方式改为GET,并添加模拟浏览器的请求头,示例代码:

    $url = "https://www.investing.com/indices/major-indices";
    
    $options = array(
        'http' => array(
            'header' => "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\r\n" .
                        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n",
            'method' => 'GET'
        )
    );
    
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    

    注:即使修正,仍可能无法获取实时数据,因为核心数据是动态加载的。

  2. 直接调用实时数据API
    打开浏览器开发者工具(F12),切换到「网络」标签,刷新页面后筛选XHR/Fetch请求,找到获取指数实时数据的API接口,直接请求该接口即可拿到准确的实时数据,这是最高效的方式。

  3. 使用无头浏览器渲染页面
    如果需要获取完整的渲染后页面内容,可以使用PHP无头浏览器库(如spatie/browsershot),模拟浏览器加载并执行JavaScript,从而获取包含实时数据的页面内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:20:33