PHP破解防盗链图片正常显示
通过爬虫获取到了wx的数据之后,其中包含图片,但是当拿到图片链接进行数据展示的时候会提示:“此图片来自...平台未经允许不可引用”
正常代码:
<img src="{{d.icon_url}}" width="70" height="70" alt="">
显示如下:
原因是加了防盗链。
如何设置防盗链:
有自己的主机一般都会设计"防盗链", 其实包括图片防盗链,和下载防盗链等,如:
1.使用.htaccess设置防盗链
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?jb51.net/.*$ [NC] RewriteRule \.(gif|jpg)$ https://www.jb51.net/image.gif [R,L]
2.nginx设置防盗链
location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked jb51.net; if ($invalid_referer) { rewrite ^/ http://jb51.net/234_s.gif; #return 404; } }
如何破解防盗链:
但怎么破解防盗链呢? 一般的防盗链是判断来路是否为自己的域名, 我们可以使用 php 内置的 file_get_contents 方法来请求这个图片(当然别的后端语言也有类似的方法), 如:
//getImg.php?url=目标图片连接 <?php header('Content-type: image/jpeg'); echo file_get_contents(isset($_GET["url"])?$_GET["url"]:'http://static.jb51.net/images/v1/loading-16-16.gif'); ?>
实操:
我这边实用的thinkphp
在控制器新增了一个方法:
public function getimg() { $utl = $this->request->get("url"); header('Content-type: image/jpeg'); echo file_get_contents($utl); }
然后html页面代码:
<img src="/自己的模块/自己的控制器/getimg?url={{d.icon_url}}" width="70" height="70" alt="">
这样就识别到了。