抓取重定向的目标链接
Posted
技术标签:
【中文标题】抓取重定向的目标链接【英文标题】:Grabbing Destination Link of a Redirect 【发布时间】:2012-11-22 15:46:23 【问题描述】:希望我只是忽略了这一点。
我正在尝试使用 php 获取重定向链接的目标 URL。这是为了获取附属/隐藏链接的站点 URL。
最佳示例:http://tinyurl.com/2tx 访问 google.com
注意:这是一个示例,链接是动态创建的
现在我通过 URL 传递
www.mysite.com/redirect.php?link=http://tinyurl.com/2tx
这是来自该站点的代码 - 注意:由于 URL 中包含与号,因此我必须通过 GET 走这条路线。
<?php
$name = http_build_query($_GET);
// which you would then may want to strip away the first 'name='
$name = substr($name, strlen('name='));
//change link to a nice URL
$url = rawurldecode($name);
?>
我有一个抓取 URL 的简单脚本,如何处理 URL 以获取目标 URL?
希望这不会太令人困惑。
干杯, 罗伯
【问题讨论】:
这很混乱。你的意思是 $_GET['link']? 我认为正在寻找一种从 tinyurl 链接获取“google.com”的方法 这就是你需要的:zzz.rezo.net/HowTo-Expand-Short-URLs.html 我需要获取隐藏链接的目标 URL。我添加了我正在使用的代码。对不起,我太傻了! 【参考方案1】:下次您应该发布一些代码。我假设您正在使用cURL
来执行此操作。这很简单:
//sanitize
$ch = curl_init($_GET['link']);
//follow redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
编辑:根据 Dagon,您只想“知道网址但不去那里”。如果您只需要知道 url 而不需要获取其内容,则使用此设置会更有效:
curl_setopt($ch, CURLOPT_NOBODY, true);
【讨论】:
@Dagon 我以为他想获取目标网址 我虽然他想知道网址但不去那里 - 我们中的一个人是对的 :-) 有趣...实际上你都对...我的第二步是实际转到链接。但我需要先在 Facebook 上分享链接。隐藏的链接不能很好地在 Facebook 上分享,所以我将通过目标链接(为什么我首先需要它)然后在分享时将它们重定向。 @synergy989 指向您页面的链接显示在哪里?您需要在该 URL 中编码&
你会想要添加这个:curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
否则它会全部显示在页面上。【参考方案2】:
我会这样做(阅读 cmets):
<?php
// Connect to the page:
$ch = curl_init("http://tinyurl.com/2tx");
// Don't get the body (remove if you want the body):
curl_setopt($ch, CURLOPT_NOBODY, true);
// Follow the page redirects:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Retun the data as a string (Remove to echo to the page):
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute:
curl_exec($ch);
// Get data:
print_r($data = curl_getinfo($ch));
// Get just the url:
echo $data["url"];
【讨论】:
哦,到目前为止这很好......问题,我如何在打印链接之前摆脱所有废话?你可以在这里看到:mediaortech.com/justme/redirect2.php 只需将此print_r($data = curl_getinfo($ch));
替换为此$data = curl_getinfo($ch);
你我的朋友已经成功了——我应该看到那个愚蠢的 print_r【参考方案3】:
向您拥有的 URL 发出 HTTP HEAD 请求。您将收到带有目标 URL 的 HTTP 301 或 302 响应。
示例:输入您的 URL here 以查看发出 HTTP 头请求时返回的响应。
【讨论】:
【参考方案4】:这可能是编码问题。您的 URL 中的参数未编码,因此在尝试使用 $_GET 获取时可能已损坏。
你想使用这个网址:
www.mysite.com/redirect.php?link=http%3A%2F%2Ftinyurl.com%2F2tx
您可以使用urlencode()
函数在PHP 中对URL 变量进行编码。现在可以像这样访问(我认为)您想要的变量:
echo $_GET['link']; // http://tinyurl.com/2tx
【讨论】:
我进行了编辑以反映这一点,但链接是动态创建的,因此我无法对其进行硬编码:( 链接是在URL中传递给你的页面的吧?比如,如果有人想先看http://goo.gl/ytVLg
,那么有人会去http://www.mysite.com/redirect.php?link=http%3A%2F%2Fgoo.gl%2FytVLg
?
是的,但有没有办法动态编码它们?基本上有人进来并输入: wwww.mysite.com/redirect.php?link=LINKHERE 我个人无法对链接进行编码,所以有没有办法通过 PHP 做到这一点?以上是关于抓取重定向的目标链接的主要内容,如果未能解决你的问题,请参考以下文章