PHP爬虫采集的图片链接直接访问正常但HTML img标签无法加载怎么办?
问题原因
该问题由图片源站的防盗链校验机制触发导致,具体逻辑如下:
- 直接在浏览器地址栏访问图片链接时,请求携带的
Referer请求头为空,Yupoo的防盗链规则允许空Referer的请求,因此可以正常获取图片资源。 - 图片嵌入你自己站点的
<img>标签加载时,浏览器会自动在请求头中携带你当前站点的域名作为Referer值,源站校验发现该域名不在白名单范围内,直接拒绝返回正常图片,转而返回占位图或403状态码。
可落地解决方案
方案1:单标签临时绕过
直接给对应的<img>标签添加referrerpolicy属性,指定加载该图片时不携带Referer:
<img alt="ecommerce" src="https://photo.yupoo.com/husky-reps/82912680/small.jpg" class="object-cover object-center w-full h-full block" referrerpolicy="no-referrer">
该方案无需修改全局配置,仅对单张图片生效,适合图片数量少的场景。
方案2:全站全局配置
在站点HTML的<head>标签内添加全局Referer规则,所有资源请求都不携带Referer:
<meta name="referrer" content="no-referrer">
该方案配置一次即可对全站所有图片生效,适合需要批量加载第三方图片的场景。
方案3:PHP代理中转(兼容强校验场景)
如果后续源站升级规则,拦截空Referer的请求,可以用PHP做一层资源代理:
- 前端
<img>的src改为请求你自己的PHP接口,将目标图片URL作为参数传给接口 - PHP接口内部使用curl等工具模拟请求,自定义携带合法的UA、Referer等请求头拉取图片资源
- PHP接口将拉取到的图片内容直接返回给前端即可完成加载
内容的提问来源于stack exchange,提问作者Chirica Andrei
相关产品推荐
相关产品推荐

