侧边栏壁纸
博主昵称
梦之中小俊

以前高中时,羡慕大学考试只要及格就行;现在大学了,怀念高中考试及不及格都行??

PHP

PHP采集公众号文章内容,绕过微信图片防盗链接,正常打开浏览内容

梦之中小俊
2023-11-28 / 0 评论 / 263 阅读 / 推送成功!

小编这里使用的是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

打赏

评论 (0)

OωO
  • ::(呵呵)
  • ::(哈哈)
  • ::(吐舌)
  • ::(太开心)
  • ::(笑眼)
  • ::(花心)
  • ::(小乖)
  • ::(乖)
  • ::(捂嘴笑)
  • ::(滑稽)
  • ::(你懂的)
  • ::(不高兴)
  • ::(怒)
  • ::(汗)
  • ::(黑线)
  • ::(泪)
  • ::(真棒)
  • ::(喷)
  • ::(惊哭)
  • ::(阴险)
  • ::(鄙视)
  • ::(酷)
  • ::(啊)
  • ::(狂汗)
  • ::(what)
  • ::(疑问)
  • ::(酸爽)
  • ::(呀咩爹)
  • ::(委屈)
  • ::(惊讶)
  • ::(睡觉)
  • ::(笑尿)
  • ::(挖鼻)
  • ::(吐)
  • ::(犀利)
  • ::(小红脸)
  • ::(懒得理)
  • ::(勉强)
  • ::(爱心)
  • ::(心碎)
  • ::(玫瑰)
  • ::(礼物)
  • ::(彩虹)
  • ::(太阳)
  • ::(星星月亮)
  • ::(钱币)
  • ::(茶杯)
  • ::(蛋糕)
  • ::(大拇指)
  • ::(胜利)
  • ::(haha)
  • ::(OK)
  • ::(沙发)
  • ::(手纸)
  • ::(香蕉)
  • ::(便便)
  • ::(药丸)
  • ::(红领巾)
  • ::(蜡烛)
  • ::(音乐)
  • ::(灯泡)
  • ::(开心)
  • ::(钱)
  • ::(咦)
  • ::(呼)
  • ::(冷)
  • ::(生气)
  • ::(弱)
  • ::(狗头)
泡泡
阿鲁
颜文字
取消
  1. 头像
    6767 Lv.1
    iPhone · Safari
    沙发

    画图

    回复
  2. 头像
    6767 Lv.1
    Windows 10 · Google Chrome
    板凳

    表情

    回复
  3. 头像
    透露 Lv.2
    Android · QQ Browser
    第30楼

    649494848

    回复