php应用篇-百度图片的防盗链

众所周知,一个网站如果的图片流量很占用网络带宽,因此,防止图片的被盗连就显得重中之重。这里,简单讲解下百度如何防止图片的盗链的原理,接着介绍下如何通过php来盗取图片,正所谓,道高一尺魔高一丈,防守和进攻总是不断地相互促进发展。


首先,简单介绍下盗链,按照百度百科的介绍“盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。”。所以,这里图片盗链就是在自己的服务器上引用百度的图片结果,而不把图片放到自己的服务器上,这样就减少了服务器的带宽了。


举个例子:给出个百度图片的url:

  1. http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg  



如果直接通过浏览器访问,我们就会得到真实的图片,如下图:




但是如果我们在自己的服务器上通过

  1. <img src="http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg" />  

来获取它的内容。


那么我们就会得到下面的图片:



这里因为我们请求图片的时候http请求的header中有Referer:这个字段,他标示了我们不是百度自己的服务器,所以请求不被正常处理,这里我们就可以通过php中的curl扩展来伪造http请求从而得到正确的图片。代码如下:


  1. <?php  
  2.   
  3. $url = 'http://c.hiphotos.baidu.com/image/w%3D210/sign=ed30880babec8a13141a50e1c7029157/d52a2834349b033be1a9503e17ce36d3d539bd35.jpg';//$_GET["url"];  
  4.   
  5. $dir = pathinfo($url);  
  6.   
  7. $host = $dir['dirname'];  
  8.   
  9. $refer = $host.'/';  
  10.   
  11. $ch = curl_init($url);  
  12.   
  13. curl_setopt ($ch, CURLOPT_REFERER, $refer);  
  14.   
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//Activation can modify the page  
  16.   
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  18.   
  19. curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);  
  20.   
  21. $data = curl_exec($ch);  
  22.   
  23. curl_close($ch);  
  24.   
  25. header("Content-type: image/jpeg");  
  26.   
  27. print( $data );  

经过这么处理之后,我们就可以盗取到百度的图片了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值