Décoder une adresse bit.ly, tinyurl… en PHP

7 11 2009

Dans la série “et si j’essayais de coder ça”, voici une fonction PHP qui donne l’adresse redirigée à partir d’une URL. C’est pas clair ? En gros, vous lui donnez une URL bit.ly, tinyurl ou autre, et elle vous donne l’adresse originale. Ça devrait maintenant être plus clair😉

Pour la petite histoire, c’est un tweet de @jdenoy qui m’a donné l’envie de coder cette fonction et la voici :

function get_redirection($address) {
  $url=parse_url($address);
  if(!isset($url['scheme'])) $url['scheme']='http';
  if(!isset($url['port'  ])) $url['port'  ]=80;
  if(!isset($url['path'  ])) $url['path'  ]='/';

  if($url['scheme']!='http') return FALSE;

  $fp=fsockopen($url['host'],$url['port'],$errno,$errstr,30);
  if(!$fp) return FALSE;

  $out ="GET ".$url['path']." HTTP/1.1\r\n";
  $out.="Host: ".$url['host']."\r\n";
  $out.="Connection: Close\r\n\r\n";

  fwrite($fp,$out);
  $response="";
  while(!feof($fp)) $response.=fgets($fp,4096);
  fclose($fp);

  $lines=explode("\r\n",$response);
  if(strpos($lines[0],"301")===FALSE and strpos($lines[0],"302")===FALSE) return FALSE;

  foreach($lines as $line) {
    if(substr($line,0,10)=="Location: ") return substr($line,10);
    if($line=="") return FALSE;
  }

  return FALSE;
}

print get_redirection("http://bit.ly/3eg1ua");

Le principe consiste à consulter l’entête de réponse, d’y détecter s’il s’agit d’une redirection (code 301 ou 302) et alors de retrouver la nouvelle adresse (ligne “Location:”). Ça m’a permis aussi de découvrir la fonction parse_url qui est bien pratique dans mon cas😉


Actions

Information

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s




%d blogueurs aiment cette page :