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


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和ACCESS写聊天室(五)
Oct 09 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
curl和libcurl的区别简介
Jul 01 PHP
PHP精确计算功能示例
Nov 29 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
python解析xml文件实例分享
2013/12/04 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
人力资源经理自我评价
2014/01/04 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
小学课外阅读总结
2014/07/09 职场文书
庆元旦主持词
2015/07/06 职场文书
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers