简单解决微信文章图片防盗链问题


Posted in PHP onDecember 17, 2016

微信对外提供了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>';
}

第二种

用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;

两种方法类似,我目前用的JS的方式,测试过可以用

PHP 相关文章推荐
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
改写函数实现PHP二维/三维数组转字符串
Sep 13 PHP
php检测useragent版本示例
Mar 24 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
php中explode的负数limit用法分析
Feb 27 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
Dec 31 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
PHP 7.1新特性的汇总介绍
Dec 16 #PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 #PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 #PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 #PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 #PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 #PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 #PHP
You might like
php目录管理函数小结
2008/09/10 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
php实现生成验证码实例分享
2016/04/10 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
javascript读写json示例
2014/04/11 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
python爬虫可以爬什么
2020/06/16 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
迟到检讨书400字
2014/01/13 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
关于Redis的主从复制及哨兵问题
2022/06/16 Redis