Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: curl скачать несколько файлов с одного хоста
Форумы портала PHP.SU » » Работа с сетью » curl скачать несколько файлов с одного хоста

Страниц (1): [1]
 

1. rgl - 11 Марта, 2021 - 17:07:52 - перейти к сообщению
Что нужно: скачать несколько файлов (немного, скажем, 3-5) с одного хоста. Можно конечно использовать file_get_contents, но это не производительно 1) функция открыват каждый раз новое соединение 2) функция скачивает файл даже если он не поменялся с прошлого скачивания.
Написал мануальный запрос (через сокеты), к сожалению, работает только на http, а если https - нет.

Итак, что я хочу:
1. Подсоединиться к хосту
2. Отправить запрос, в заголовке которого указано, какой файл у меня есть (дата-время и/или etag). Если файл с тех пор обновился, скачать (в память, НЕ на диск), если нет, получить код 304
3. не разрывая соединения, сделать то же самое для второго и третьего файла.

Я не прошу написать за меня, буду признателен если подскажете последовательность функций, которые нужно вызывать, а подробности я уже прочитаю в описании этих функций.

Что НЕ надо 1. параллельное скачивание. 2. записывать скачанные данные на диск.
2. Мелкий - 11 Марта, 2021 - 17:48:38 - перейти к сообщению
Смотрите в сторону этих констант:
PHP:
скопировать код в буфер обмена
  1. curl_setopt($ch, CURLOPT_TIMEVALUE, $filemtime);
  2. curl_setopt($ch, CURLOPT_TIMECONDITION, CURLOPT_TIMECOND_IFMODIFIEDSINCE);


Для нескольких запросов последовательно в рамках одного tcp коннекта не делайте curl_close, а формируйте следующий запрос в рамках всё того же ресурса.
3. rgl - 15 Марта, 2021 - 17:06:06 - перейти к сообщению
Не получилось этим способом, все равно возвращает 200 и полностью страницу. Но поискал информацию еще, и вопрос решил так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. curl_setopt($ch, CURLOPT_HTTPHEADER , array('If-None-Match: "b65-5bd9269c5d140"'));

куда подставляю предыдущее значение ETag
В любом случае спасибо.
4. rgl - 16 Марта, 2021 - 15:31:51 - перейти к сообщению
Удалил (было про connection: keep-alive, но опыты показали что, похоже, сервер на это не обращает внимания, т.е. независимо от того, что написать (keep-alive, close, или вообще ничего) все равно работает как если бы keep-alive)

 

Powered by ExBB FM 1.0 RC1