《PHP使用CURL采集微信图片(公众号)如何绕过防盗链系统?》要点:
本文介绍了PHP使用CURL采集微信图片(公众号)如何绕过防盗链系统?,希望对您有用。如果有疑问,可以联系我们。
相关主题:PHP开发
使用PHP的CURL函数采集过微信公众号的文章时,都会遇到图片不能正常显示,这是因为遇到了微信的防盗链系统。
网上有文章 说什么用JS,IFRAME等等方法,这些不适用PHP,因为PHP是服务端处理的。
解决方法:
只需2步就可以:
1、把referer设置为空,或设置为 https://mp.weixin.qq.com
2、把图片地址全部过滤为http://
关于第2步,如果不这么做,那有时不会成功,因为微信公众号中的图片,有时是http://,有时是https://,如果是https://那么即使设了第一步把referer为空,也不会成功。比如:
只设置第一步:
http://mmbiz.qpic.cn/mmbiz_jpg/PtoJIOrbNiciaOrg1q1MXf2V2hMiaSO7KT3Upv7mKd7I02Aq8XMBpuOuTU2tgswc7E8CD3LAARTIEkezkib3FKzA6w/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1
这样是可以成功的。
但是:
https://mmbiz.qpic.cn/mmbiz_jpg/BLMSxng5Qsxjkic5dqouFlOc5CnDLmQEicFZk2BkVo0vn22FgkoVNrhOjQq27VNe50PPmvuAqDh0G6icic6G0Q3EYQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1
就采集不到。
为了避免除微信外其它网站也能通用,最好加个if判断吧($url 是图片地址):
//微信图片图片地址 https://mmbiz.qpic.cn/... 需要把https换成http,否则防盗链无法通过 if(stripos ($url, '.qlogo.cn')!==false || stripos ($url, '.qpic.cn')!==false) { $referer = 'https://mp.weixin.qq.com'; $httpUserAgent = $_SERVER['HTTP_USER_AGENT']; $url = str_replace ('https://','http://', $url); }
以上就可以了。
上面的方法是把微信图片抓取到自己的服务器图片目录下,如果您不想抓取,只想显示微信图片,不妨试试下面2种方式:
这两种方法我没试过,您自己测试。
1、借助跳板方式。
借助跳板,直接在图片链接前加上http://read.html5.qq.com/image?src=forum&q=5&r=0&imgflag=7&imageUrl=
例如,
http://read.html5.qq.com/image?src=forum&q=5&r=0&imgflag=7&imageUrl=http://mmbiz.qpic.cn/mmbiz_jpg/FmzqiasicEHF7rOXSZvVu5aibubKtpU4Sc78DRUwsjw3hZDxjJngLXug9o92pXA8FkcUAuiaZHk6XEI3eMGRbwIOPQ/0?wx_fmt=jpeg
2、借助了js,在iframe中加载了图片。
我的应用场景是这样的,我爬取了一些微信文章,需要把这些文章在自己的网站上展现,包括微信文章中的图片。
首先,js脚本,遍历微信文章中的图片,放到iframe中:
其次,我写了点小样式,让整体布局稍微整齐看得顺眼一些,在每个iframe中也写了一些样式。
这样,我们想要的结果也就出来了。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/5025.html