如何在不重定向原始 URL 的情况下获取短 URL 服务的信息或实际信息

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

cURL 可以解决这两个问题。 亲爱的 glavic,感谢您的回复。任何示例或网址? us1.php.net/curl_getinfo 【参考方案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 有用的答案(或问题),别忘了点赞。

以上是关于如何在不重定向原始 URL 的情况下获取短 URL 服务的信息或实际信息的主要内容,如果未能解决你的问题,请参考以下文章

无法在不重定向的情况下创建付款发票

使用HttpClient,在301的情况下如何防止自动重定向并获取原始状态码和转发Url [重复]

如何在不更改web.config文件中的URL的情况下重定向域?

apache中的vhost重写规则-摆脱子域而不重定向

如何在不重新加载页面的情况下将服务器端重定向到其他页面并仍将 URL 保留在 Nextjs 应用程序中?

如何在不重定向的情况下从数据库实时更新赞成票和反对票数?