常见的短网址都是通过 301 或 302 跳转的方式实现重定向到目标网站的,因此我们可以使用 PHP 的 curl_getinfo
来取得 header 中的重定向地址,也就是短网址对应的原始网址(嗯,原理就是这么简单……[aru_49]
完整的函数代码如下:
/*** * 万能短网址还原函数 * @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 "短网址还原失败"; }
经过实测,该函数可以顺利实现下列短网址的还原:[aru_47]
- https://url.cn/54VbB8h
- http://t.cn/AiR8Qoyp
- http://uee.me/cAhq8
- http://rrd.me/eWCg3
- https://sohu.gg/MSYnnHo02
- https://dwz.cn/I5l2YWKL
- http://1t.click/bceu
- http://dwz.win/qMp
- http://qq.cn.hn/e8N
- http://tb.cn.hn/x7X
- http://jd.cn.hn/aaK9
- http://tinyurl.com/y5gkl3v9
- http://u6.gg/sLaav
- http://c7.gg/fQBWn
- http://985.so/ejaT
- http://new.3qtt.cn/1hqafu
- http://dwz1.cc/DvjLsDcC
- https://ml.mk//
- https://ml.mk/BvZ
- http://suo.im/555AiB
- https://suo.dog/msugd
- http://sina.lt/eEyd
- http://mrw.so/4woTLt
不过,诸如 https://m.tb.cn/h.ew5NAEA
这种在前端使用 js 跳转的短网址就无能为力了~_~
本文作者为mengkun,转载请注明。
干的漂亮[aru_147]
[aru_2]哈哈不错哦
是不是可以做成脚本[aru_1][aru_13],还请指教
然后就是看上了这些款表情包,怎么保存自己用呀?阿鲁和贴吧等
用file_get_contents可以实现https的还原[aru_3]
[aru_12] 这个你试试能否还原: https://qvdd.cn
来个友联吧
@会飞的鱼好的,已添加![aru_51]
@mengkun[aru_1]谢谢
有没有短网址api
有点好笑[aru_16]
大佬大佬大佬
人才,一个curl就把文章水了
你好,大佬,有的连接会进行跳转多次,怎么写代码才可以不断查找到最初的连接。
@哼哼就用这个函数多获取几次,直到再也获取不到了为止呗
@mengkun明白了,那请教大佬,如果用js或者no-referrer 进行跳转的,那是不是就无法获取跳转之后的连接了?
@哼哼当然也可以获取到,从源代码中用正则提取出来就行了。不过需要逐个进行适配,没法做成通用的
大佬 那个微博的短链接接口不能用了 有办法破解不,网上好像有的还可以,可惜没有流出方法[aru_2]
@杰新博客我已经找到新的接口了,但不能公布出来。不然见光死了[aru_16]
@mengkun提示点呗,这个很急用啊,拜托[aru_72]
@杰新博客自己搭建一个短链系统呗
@杰新博客https://api.66mz8.com/api/dwz.php?api&url=网址
@Kate写错了
t.cn:https://api.66mz8.com/api/dwz.php?api=tcn&url=http://www.baidu.com
sinaurl.cn:https://api.66mz8.com/api/dwz.php?api=sinaurlcn&url=http://www.baidu.com
您的那个壁纸代码不支持HTTPS 有办法处理吗
@i2120接口采集是http,自然不支持https。你可以找找其他接口
人才
@现实君好久不见!
@mengkun哈哈哈,感觉就在昨天才见呀
哎呀,沙发没抢到。
还是新浪比较好用,百度还要收费。
好难得啊。我具然是第一
@亻韦哥[沙发][沙发][沙发]