从短网址获取最终网址

时间:2014-02-01 15:19:33

标签: php redirect

我需要从短网址获取最终网址,而不使用cURL FOLLOWLOCATION(我在共享主机上) 我尝试了下面的代码,但结果是"移到这里"链接而不是回声:

$ch = curl_init("http://bit.ly/test");
$lastUrl = curl_getinfo($ch);
curl_exec($ch);
echo $lastUrl;

如何获取最终网址?

5 个答案:

答案 0 :(得分:1)

您可以在php中使用get_headers函数尝试这种方式:

function getMainUrl($url) {
    $headers = get_headers($url, 1);
    return $headers['Location'];
}

echo getMainUrl("http://bit.ly/test");

答案 1 :(得分:0)

$lastUrl是一个数据数组,所以你不应该回应它。

获取完整网址的最佳方法是使用curl_exec()获取请求的标头 将curl_exec()分配给变量,您将在那里看到完整的网址。然后你需要解析它以从其余部分获取url。

$headers = curl_exec($ch);

请查看this site以获取有关解析标头以获取网址的帮助。

答案 2 :(得分:0)

这可能有帮助     

$location = '';

//initialise the curl
$ch = curl_init("http://bit.ly/test");

//get the headers
curl_setopt($ch, CURLOPT_HEADER, true);

//block browser display
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

//execute the curl
$a = curl_exec($ch);

//find the location of redirects
if(preg_match('#Location: (.*)#', $a, $r))
 $location = trim($r[1]);

 //display the location
 echo $location;

答案 3 :(得分:0)

来自PHP.net:

  

CURLINFO_EFFECTIVE_URL - 上一个有效网址

您可以在执行curl之后但在关闭频道之前获取它:

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

答案 4 :(得分:0)

请参阅https://stackoverflow.com/a/41680608/7426396

我实现了获取纯文本文件的每一行,每行有一个缩短的url,相应的重定向url:

<?php
// input: textfile with one bitly shortened url per line
$plain_urls = file_get_contents('in.txt');
$bitly_urls = explode("\r\n", $plain_urls);

// output: where should we write
$w_out = fopen("out.csv", "a+") or die("Unable to open file!");

foreach($bitly_urls as $bitly_url) {
  $c = curl_init($bitly_url);
  curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36');
  curl_setopt($c, CURLOPT_FOLLOWLOCATION, 0);
  curl_setopt($c, CURLOPT_HEADER, 1);
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 20);
  // curl_setopt($c, CURLOPT_PROXY, 'localhost:9150');
  // curl_setopt($c, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
  $r = curl_exec($c);

  // get the redirect url:
  $redirect_url = curl_getinfo($c)['redirect_url'];

  // write output as csv
  $out = '"'.$bitly_url.'";"'.$redirect_url.'"'."\n";
  fwrite($w_out, $out);
}
fclose($w_out);

玩得开心,享受! PW