短地址还原

短地址还原

一个下午无聊的”杰作”.之前Leeiio同学的博客上写过这样的一篇文章RealURL,还原你的短地址!,我之前跟Leeiio讨论过,他的思路给了我启发,今天下午突然想练练php,于是有了这东西.简单测试了几个短地址,全部通过.本人并不擅长php,难免写得有缺陷,如果你有发现失败的记得给我留言哦!测试地址:http://www.wanz.im/demo/realurl.php

由于性能问题,接口不提供批量查询,放出核心代码给大家^_^

PHP

function get_final_url( $url, $timeout = 10 ){ $url = str_replace( « & », « & », urldecode(trim($url)) ); $cookie = tempnam (« /tmp », « CURLCOOKIE »);    $ch = curl_init();    curl_setopt( $ch, CURLOPT_USERAGENT, « Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1 » ); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt( $ch, CURLOPT_ENCODING, «  » ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_AUTOREFERER, true ); curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 ); $content = curl_exec( $ch ); $response = curl_getinfo( $ch ); curl_close ( $ch ); if ($response[‘http_code’] == 301 || $response[‘http_code’] == 302) { ini_set(« user_agent », « Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1 »); $headers = get_headers($response[‘url’]); $location = «  »; foreach( $headers as $value ) { if ( substr( strtolower($value), 0, 9 ) == « location: » ) return get_final_url( trim( substr( $value, 9, strlen($value) ) ) ); } } if ( preg_match(« /window\.location\.replace\(‘(.*)’\)/i », $content, $value) || preg_match(« /window\.location\=\ »(.*)\ »/i », $content, $value) ) { return get_final_url ( $value[1] ); } else { return $response[‘url’]; }}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *