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

使用PHP Curl访问文件持续出现403错误求助

解决PHP Curl访问Cloudflare防护下JSON文件返回403 Forbidden的问题

你遇到的问题是Cloudflare的安全机制识别出Curl请求为非浏览器请求,从而返回403拦截。浏览器能正常访问是因为它发送了完整的请求头信息,而你的Curl请求头过于简单,触发了Cloudflare的防护规则。

以下是可行的解决方法:

  • 模拟完整浏览器请求头:Cloudflare会验证请求中的多个头字段,仅设置User-Agent不够,需要补充Accept、Accept-Language、Referer等常见浏览器头。
  • 启用Cookie存储:部分Cloudflare验证流程会通过Cookie记录会话状态,需要让Curl保存并复用Cookie。
  • 跟随跳转:Cloudflare可能会先跳转至验证页面,需要开启Curl的自动跟随跳转功能。
  • 处理SSL验证:确保Curl能正确处理目标网站的SSL证书。

修改后的代码示例:

$url = "https://example.com/pub/media/sample.json";

// 初始化Curl会话
$ch = curl_init($url);

// 设置基础选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随跳转
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // 保存Cookie到本地文件
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // 读取本地Cookie发送请求

// 设置模拟浏览器的请求头
$headers = [
    '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',
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language: en-US,en;q=0.5',
    'Accept-Encoding: gzip, deflate, br',
    'Referer: https://example.com/', // 填写目标网站的首页或关联页面
    'Connection: keep-alive',
    'Upgrade-Insecure-Requests: 1'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// 可选:若网站SSL证书存在验证问题,可临时关闭验证(不建议长期使用)
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$result = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

$status = ($code == 200) ? true : false;

if ($status){
    echo 'success';
    // 可在此处理返回的JSON数据
    // $data = json_decode($result, true);
} else {
    echo $code . ' My File Error ' . $url;
}

关键修改说明:

  1. 请求头补充:使用真实Chrome浏览器的User-Agent和其他常见头字段,让请求行为更接近普通浏览器。
  2. Cookie处理:通过CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE保存并复用Cookie,应对Cloudflare的会话验证逻辑。
  3. 跟随跳转:CURLOPT_FOLLOWLOCATION确保自动处理Cloudflare可能触发的验证跳转。

如果仍然出现403,可能是遇到了Cloudflare的人机验证(如CAPTCHA),这种情况下需要使用支持JS渲染的工具(如Puppeteer)来绕过,但对于大部分基础防护,上述修改即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:15:04