如何获取下载链接的URL

时间:2012-01-26 15:34:24

标签: php curl

我正在尝试解析包含一些链接的页面。如果遵循这些链接,将重定向到某些文件进行下载。

例如,<a href="http://example.com/file.php"> Download </a>重定向到<a href="http://example.com/1.pdf"

我不想下载文件,我只想获取文件链接(在本例中为http://example.com/1.pdf)。

我正在尝试这个:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);     // Return in string
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
var_dump(curl_getinfo($ch));

但是,它给了我文件内容。

有没有人知道如何做到这一点?

== EDIT ==
感谢你们。我这样解决了:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_exec($ch);
$info = curl_getinfo($ch);

现在,$info包含标题,我可以从中获取链接。

3 个答案:

答案 0 :(得分:1)

将输出发送到屏幕的原因是因为您要告诉cURL这样做。如果要将响应存储在变量中,请执行以下行:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);

应为:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

然后,实际上从curl_exec检索返回的输出,如下所示:

$output = curl_exec($ch);

$output变量中的远程页面获取返回的HTML内容后,您可以使用DOMdocs或正则表达式(但最好是DOM )来解析您的任何信息想。

<强>更新

我无法说明,因为问题含糊不清:实际上是否有位置标题重定向?如果是这样,你就会像@heiko建议那样阻止cURL跟踪重定向并检索标题。然后,您可以轻松地解析位置标题的内容:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLINFO_HEADER, TRUE); // add header output

答案 1 :(得分:1)

# make sure to not follow Location: Header
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
# add Response Header to Output, so that you can find the Location-Header in there!
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);

答案 2 :(得分:1)

如果您想在页面上显示HTML源代码,请使用RETURN TRANSFER as 1,也可以使用htmlentities(),否则只需echo变量(显示页面[重定向到Google])。< / p>

<?php
$url = "http://www.google.co.in";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     // Return in string
curl_setopt($ch, CURLOPT_URL, $url);
$varx = curl_exec($ch);
echo htmlentities($varx);
?>

使用$varx变量,使用正则表达式来匹配您想要的数据。