2012-01-26 111 views
1

我想解析包含一些链接的页面。如果遵循这些链接,将重定向到一些要下载的文件。如何获取下载链接的URL

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

我不想下载该文件,我只是想获取文件链接(int在这种情况下为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)); 

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

有没有人有任何想法如何?

==编辑==
谢谢你们。我解决了它这样的:

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包含标题,我可以从它的链接。

回答

1

输出被发送到屏幕的原因是因为你告诉cURL这样做。如果你想存储在一个变量的响应以下行:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);

应改为:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

那么,究竟从curl_exec检索返回输出像这样:

$output = curl_exec($ch);

一旦你h从$output变量中的远程页面返回的HTML内容,您可以使用DOMdocs或正则表达式(,但最好是DOM)来解析出所需的任何信息。

UPDATE

我不能说,因为这个问题是措辞含糊:是里面居然Location头重定向发生了什么?如果是这样,你会希望按照@heiko的建议来阻止cURL遵循重定向并检索标题。然后,你可以很容易地解析位置标头中的内容:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
curl_setopt($ch, CURLINFO_HEADER, TRUE); // add header output 
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); 
1

使用RETURN TRANSFER as 1,还使用htmlentities()如果你想你的页面上显示HTML源代码,否则只是echo变量(在页面中显示[重定向到谷歌])。

<?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变量,使用正则表达式匹配你想要的数据。