





$ch = curl_init('http://www.yahoo.com/');
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (($code == 301) || ($code == 302)) {
//This was a redirect
}
Попробуйте использовать обычный cURL ... он должен направить вас туда, куда он хочет, чтобы вы пошли.
Хороший ответ, который должен охватывать почти все возможные случаи. Я считаю, что 303 и 307 также представляют собой перенаправления, хотя они гораздо менее распространены - я видел их только в спецификациях, а не в реальном мире.
Стоит отметить, что вы захотите добавить curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);, если хотите сделать что-то вроде $data = curl_exec($ch) вместо отправки результатов в браузер.
На самом деле, мне показалось, что это работает лучше всего:
function GetURL($URL)
{
$ch = curl_init($URL);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
return $code;
}
Помните, что ни один из ответов, которые обычно даются на этот вопрос, не учитывает перенаправление, вызванное javascript, закодированным в возвращенном документе (или, я думаю, тегом мета-обновления в HTML). Так что вполне возможно, что что бы вы ни пропустили определенные виды «редиректов» при тестировании с использованием такого кода.
К сожалению, единственный способ обойти это - открыть веб-страницу в реальном браузере и изменить его таким образом, чтобы он сообщал о перенаправлениях javascript и мета-обновления.
Ваше здоровье!
На самом деле, вы можете использовать движок javascript, который есть в Mozilla, хотя я не могу вспомнить его название в данный момент. Но да, вы правы в том, что curl не улавливает перенаправление javascript.
Круто - есть ли способ узнать, куда он хочет перенаправить?