最近用软件采集微信公众号文章图片下载不了,全是显示盗链图片。没有办法只好上网查询有没有办法解决。在一个朋友那看到了2种解决方案记录下:
微信防盗链
用php写一个绕过的代码,你只需要把php上传到你的服务器,然后软件里设置.ini文件里添加配置项即可实现。
php代码如下,保存为image.php文件<?php
/**
此程序作为绕过微信图片的防盗链机制,通过这个文件中转可以实现绕过。
文件名可随意修改,原理就是伪造一个空的Referer来路可以绕过。从而使软件可以预览和下载微信的图片。
警告:删除本程序会导致软件无法预览和下载微信图片。
**/
function getRemoteFile($url, $refer = '') {
$option = array(
'http' => array(
'header' => "Referer:$refer")
);
$context = stream_context_create($option);
return file_get_contents($url, false, $context);
}
$url = $_GET['url'];
$url = addslashes($url);
$str = getRemoteFile($url);
header('content-type:image/jpg;');
echo $str;
?>
把以上代码存为php文件,然后上传到相应的服务器目录里,然后到软件目录下,找到data目录,找到 设置.ini 用记事本打开,在网站设置下,进行编辑增加2项:
[网站设置]防盗链地址=http://www.XXX.com/image.php?url=防盗链是否转码=假
软件就会帮你把源码里的img src=的图片网址给替换成这个,http://www.XXX.com/image.php?url=http://mmbiz.qpic.cn/mmbiz_jpg/ow6przZuPIFNYKqF4c7WnF5dwlZibpbsK2zYAsDHrTKOHM2T802JZiaI2xe33nc08iazDrXNMibejNb9UuvLB86LzQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1
其中的原理就是,把图片带空来路加载出来输出到页面上。以上代码才疏学浅,如果有更好的方法,希望会php的朋友可以指教一下。
第二种方法代码:<?php
header("Content-Type:image/png");
$string = $_SERVER["QUERY_STRING"];
/*换一张空白图片,如果遇到错误,需要用上*/
$im = imagecreate(600, 300);
$black = imagecolorallocate($im, 100, 100, 100);//图片背景
$white = imagecolorallocate($im, 255, 255, 255);
/*获取图片的真实地址*/
$url = strstr($string, "http");
if (!$url) {
imagettftext($im, 18, 0, 200, 100, $white, "./fonts/hwxh.ttf", "Error 001");
imagettftext($im, 14, 0, 150, 150, $white, "./fonts/hwxh.ttf", "请在参数中输入图片的绝对地址。");
imagepng($im);
exit();
}
@$imgString = urlOpen($url);
if ($imgString == "") {
imagettftext($im, 18, 0, 200, 100, $white, "./fonts/hwxh.ttf", "Error 002");
imagettftext($im, 14, 0, 70, 150, $white, "./fonts/hwxh.ttf", "加载远程图片失败,请确认图片的地址能正常访问。");
imagepng($im);
exit();
}
/*如果没有错误*/
$im = imagecreatefromstring($imgString);
$white = imagecolorallocate($im, 255, 255, 255);
/*加上水印*/
//imagettftext($im, 12, 0, 20, 20, $white, "./fonts/hwxh.ttf", "水印的文字1");
//imagettftext($im, 12, 0, 5, 35, $white, "./fonts/hwxh.ttf", "水印(可以写你的网址)");
imagepng($im);
/*抓取图片*/
function urlOpen($url, $data = null, $ua = '')
{
if ($ua == '') {
$ua = 'MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1';
} else {
$ua = $ua;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
?>