详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案


Posted in Javascript onApril 04, 2019

已经获取微信公众号发布的图片,但不能正常显示 ,提示:此图片来自微信公众平台 未经允许不得引用。

详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案 

这是怎么回事呢?

遇到这种问题是因为微信公众平台对图片采用了防盗链设置,微信对外提供了API接口,让我们可以通过授权的方式获取到自己公众号里面的文章,或者你也可以通过爬虫去抓取微信的文章,但是微信的图片默认是不允许外部调用的

那该怎么解决这种问题呢?

这里我找到了两种方案

第一种

在JS中提前把图片加载到本地,然后从本地缓存中读取图片

var showImg = function (url) {
 var frameid = 'frameimg' + Math.random();
 window.img = '<img id="img" src=\'' + url + '?' + Math.random() + '\' /><script>window.onload = function() { parent.document.getElementById(\'' + frameid + '\').height = document.getElementById(\'img\').height+\'px\'; }<' + '/script>';
 return '<iframe id="' + frameid + '" src="javascript:parent.img;" frameBorder="0" scrolling="no" width="100%"></iframe>';
}

通过各种iframe,form等来跳过防盗链机制,但是这种方法,对代码的结构影响很大,对一些移动类库兼容性不太好。

第二种

运用用后台方法

<img class="form_logo" src="{:U('showMpImg')}?url={$vo.url}" style="max-width: none" width="160" height="100">
//显示图片
  public function showMpImg($url){
    header('content_type:image/jpeg');
    echo file_get_contents($url);
  }

第三种,用php模拟浏览器请求

$url = $request->input('url');
$ch = curl_init();
$httpheader = array(
 'Host' => 'mmbiz.qpic.cn',
 'Connection' => 'keep-alive',
 'Pragma' => 'no-cache',
 'Cache-Control' => 'no-cache',
 'Accept' => 'textml,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8',
 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
 'Accept-Encoding' => 'gzip, deflate, sdch',
 'Accept-Language' => 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4'
);
$options = array(
 CURLOPT_HTTPHEADER => $httpheader,
 CURLOPT_URL => $url,
 CURLOPT_TIMEOUT => 5,
 CURLOPT_FOLLOWLOCATION => 1,
 CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array( $ch , $options );
$result = curl_exec( $ch );
curl_close($ch);
header('Content-type: image/jpg');
echo $result;
exit;

可看到结果,

详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案

目前我用第二种方法测试过,代码简单易懂,建议使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js自动判断浏览器分辨率的代码
Jan 28 Javascript
为你的网站增加亮点的9款jQuery插件推荐
May 03 Javascript
jQuery.extend 函数的详细用法
Jun 27 Javascript
jQuery中eq()方法用法实例
Jan 05 Javascript
JS实现让网页背景图片斜向移动的方法
Feb 25 Javascript
Jquery $when done then的用法详解
May 20 Javascript
PHP获取当前页面完整URL的方法
Dec 02 Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 Javascript
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
Vue 中axios配置实例详解
Jul 27 Javascript
JavaScript实现简单贪吃蛇效果
Mar 09 Javascript
解决vue项目获取dom元素宽高总是不准确问题
Jul 29 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
Apr 04 #Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 #Javascript
JavaScript多种页面刷新方法小结
Apr 04 #Javascript
详解easyui 切换主题皮肤
Apr 04 #Javascript
jQuery分组选择器简单用法示例
Apr 04 #jQuery
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 #Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 #jQuery
You might like
php定时执行任务设置详解
2015/02/06 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
python插入数据到列表的方法
2015/04/30 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python实现直播推流效果
2019/11/26 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
六十大寿答谢词
2014/01/12 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
企业培训简报范文
2015/07/20 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server