采集某站中,
1、发现图片URL倒序处理,无法直接获取URL
2、该站解决目标站防盗链的同时,在外面又做了一层防盗链
处理:
1、目标url:
http://***?img.php?url=gnp%3Dtmf_xw%3F046%2FQmbgZ4WIT15QbhJhWzKDQfomEx2YZ97BXKvyWcB4cibiqF8oAuH3Hb6qrCCC2ZgLl0biaRyRQvDkcfci2o06J3bikpw%2Fgnp_zibmm_zs%2Fnc.cipq.zibmm%2F%2F%3Asptth
#coding:utf-8
import urllib
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
def dealUrl(imgurl):
imgurl=imgurl.split('?url=')[1]
imgurl=urllib.unquote(imgurl)
res = list(imgurl)
temp=[]
for i in range(len(res)-1,0-1,-1):
temp.append( res[i])
print ''.join(temp)
def main():
imgurl='http://***?img.php?url=gnp%3Dtmf_xw%3F046%2FQmbgZ4WIT15QbhJhWzKDQfomEx2YZ97BXKvyWcB4cibiqF8oAuH3Hb6qrCCC2ZgLl0biaRyRQvDkcfci2o06J3bikpw%2Fgnp_zibmm_zs%2Fnc.cipq.zibmm%2F%2F%3Asptth'
dealUrl(imgurl)
if __name__ == '__main__':
main()
2、简单破解防盗链:
解决的方案
1.使用后台的预下载(把图片下载下来放到服务器下)
缺点: 占用服务器的空间,访问速度没有豆瓣提供的稳点。有些网站是静态的如 hexo 就无法实现。
2.第三方代理
缺点: 不稳点,第三方代理可能在国内访问不稳定,在国内没有好的推荐。也可以自己做一个代理,之前有人用 GO 做过一个。
下面有一个,url 后面填上豆瓣 Api 返回的图片地址
\<img src=”https://images.weserv.nl/?url=https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2544866651.jpg” \/>
3.还有一种比较友好和奢侈的,上传 CDN 调用 CDN 的地址,
缺点: 有点奢侈,因为所有图片都存到 CND 占用大量空间,CND 可能需要钱购买,CND 服务商提供图片上传的 API
4.删除 Header 中的 Referrer
<meta name=”referrer” content=”never”>
content 有四个值可以选择 never,always,origin,default 这是来自于 whatwg 标准,浏览器对他的支持还是很好的。
MDN 标准,还多了一个 no-referrer
5.添加 ReferrerPolicy 属性
添加 meta 标签相当于对文档中的所有链接都取消了 referrer,
而R eferrerPolicy 则更精确的指定了某一个资源的referrer策略。
关于这个策略的定义可以参照MDN。比如我想只对某一个图片取消referrer,如下编写即可:
<img src=”xxxx.jpg” referrerPolicy=”no-referrer” />
使用方法五,对公众号图片进行测试:
测试url对象:
https://mmbiz.qpic.cn/sz_mmbiz_png/wpkib3J60o2icfckDvQRyRaib0lLgZ2CCCrq6bH3HuAo8Fqibic4BcWyvKXB79ZY2xEmofQDKzWhJhbQ51TIW4ZgbmQ/640?wx_fmt=png
<img src="https://mmbiz.qpic.cn/sz_mmbiz_png/wpkib3J60o2icfckDvQRyRaib0lLgZ2CCCrq6bH3HuAo8Fqibic4BcWyvKXB79ZY2xEmofQDKzWhJhbQ51TIW4ZgbmQ/640?wx_fmt=png1" referrerPolicy="no-referrer"/>
测试结果:
参考:https://www.cnblogs.com/weiyiyong/p/11242369.html