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

使用PHP爬取网页出现error code:1020错误,求代码问题排查方案

问题排查及修复方案

1. error code 1020 报错原因

该站点接入了Cloudflare安全防护,你直接使用file_get_contents发起裸请求,缺少User-Agent等常规浏览器请求头,会被Cloudflare判定为爬虫行为直接拦截,因此返回1020错误。

2. 现有代码的语法&逻辑错误

你写的preg_replace调用存在明显参数错误:

  • preg_replace的参数顺序为「正则规则」「替换规则」「待处理字符串」,你的代码把第二个参数和第三个参数的分隔符写成了.(字符串拼接符),而非逗号,相当于直接把$1和$initial拼接作为替换值,没有传入待处理的目标字符串参数,逻辑完全走不通。
  • 用正则匹配HTML节点稳定性极差,页面结构稍有变动就会匹配失败,更推荐用DOM解析器提取字段。

3. 修复后的可运行参考代码

// 构造请求头,模拟普通浏览器请求,绕过Cloudflare基础拦截
$context = stream_context_create([
    'http' => [
        'header' => [
            'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
        ]
    ]
]);

$initial = file_get_contents('https://v2.gcchmc.org/medical-status-search/', false, $context);
if ($initial === false) {
    die('页面请求失败');
}

// 用DOM解析提取csrfmiddlewaretoken值
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 屏蔽HTML不规范导致的报错
$dom->loadHTML($initial);
libxml_clear_errors();

$xpath = new DOMXPath($dom);
$tokenNode = $xpath->query('//input[@name="csrfmiddlewaretoken"]')->item(0);
if ($tokenNode) {
    $csrfToken = $tokenNode->getAttribute('value');
    echo $csrfToken;
} else {
    echo '未找到csrf字段';
}

额外说明

如果添加请求头后依然返回1020错误,说明站点开启了Cloudflare的人机验证机制,普通请求无法直接绕过,需要使用无头浏览器等方案模拟真实用户操作才能获取页面内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:05