2012-01-26 25 views
1

いくつかのリンクを含むページを解析しようとしています。これらのリンクをクリックすると、ダウンロードするファイルにリダイレクトされます。ダウンロードリンクのURLを取得する方法

たとえば<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はヘッダーが含まれていると私はそれからリンクすることができます。

答えて

1

出力がスクリーンに送信される理由は、cURLにそうするように指示しているからです。あなたは変数に応答に次の行を格納する場合:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);

は次のようになります。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);その後

が、実際にそうようcurl_execから返された出力を取り出す:

$output = curl_exec($ch);

返された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、あなたがあなたのページのHTMLソースを表示する場合も、(ページを表示するには[ちょうどecho変数他に、htmlentities()を使用しますgoogleにリダイレクト])。 $varx変数で

<?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); 
?> 

、あなたが対象となるデータと一致するように正規表現を使用しています。

関連する問題