PHP bir kısaltılmış URL Final Destination belirler?

3 Cevap php

PHP bunu nasıl yapabilirim? örneğin

bit.ly/f00b4r ==> http://www.google.com/search?q=cute+kittens

Java, çözelti şudur:

You should issue a HEAD request to the url using a HttpWebRequest instance. In the returned HttpWebResponse, check the ResponseUri.

Just make sure the AllowAutoRedirect is set to true on the HttpWebRequest instance (it is true by default). (Thx, casperOne)

Ve kodu

private static string GetRealUrl(string url)
{
    WebRequest request = WebRequest.Create(url);
    request.Method = WebRequestMethods.Http.Head;
    WebResponse response = request.GetResponse();
    return response.ResponseUri.ToString();
}

(Thx, Fredrik Mork)

Ama PHP bunu yapmak istiyorum. NASIL? :)

3 Cevap

KREDİ http://forums.devshed.com/php-development-5/curl-get-final-url-after-inital-url-redirects-544144.html GİDİYOR

function get_web_page( $url ) 
{ 
    $options = array( 
        CURLOPT_RETURNTRANSFER => true,     // return web page 
        CURLOPT_HEADER         => true,    // return headers 
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects 
        CURLOPT_ENCODING       => "",       // handle all encodings 
        CURLOPT_USERAGENT      => "spider", // who am i 
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect 
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect 
        CURLOPT_TIMEOUT        => 120,      // timeout on response 
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects 
    ); 

    $ch      = curl_init( $url ); 
    curl_setopt_array( $ch, $options ); 
    $content = curl_exec( $ch ); 
    $err     = curl_errno( $ch ); 
    $errmsg  = curl_error( $ch ); 
    $header  = curl_getinfo( $ch ); 
    curl_close( $ch ); 

    //$header['errno']   = $err; 
   // $header['errmsg']  = $errmsg; 
    //$header['content'] = $content; 
    print($header[0]); 
    return $header; 
}  
$thisurl = "http://www.example.com/redirectfrom";
$myUrlInfo = get_web_page( $thisurl ); 
echo $myUrlInfo["url"];

The time to try, you already found the answer.

Yine de, bu gibi bir şeyle gitmiş olurdu:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://bit.ly/tqdUj");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);

$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

curl_close($ch);

var_dump($url);

Bazı açıklamalar:

  • İstenen URL kısa biridir
  • Eğer başlıklarını istemiyorum
  • Muhtemelen işe yaramaz - Emin vücut gösterilmez yapmak istiyorum
  • Eğer vücut istemiyorum; yani, bir HEAD isteği istiyorum, ve GET değil
  • tabii ki takip edilecek yerleri, istiyorum
  • istek idam edildikten sonra, size getirilen olmuştur "gerçek" URL'sini almak istiyorum

Ve, burada, sen olsun:

string 'http://wordpress.org/extend/plugins/wp-pubsubhubbub/' (length=52)

(Comes from one of the last tweets I saw that contained a short URL)


This should work with any shortening-URL service, independantly of their specific API.

Ayrıca zaman aşımları gibi diğer bazı seçenekler, çimdik isteyebilirsiniz; curl_setopt daha fazla bilgi almak için bkz.

Eğer bit.ly API okudun mu? özel olarak here?

Ben sorun göremiyorum. Eğer olası yönlendirmeler bahsediyorsun?