【问题标题】:How to get info or actual of short URL service without redirect on original如何在不重定向原始 URL 的情况下获取短 URL 服务的信息或实际信息
【发布时间】:2013-11-25 19:57:59
【问题描述】:

我创建了 https://www.google.com 的缩短 URL。

我使用了 URL 缩短器来缩短转换后的链接

现在,当我点击缩短的链接时,他们会将我重定向到 https://www.google.com

  1. 在上述情况下,如何在不重定向到 Google.com 的情况下使用 PHP 从缩短的链接中知道最终链接?

  2. 如何在不使用 PHP 转到原始/最终链接的情况下获取重定向次数(用于递归缩短 URL)?

【问题讨论】:

  • cURL 可以解决这两个问题。
  • 亲爱的 glavic,感谢您的回复。任何示例或网址?

标签: php


【解决方案1】:

更简单的解决方案是将 curl 设置为仅获取标题(忽略正文)并跟踪位置;然后使用curl_getinfo() 函数获取最后一个 url 和 no。重定向次数:

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_NOBODY => true,
    CURLOPT_FOLLOWLOCATION => true,
));
curl_exec($ch);
$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$redirect_count = curl_getinfo($ch, CURLINFO_REDIRECT_COUNT);
curl_close($ch);

现在你有了变量:

  • $last_url = 重定向循环中的最后一个 URL
  • $redirect_count = 没有。发生的重定向

看看at other great curl_getinfo() parameters你可以获取。

附言您可以将CURLOPT_HEADER 设置为true 以查看到底发生了什么。

【讨论】:

    【解决方案2】:

    遵循 HTTP 响应,直到您到达不同于 301 的响应代码。

    您可以像这样获取 HTTP 响应代码和下一个 url:

    $http = curl_init($url);
    $result = curl_exec($http);
    $http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
    $next_url = curl_getinfo($http, CURLINFO_REDIRECT_URL);
    curl_close($http);
    echo $http_status;
    echo $next_url;
    

    【讨论】:

    • 谢谢哈里!!如上所述显示递归缩短网址是否有帮助?
    • 您需要将其包装在一个 while 循环中,该循环在 $http_status 不是 301 时结束。此外,不断增加一些变量以获取有多少重定向的计数。
    • @Newbie123:如果您发现对 SO 有用的答案(或问题),别忘了点赞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多