PHP获取重定向图片URL内容遇403错误,求解决办法
问题分析与解决方案
403 Forbidden 错误的核心原因是目标服务器识别出你的请求并非来自正常浏览器,脚本默认的请求头与浏览器差异过大,触发了反爬或访问限制机制。以下是具体解决方法:
关键修复:模拟浏览器请求头
浏览器访问时会携带一系列标识自身的请求头,服务器会依赖这些头判断请求合法性。你需要在脚本中复刻这些字段,重点是 User-Agent,这是最容易被拦截的字段。
修改后的cURL代码
$url = trim($fileUrl); $ch = curl_init(); // 模拟Chrome浏览器的完整请求头(可根据实际浏览器请求调整) $headers = [ 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding: gzip, deflate, br', 'Connection: keep-alive', 'Upgrade-Insecure-Requests: 1' ]; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 注入模拟请求头 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回内容而非直接输出 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 临时跳过SSL验证(生产环境建议开启) curl_setopt($ch, CURLOPT_ENCODING, 'gzip, br'); // 支持压缩,与浏览器行为一致 // 若目标网站需要会话Cookie,复制浏览器中的Cookie内容填入 // curl_setopt($ch, CURLOPT_COOKIE, 'session_id=xxx; user_token=xxx'); $res = curl_exec($ch); // 可选:排查curl执行错误 // if(curl_errno($ch)){ // echo 'Curl错误信息: ' . curl_error($ch); // } curl_close($ch); dd($res);
额外排查方向
- 完全复刻浏览器请求头:打开浏览器F12开发者工具,访问目标URL后在Network面板复制完整请求头,直接替换脚本中的
$headers数组,确保100%一致。 - Cookie验证:如果网站需要登录或会话验证,需将浏览器中对应的Cookie字段复制到
CURLOPT_COOKIE参数中。 - IP封禁检查:若上述操作无效,可能是你的服务器IP被目标网站拉黑,需更换IP或使用代理请求。
内容的提问来源于stack exchange,提问作者Shaho
相关产品推荐
相关产品推荐

