2013-07-04 2 views
8

У меня есть эта ссылка:PHP получить URL перенаправления из исходного URL

http://libero-news.it.feedsportal.com/c/34068/f/618095/s/2e34796f/l/0L0Sliberoquotidiano0Bit0Cnews0C12735670CI0Esaggi0Eper0Ele0Eriforme0Ecostituzionali0EChiaccherano0Ee0Eascoltano0Bhtml/story01.htm

Если вы посетите его, это стало:

http://www.liberoquotidiano.it/news/1273567/I-saggi-per-le-riforme-costituzionali-Chiaccherano-e-ascoltano.html

Как я могу получить вторую ссылку из первый?

Я попытался это, но не работают, возвращая мне ту же самую первую ссылку:

<?php 
$url="http://libero-news.it.feedsportal.com/c/34068/f/618095/s/2e34796f/l/0L0Sliberoquotidiano0Bit0Cnews0C12735670CI0Esaggi0Eper0Ele0Eriforme0Ecostituzionali0EChiaccherano0Ee0Eascoltano0Bhtml/story01.htm"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$a = curl_exec($ch); 
print_r($a);echo"<br>"; 
if(preg_match('#Location: (.*)#', $a, $r)){ 
$l = trim($r[1]); 
echo $l; 
}else echo "not working"; 
?> 

Спасибо большое.

+0

В коде есть ли код? 'curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, true);' – HamZa

+1

Я не понимаю – michele

+0

Извините, я проверил исходный код. Браузер перенаправлен с помощью javascript. Таким образом, вам нужно прочитать код html/js, проанализировать его, получить URL-адрес, а затем получить контент с этого url ... – HamZa

ответ

2

Конечный URL-адрес запроса можно получить с помощью curl_getinfo.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
+0

это не может быть использовано в этом примере, первый щелчок ссылки просто содержит объявление и ссылку на вторую ссылку. это не перенаправление заголовка. Он только становится перенаправлением заголовка, когда пользователь щелкнул его один раз и имеет cookie, я предполагаю ... – rorypicko

+0

ОШИБКА: 'PHP Предупреждение: curl_setopt() ожидает, что параметр 1 будет ресурсом, строка' –

28

С помощью @king-isaac был проверен следующий код и он работает.

<?php 

$url="http://libero-news.it.feedsportal.com/c/34068/f/618095/s/2e34796f/l/0L0Sliberoquotidiano0Bit0Cnews0C12735670CI0Esaggi0Eper0Ele0Eriforme0Ecostituzionali0EChiaccherano0Ee0Eascoltano0Bhtml/story01.htm"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Must be set to true so that PHP follows any "Location:" header 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$a = curl_exec($ch); // $a will contain all headers 

$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // This is what you need, it will return you the last effective URL 

// Uncomment to see all headers 
/* 
echo "<pre>"; 
print_r($a);echo"<br>"; 
echo "</pre>"; 
*/ 

echo $url; // Voila 
?> 
+0

Хорошее решение, можете ли вы добавить поддержку коки? см. [этот редиректор DOI] (http://doi.org/10.1016/S1473-3099 (16) 30318-8), возвращая http://secure.jbs.elsevierhealth.com/action/cookieAbsent –

Смежные вопросы