在开发过程中,碰到了需要校验用户回填的短链接是不是系统所需要的,于是就需要还原找出短链接所对应的长链接。
- 长链接转短链接
在百度上搜索程序员,跳转页面后的url就是一个长链接。当然你可以从任何地方复制一个长链接过来。
长链接
bash
https://www.baidu.com/s?wd=%E7%A8%8B%E5%BA%8F%E5%91%98&rsv_spt=1&rsv_iqid=0xed2c9c7a0033dc5d&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ib&rsv_sug2=0&rsv_btype=i&inputT=11080&rsv_sug4=11080
使用工具把长链接转成一个短链接
bash
https://t.hk.uy/b87R
- 短链接还原长链接
php
/**
* 短链还原成长链
* @param $shortUrl
* @return mixed|string
*/
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);
print_r($curlInfo);exit;
if ($curlInfo['http_code'] == 301 || $curlInfo['http_code'] == 302) {
return $curlInfo['redirect_url'];
}
return '';
}
$url = 'https://t.hk.uy/b87R';
echo restoreUrl($url);
可以看到,使用 curl_getinfo 方法获取到的数据中,有一个 redirect_url 字段,就是原始长链接