常见的短网址都是通过 301 或 302 跳转的方式实现重定向到目标网站的,因此我们可以使用 PHP 的 curl_getinfo 来取得 header 中的重定向地址,也就是短网址对应的原始网址(嗯,原理就是这么简单……完整的函数代码如下:/***
* 万能短网址还原函数
* @param $shortUrl 短网址
* @return 原始网址 | 空(还原失败或非短网址)
*/
function restoreUrl($shortUrl) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $shortUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0');
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_NOBODY, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
$data = curl_exec($curl);
$curlInfo = curl_getinfo($curl);
curl_close($curl);
if($curlInfo['http_code'] == 301 || $curlInfo['http_code'] == 302) {
return $curlInfo['redirect_url'];
}
return '';
}使用方法:$shortUrl = 'https://url.cn/54VbB8h'; // 要还原的短网址
$orinalUrl = restoreUrl($shortUrl);
if($orinalUrl) {
echo "短网址 {$shortUrl} 的还原结果:{$orinalUrl}";
} else {
echo "短网址还原失败";
}经过实测,该函数可以顺利实现下列短网址的还原:https://url.cn/54VbB8hhttp://t.cn/AiR8Qoyphttp://uee.me/cAhq8http://rrd.me/eWCg3https://sohu.gg/MSYnnHo02https://dwz.cn/I5l2YWKLhttp://1t.click/bceuhttp://dwz.win/qMphttp://qq.cn.hn/e8Nhttp://tb.cn.hn/x7Xhttp://jd.cn.hn/aaK9http://tinyurl.com/y5gkl3v9http://u6.gg/sLaavhttp://c7.gg/fQBWnhttp://985.so/ejaThttp://new.3qtt.cn/1hqafuhttp://dwz1.cc/DvjLsDcChttps://ml.mk//https://ml.mk/BvZhttp://suo.im/555AiBhttps://suo.dog/msugdhttp://sina.lt/eEydhttp://mrw.so/4woTLt不过,诸如 https://m.tb.cn/h.ew5NAEA 这种在前端使用 js 跳转的短网址就无能为力了~_~本文作者为mengkun,转载请注明。
评论
1条评论484848 Lv.1
Chrome 88.0.4324.150
Windows 回复
666666666666666666666尕收到尕说的
安徽省宣城市 电信