如何为mPDF生成的PDF添加Referer以解决图片域名限制问题
如何为mPDF生成的PDF添加Referer以解决图片域名限制问题
嗨,这个问题我太熟了!你猜得没错,完全可以通过给mPDF请求图片时添加Referer头来解决这个域名限制的问题——毕竟服务器拦截图片就是因为检测不到合法的Referer,以为是非法直接访问嘛。
我给你说具体怎么操作,分两种情况(主要看你的mPDF版本):
如果你用的是mPDF 7.x及以上的新版本:
初始化mPDF之后,直接设置它的curlOptions配置数组,把合法的Referer加进去就行,代码示例如下:// 创建mPDF实例 $mpdf = new \Mpdf\Mpdf(); // 配置curl请求头,添加上服务器允许的Referer $mpdf->curlOptions = [ CURLOPT_REFERER => 'https://你的合法域名.com', // 替换成服务器白名单里的域名 CURLOPT_FOLLOWLOCATION => true, // 可选,处理图片地址的跳转 ]; // 加载包含受限图片的HTML $html = '<div><img src="https://受限资源域名.com/xxx/your-image.jpg" alt="受限图片"></div>'; $mpdf->WriteHTML($html); // 输出或保存PDF $mpdf->Output('output.pdf', 'I');要是你用的是比较老的mPDF版本(比如6.x及之前):
旧版的mPDF用SetCurlOptions()方法来设置,代码逻辑差不多:$mpdf = new mPDF(); $mpdf->SetCurlOptions([ CURLOPT_REFERER => 'https://你的合法域名.com', ]); // 后续的WriteHTML和Output步骤和上面一致
这里要特别提醒你:Referer的值一定要完全匹配服务器的白名单规则,比如有的服务器要求是完整的域名(带https/http),有的甚至要求是具体的页面路径。你可以先手动用curl测试下合法性,比如在终端敲这个命令:
curl -H "Referer: https://你的合法域名.com" https://受限资源域名.com/xxx/your-image.jpg
如果这个命令能成功返回图片内容,那说明Referer是对的,mPDF配置后肯定能加载出图片;要是不行,可能服务器还有其他限制(比如User-Agent校验),那你可以在curlOptions里再加个CURLOPT_USERAGENT,模拟浏览器的UA,比如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36。
总之核心思路就是让mPDF请求图片时带上服务器认可的Referer头,这样就能绕过域名限制,正常显示图片啦!
备注:内容来源于stack exchange,提问作者Sanidhya
相关产品推荐
相关产品推荐

