小编这里使用的是queryList 采集的公众号文章,具体怎么下载操作就不做演示了很简单。
下面小编给大家带来三种自己尝试过的防盗链接破解之法
第一种:通过curl下载解决
// 采集
public function parsing() {
$ql = QueryList::get($url);
// 获取文章内容
$html = $ql->find('#js_content')->html();
// 获取文章内容所有图片 这里注意一下,采集过来的文章img里面不是 src 是 'data-src'
$img = $ql->find('#js_content img')->attrs('data-src');
// 域名
$domain = request()->domain().DIRECTORY_SEPARATOR;
// 下载&转链操作 开始
foreach ($img as $v){
// 图片下载
list($savePath,$fileName) = $this->downloadTest($v);
// 小编建议 大家最好拼上绝对路径加上域名
$html = str_replace($v,$domain.$savePath.$fileName,$html);
}
// 下载&转链操作 结束
好了 这片文章内容就转链好了 后面存储就大家自己填写了
print_r($html);die;
// 这里下载替换会有一个小瑕疵 background-image没有做下载&替换,需要小伙伴们自己解决 相信小伙伴们能很容易解决
}
/**
* 下载微信公众号图片,破解防盗链接
* 如果$suffix 不将原始图片后缀传回来,gif图将无法成为动态图
* @param $url
* @param $suffix
* @return array
*/
public function downloadTest($url,$suffix = ‘img’)
{
// 核心点 就是头部处理,如果头部不进行处理,下载下来的图片,大部分图片会是破损状态,无法打开
$header = [
"Origin: https://mp.weixin.qq.com",
"Referer: https://mp.weixin.qq.com/",
'sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
"sec-ch-ua-mobile: ?0",
"User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
];
set_time_limit(0);//抓取不受时间限制
$url=str_replace('&','&',$url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if(!empty($header)){
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_HEADER, 0);//返回response头部信息
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$values = curl_exec($curl);
curl_close($curl);
// 生成唯一图片名称
$charid = md5(uniqid(mt_rand(), true));
$hyphen = chr(45);// "-"
$uuid = substr($charid, 0, 8).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12);
// 图片名称+后缀
$fileName = "$uuid.$suffix";
$savePath = "upload". DIRECTORY_SEPARATOR ."news". DIRECTORY_SEPARATOR;
// $savePath = "upload/news/";
$path = public_path().$savePath;
if(!is_dir($path)){
mkdir($path,'0755',true);
}
$fp2 = fopen($path.$fileName,'wb');
fputs($fp2, $values);
fclose($fp2);
// 返回 [路径,图片名称]
return [$savePath,$fileName];
}
第二种:通过curl 请求返回图片编码操作
// 采集
public function parsing() {
$ql = QueryList::get($url);
// 获取文章内容
$html = $ql->find('#js_content')->html();
// 修改图片显示
$html = str_replace('data-src','src',$html);
// 域名
$domain = $this->request->domain().'/news/actionimg?url=';
//-------------------- 内容中的所有图片路径替换 开始 ----------------------------//
if(!empty($html)){
$preg = '//i';//匹配img标签的正则表达式
$preg2 = '/background-image:[ ]?url\("[\'"]?(.*?\.(?:png|jpg|jpeg|gif))/i';//匹配背景的url的正则表达式
preg_match_all($preg, $html, $allImg);//这里匹配所有的img
preg_match_all($preg2, $html, $allImg2);//这里匹配所有的背景img
$imgList = array_merge($allImg[1],$allImg2[1]);
$imgList = array_unique($imgList);
$newImgList = [];
foreach ($imgList as $key=>$img_url){
$newImgList[] = $domain.$img_url;
}
$html = str_replace($imgList,$newImgList,$html);
}
//-------------------- 内容中的所有图片路径替换 结束 ----------------------------//
好了 这片文章内容就转链好了 后面存储就大家自己填写了
print_r($html);die;
}
/**
* 还是curl 请求
* @param $url
*/
public function actionWechatImg()
{
$url = input('url');
// $url = 'https://mmbiz.qpic.cn/mmbiz_jpg/gPBQwkriaRFyykPBI91meB5tPufWl9CMWmSHRUyUHTwOic0f1RBHiaPWsQCMrfrQ1zUKibh31getCyj22YdDeGb0EA/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1';
$header = [
"Origin: https://mp.weixin.qq.com",
"Referer: https://mp.weixin.qq.com/",
'sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
"sec-ch-ua-mobile: ?0",
"User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
];
set_time_limit(0);//抓取不受时间限制
$url=str_replace('&','&',$url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if(!empty($header)){
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_HEADER, 0);//返回response头部信息
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$values = curl_exec($curl);
header('Content-type: image/jpg');
echo $values;
curl_close($curl);
}
第三种:iframe嵌套
这个就没有详细介绍了,需要大家自己去体验操作
function showImg(url) {
var frameid = 'frameimg' + Math.random();
window.img = '
3
打赏
注意:本站资源多为网络收集,如涉及版权问题请及时与站长联系,我们会在第一时间内删除资源。
本站用户发帖仅代表本站用户个人观点,并不代表本站赞同其观点和对其真实性负责。
本站资源大多存储在云盘,如发现链接失效,请及时与站长联系,我们会第一时间更新。
转载本网站任何内容,请按则和转载方式正确书写本站原文地址
版权属于:
梦之中小俊
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
649494848