通过QQ邮箱显示获取头像,不暴露QQ号

之前关于获取QQ头像的教程:https://blog.zwying.com/archives/8.html

实现原理是获取json数据进行分割得出k值再进行重组,比较简单。

function Authorimg($email)
{
    $a='cdn.v2ex.com/gravatar';//gravatar头像源
    $b=str_replace('@qq.com','',$email);//替换qq邮箱
    if(stristr($email,'@qq.com')&&is_numeric($b)&&strlen($b)<11&&strlen($b)>4){
        $nk = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$b;//qq头像api
        $q = file_get_contents($nk);//读入文件
        $q = json_encode($nk);//编码json
        $k = explode("&k=",$q)[1];//分割出k值
        echo 'https://q.qlogo.cn/g?b=qq&k='.$k.'&s=100';//重组
    }else{
        $email= md5($email);
        echo 'https://'.$a.'/'.$email.'?';
    }
}

此方法实际使用貌似会影响效率,实测加载比较慢,于是就研究了下,得出第二种方法,获取HTTP请求所发送的标头的数组,不用读入整个文件不会影响效率。

function Authorimg($email)
{
    $a='cdn.v2ex.com/gravatar';//gravatar头像源
    $b=str_replace('@qq.com','',$email);
    if(stristr($email,'@qq.com')&&is_numeric($b)&&strlen($b)<11&&strlen($b)>4){
        $nk = 'https://s.p.qq.com/pub/get_face?img_type=3&uin='.$b;
        $c = get_headers($nk, true);
        $d = $c['Location'];
        $q = json_encode($d);
        $k = explode("&k=",$q)[1];
        echo 'https://q.qlogo.cn/g?b=qq&k='.$k.'&s=100';
    }else{
        $email= md5($email);
        echo 'https://'.$a.'/'.$email.'?';
    }
}

使用方法:

<?php Authorimg($comments->mail); ?>

参考文章:https://www.ruletree.club/archives/1566/

打赏
评论区
头像
    头像
    keke
      

    主题真好看

    头像
    aa
      

    博主好棒

    头像
    呆哥
      

    暴露QQ号也没啥 拿到QQ号了能做什么

      头像
      橙梓
        
      @呆哥

      如果被人用来社工,就可以查到特别多信息 比如绑定的手机号,然后就可以顺线查下去了

    头像
    黑桃三
      

    用cravatar.cn的镜像源可以自动获取QQ邮箱,有Gravatar头像获取,没有就展示QQ头像