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

使用cURL下载AWS存储的摄像头图片时遭遇Access Denied问题

解决cURL访问摄像头图片返回Access Denied的问题

我来帮你搞定这个问题——你碰到的Access Denied,大概率是目标服务器做了请求头校验。很多公共资源网站会检查请求的User-Agent、Referer这类字段,判断请求是否来自合法的浏览器环境,而默认的cURL请求不带这些头,自然会被拒绝。

先看你的代码,默认的cURL请求标识是curl/[版本号],一眼就能被识别为非浏览器请求,我们只需要添加必要的请求头模拟浏览器访问就行。

修改后的可运行代码

<?php
$url = 'http://s3-us-west-2.amazonaws.com/alertwildfire-data-public/Axis-CupertinoHills/latest_full.jpg';
$ch = curl_init();

// 模拟浏览器的请求头,让服务器认为是合法访问
$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',
    'Referer: http://www.alertwildfire.org/index.html' // 带上原页面的来源标识
];

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 注入请求头
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动处理可能的重定向

$data = curl_exec($ch);

// 新增错误排查逻辑,方便后续调试
if(curl_errno($ch)) {
    echo 'Curl请求错误: ' . curl_error($ch);
    exit;
}

header('Content-type: image/jpeg');
echo $data;
curl_close($ch);
?>

关键修改点说明

  • 添加User-Agent头:模拟主流浏览器的身份标识,让服务器认为这是正常的浏览器请求
  • 添加Referer头:告诉服务器这个请求来自alertwildfire的官方页面,符合资源的访问上下文
  • 开启CURLOPT_FOLLOWLOCATION:如果目标URL存在重定向,cURL会自动跟随跳转,避免因重定向导致的访问失败

你也可以先在命令行用cURL测试验证,确认头设置有效:

curl -H "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" -H "Referer: http://www.alertwildfire.org/index.html" http://s3-us-west-2.amazonaws.com/alertwildfire-data-public/Axis-CupertinoHills/latest_full.jpg -o test.jpg

如果能成功下载test.jpg,说明头设置没问题,放到PHP代码里就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:27:30