2012-01-26 144 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變量,使用正則表達式匹配你想要的數據。