最近项目用到这功能了,整理下
首先拿到QQ的域名检测api
https://cgi.urlsec.qq.com/index.php?m=check&a=check&url=被检测域名&_=13位毫秒
以及微信的重定向域名
http://mp.weixinbridge.com/mp/wapredirect?url=被检测域名
原理:
有了上面两个网址就可以实现了,QQ的返回值是jsonp格式,需要单独处理下,详细方法看下面的类,域名被拉黑后json中data=>results=>whitetype该值将返回2,返回1或3都是正常!
微信的是一个重定向域名,正常域名返回3秒跳转的html或返回空,如果被拦截了就会返回 '已停止访问该网页'
我这边是tp框架,就直接发类出来了,原生的去掉namespace即可正常引用
Thinkphp类
<?php
namespace utils;
class Util
{
public function getQqState($url){
$res = self::curl_get("https://cgi.urlsec.qq.com/index.php?m=check&a=check&url=".$url."&_=".self::msectime());
if (empty($res)){
return false;
}
$res = substr($res, 1);
$res = substr($res, 0, -1);
$data = json_decode($res,true);
if (empty($data)){
return false;
}
$type = $data['data']['results']['whitetype'];
if ($type==1 || $type ==3 ){
return true;
}else{
return false;
}
}
public function getWxState($url){
$res = self::curl_get("http://mp.weixinbridge.com/mp/wapredirect?url=".$url);
if (empty($res)){
return true;
}
if (strpos($res,'已停止访问该网页') !== false){
return false;
}else{
return true;
}
}
private function msectime() {
list($msec, $sec) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
}
private function curl_get($url){
$ch = curl_init(); // Curl 初始化
$header = [
'X-FORWARDED-FOR:218.91.92.84',
'CLIENT-IP:218.91.92.84',
'Cookie: pgv_pvi=9897416704; RK=WI7w5+CMZn; ptcz=e383433090496e1f60381fd68733196426868ba1876249a6736bcc4a3eb8ec72; pgv_pvid=455855220; cid=89410138-a33a-4ea9-98f2-4436da89d67d; _tfpdata=yBRknXvS8CfrED0zD85NZfxCPzT5SW8KEY03rIziZmu9ogk9y%2B5%2FU4QrJBbfqfuVqr%2F6vw8nSWfqHR3fu2Jc0TPvszwmrMwXEdN%2B8bKKfHwNCcL%2F2%2Fbhmiu%2B%2F4IgK1DX'
];
curl_setopt($ch, CURLOPT_URL, $url); // 设置 Curl 目标
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Curl 请求有返回的值
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // 设置抓取超时时间
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 跟踪重定向
curl_setopt($ch, CURLOPT_ENCODING, ""); // 设置编码
curl_setopt($ch, CURLOPT_REFERER, $url); // 伪造来源网址
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //伪造IP
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"); // 伪造ua
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // 取消gzip压缩
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$content = curl_exec($ch);
curl_close($ch); // 结束 Curl
return $content; // 函数返回内容
}
}
我这边只需要返回true/false就好了,有其他需求自行更改
end!!!