cURL + Редирект 302

Статус
В этой теме нельзя размещать новые ответы.

alexz15

Постоялец
Регистрация
3 Окт 2008
Сообщения
394
Реакции
194
Здравствуйте.
У меня такая задача:
я веду поиск по определенным картинкам, например с номерами как 12345. они находятся по адресу sayt.ru/12345.jpg и т.д.
Т.е. я просто отправляю get запрос из формы (12345) и открывается адрес с картинкой (в теге < img >). Но если картинки по этому адресу нет, то происходит редирект 302 (на сайте с картинками). А мне нужно автоматически распознать редирект и начать поиск по другому критерию, например 12345-2.
Скажите, каким образом мозно распознать редирект и начать новый поиск? Я пробовал с помощью этого:
PHP:
$size = getimagesize($full_url);
$fp = fopen($full_url, "rb");
if ($size && $fp) {
    header("Content-type: {$size['mime']}");
    fpassthru($fp);
    exit;
} else { ...
работает, но открывается очень долго.
тогда я попробовал с cURL:
PHP:
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

  $ch = curl_init();
  
  curl_setopt($ch, CURLOPT_URL, $full_url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  
  header("Content-type: {$size['mime']}");
  
  $content = curl_exec($ch);
  $content="HTTP/1.1 ".curl_getinfo($ch,CURLINFO_HTTP_CODE).$content;
  
  $out=explode("\r\n",$content);
  return $out; 
  curl_close($ch);
Но если редирект, то пишет: 302 Found
Как можно распознать редирект? Может есть другие способы кроме этих. Заранее благодарен.
 
В curl есть опция получения заголовков.
Получайте заголовок и сравнивайте с 302.
 
То есть как распознать?
Просто смотришь что вернул скрипт, если там есть напр HTTP/1.1 302 Found. Значит редирект.
 
Вот, вроде работает :) :
PHP:
$img = '<img src="'.$url.'"></img>';
//  Проверка доступности URL с помощью CURL
function check_url2($url) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 0);
	header("Content-type: {$size['mime']}");	
    if (!curl_exec($c)){return false; }
    $httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);
    if ($httpcode == 301 || $httpcode == 302){ 
    echo 'redirect';
    } else {
    echo $img;
    }
    return ($httpcode < 400);    
}
Если что-то неправильно, то поправьте плз.
 
хз конечно что у тебя за ситуация

но обычно редирект идет на адрес картинки которая есть , т.е. в твоем случае на 12345-2.jpg

для такого случая достаточно
PHP:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
установи 1 и курл сам будет проходить по редиректам через
для тебя всебудет прозрачно

и кстати что бы получать header в ответе курла достаточно
PHP:
curl_setopt($ch, CURLOPT_HEADER, 1);
а то я не совсем пойму твои извраты :(
 
хз конечно что у тебя за ситуация

но обычно редирект идет на адрес картинки которая есть , т.е. в твоем случае на 12345-2.jpg

для такого случая достаточно
PHP:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
установи 1 и курл сам будет проходить по редиректам через
для тебя всебудет прозрачно

и кстати что бы получать header в ответе курла достаточно
PHP:
curl_setopt($ch, CURLOPT_HEADER, 1);
а то я не совсем пойму твои извраты :(

В общем, я не сильно пока понимаю пхп, поэтому в кодах могут быть лишние команды и тд.
ситуация такая:
sayt.ru - чужой сайт с картинками,
я хочу найти (и открыть) картинку по адресу sayt.ru/catalog/12345.jpg со своего сайта, подставляя адрес
PHP:
$img = '<img src="http://sayt.ru/catalog/12345.jpg"></img>';
, но если ее по этому адресу нет, то происходит редирект на sayt.ru.
Но эта картинка еще может называться 12345-2.jpg, и, если скрипт видит что редирект, то пытается открыть ее по адресу http://sayt.ru/catalog/12345-2.jpg. Если ее и там нет, тогда Not Found.
Т.е. я ищу конкретную картинку по конкретному адресу.
Мне нужна такая функция, которая сразу определит-существует этот адрес или нет, если существует, то открыть картинку, если нет, то проверить другой адрес.
 
дай конкретный сайт и адрес картинки
а тобудем обсуждать Сферического коня в вакууме

на конкретике гораздо проще разбираться
 
Я делаю скрипт, для удобного просмотра превьюшек на TemplateMonster. Пишу его только ради удобства, т.к. чувствую, что буду частенько их просматривать. Скрипт, конечно, выложу в сети для общего доступа.
Но загорелось мне сделать более функциональный скрипт. Там обычно все превьюхи заканчиваются на "-b.jpg", но есть и такие, что на "-osc-b.jpg" и еще парочку. Например, как эта 18181-osc-b.jpg.
Решил использовать курл. но задача курла, должна заключаться Только в проверке на редирект: если редирект, то план Б; если снова редирект - план С.
Как мне это организовать? Мой последний скрипт вроде работает, только наверно там куча лишнего, а так же он кроме проверки еще и открывает картинку. Нужен совет по этому поводу.
Голова уже не варит.
 
Получай курлом только заголовки и проверяй их, опции CURLOPT_NOBODY и CURLOPT_HEADER.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху