Как получить URL ссылки для скачивания - PullRequest
2 голосов
/ 26 января 2012

Я пытаюсь разобрать страницу, которая содержит несколько ссылок.Эти ссылки, если следовать, будут перенаправлены на некоторые файлы для загрузки.

Например, <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));

Но, это дает мне содержимое файла.

Кто-нибудь знает, как это сделать?

== РЕДАКТИРОВАТЬ ==
Спасибо, ребята.Я решил это так:

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 ]

1 голос
/ 26 января 2012
# 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 голос
/ 26 января 2012

Используйте RETURN TRANSFER as 1, также используйте htmlentities(), если вы хотите отобразить источник HTML на своей странице, в противном случае просто echo переменную (для отображения страницы [перенаправляет на Google]).1006 * С переменной $varx используйте Регулярные выражения , чтобы сопоставить, какие данные вы хотите.

1 голос
/ 26 января 2012

Причина, по которой вывод отправляется на экран, заключается в том, что вы говорите cURL сделать это. Если вы хотите сохранить ответ в переменной, введите следующую строку:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);

следует читать:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

Затем на самом деле получить возвращенный вывод из curl_exec, например, так:

$output = curl_exec($ch);

Получив содержимое HTML с удаленной страницы в переменной $output, вы можете использовать DOM docs или регулярное выражение (, но желательно DOM ) для анализа любой информации, которую вы хотите.

UPDATE

Не могу сказать, потому что вопрос смутно сформулирован: действительно ли происходит перенаправление заголовка Location? Если это так, вы захотите сделать то, что @heiko предлагает не позволить cURL следовать за редиректом и получать заголовки. Затем вы можете легко проанализировать содержимое заголовка местоположения:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLINFO_HEADER, TRUE); // add header output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...