Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
CURL и удаленный забор изображений
Новая тема
Ответить
цитата
04/07/07 в 20:18
Sterx
юзаю
Код:
function remote_file ($site_url,$refer,$tmp_name,$target_directory)
{
$timeout=20;
$user_agent = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $site_url);
curl_setopt($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$tmp_result = curl_exec($ch);
curl_close($ch);
save_html($target_directory,$tmp_name,$tmp_result);
if($tmp_result){return true;}
else{return false;}
}
function save_html($path,$page,$html)
{
$file = fopen( $path.$page, "w");
fwrite( $file, $html);
fclose( $file );
chmod ( $path.$page, 0777);
}
имиджи от 100 до 200 кб
функция иногда пишет имиджи с нулевым размером
идет дальнейший затык
где копать?
+8
Последний раз редактировалось: Sterx (
04/07/07 в 21:02
), всего редактировалось 2 раз(а)
цитата
04/07/07 в 20:23
proc3nt
Что-то в коде функции не увидел curl_exec
Для пущей уверенности покажи функцию save_html
цитата
04/07/07 в 20:47
Stek
гм, по идее вообще не должно работать , процесс закрывается а вызов так и не инициализируется.
Или же все таки вызов закачки в другом месте находится.
цитата
04/07/07 в 20:54
Sterx
поправил, сории
цитата
04/07/07 в 20:59
lega_cobra
Уже вижу одну ошибку. по которой у меня реджектятся все роботы отечественного производства. Надо же, кто-то один глупость ляпнул, и, как радости вебмастерам, эту ошибку копируют из одного места в другое
цитата
04/07/07 в 21:00
Stek
все равно не должно работать
curl_exec выплевывает результат на вывод. Где то ты должен открыть буфер, вызвать curl_exec и потом закрыть буфер. И уже с буфера взять контент.
цитата
04/07/07 в 21:03
Sterx
седня потерянный я
curl_setopt($ch, CURLOPT_NOBODY, 1);
забыл
цитата
04/07/07 в 21:08
Sterx
да
на другом хосте и в другом скрипте функция работает без глюков, вот парадокс
цитата
04/07/07 в 21:12
Stek
а не, нормально, какая то новая CURLOPT_RETURNTRANSFER директива смотрю уже есть.
В общем могу только предложить таймауты увеличить, ну или обновить курл, он возможно багит.
У меня немного по другому используется, я делаю вывод в буфер, а функция curl_exec отрабатывает только true / false , т.е. четко определяя, была ошибка или нет. Еще по хедерам конечно проверяю, что бы небыло редиректов или 404
цитата
04/07/07 в 22:28
proc3nt
Все равно в коде не нашел где картинки забираются
Вижу только что html код страницы сохраняется
цитата
04/07/07 в 22:45
Sterx
там боди файла забирается
а html название переменной. не суть
в итоге выкинул курл и обчная конструкция заработала
fread-fwrite
чудеса на виражах
цитата
04/07/07 в 22:49
Sterx
ндя поторопился
цитата
04/07/07 в 23:00
brainstorm
а все просто - тебе отдается пустой контент с редиректом 302 или навроде.
на php.net в доке был пример обхода.
цитата
04/07/07 в 23:32
Sterx
если CURL'ом забирать тумбинашки все работает
а полноразмерные нифига
надыбал два парметра еще
curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, ?);
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, ?);
может оно?
цитата
04/07/07 в 23:35
Sterx
я проверяю картинки на 200 код
цитата
04/07/07 в 23:56
webboxxx
ты хочешь сказать, что с этой опцией у тебя вообще что то работает?
curl_setopt($ch, CURLOPT_NOBODY, 1);
когда CURLOPT_NOBODY == TRUE, из результата исключается тело, остается только заголовок. далее, если при этом еще и отключен вывод заголовка (CURLOPT_HEADER=0), то в выводе останется тока борода
кстати, при передаче бинарных файлов надо бы ставить опцию CURLOPT_BINARYTRANSFER.
Последний раз редактировалось: webboxxx (
05/07/07 в 00:00
), всего редактировалось 1 раз
цитата
04/07/07 в 23:59
brainstorm
Sterx писал:
я проверяю картинки на 200 код
ты не понял
порой как раз от таких роботов и стоит защита.
идет редирект 302, 301 и тд
Отлавливаешь куда идет - см. документацию как. берешь новый урл и снова тащиш курлом и так пока не сольешь картинку.
цитата
05/07/07 в 00:01
webboxxx
brainstorm писал:
Отлавливаешь куда идет - см. документацию как. берешь новый урл и снова тащиш курлом и так пока не сольешь картинку.
все гораздо проще - специально для этого придумали опции CURLOPT_FOLLOWLOCATION и CURLOPT_MAXREDIRS.
цитата
05/07/07 в 00:24
Sterx
webboxxx писал:
ты хочешь сказать, что с этой опцией у тебя вообще что то работает?
curl_setopt($ch, CURLOPT_NOBODY, 1);
не то вообще скопировал.
заработался
пробую что все говорите, ничего резалт тот же
как вообще отследить из-за чего рвется коннект
цитата
05/07/07 в 00:26
Sterx
вся фишка в том, что картинки скачиваются, но не все
цитата
05/07/07 в 01:00
webboxxx
перед curl_close($ch) поставь echo '<pre>'.print_r(curl_getinfo($ch),1).'</pre>';
результат сюда кидай
цитата
05/07/07 в 01:07
Sterx
Array
(
[url] =>
http://-------.us/photos/121531.jpg
[content_type] => image/jpeg
[http_code] => 200
[header_size] => 253
[request_size] => 170
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 2.430741
[namelookup_time] => 3.3E-05
[connect_time] => 0.166738
[pretransfer_time] => 0.166778
[size_upload] => 0
[size_download] => 102060
[speed_download] => 41987
[speed_upload] => 0
[download_content_length] => 102060
[upload_content_length] => 0
[starttransfer_time] => 0.360214
[redirect_time] => 0
)
цитата
05/07/07 в 01:28
Klirik
в реферере передай полный путь до папки со скачиваемой картинкой, т.е. "http://domen.com/полный путь до папки с картинкой/"
цитата
05/07/07 в 01:31
Cibtor
Использую сокеты, с анализом ответов - ни разу проблем не было.
цитата
05/07/07 в 01:31
webboxxx
ну, вот показывает, что [size_download] => 102060
и что, в $tmp_result пусто чтоли при этом?
после $tmp_result = curl_exec($ch); сделай все таки echo strlen($tmp_result).' '.$tmp_result;
и я настаиваю на (CURLOPT_BINARYTRANSFER, 1)
Стр.
1
,
2
>
последняя »
Новая тема
Ответить
Эта страница в полной версии