PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
rgl
Отправлено: 11 Марта, 2021 - 17:07:52
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Авг. 2017  
Откуда: замкадье


Помог: 1 раз(а)




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

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

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

Что НЕ надо 1. параллельное скачивание. 2. записывать скачанные данные на диск.
 
 Top
Мелкий Супермодератор
Отправлено: 11 Марта, 2021 - 17:48:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11906
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 616 раз(а)




Смотрите в сторону этих констант:
PHP:
скопировать код в буфер обмена
  1. curl_setopt($ch, CURLOPT_TIMEVALUE, $filemtime);
  2. curl_setopt($ch, CURLOPT_TIMECONDITION, CURLOPT_TIMECOND_IFMODIFIEDSINCE);


Для нескольких запросов последовательно в рамках одного tcp коннекта не делайте curl_close, а формируйте следующий запрос в рамках всё того же ресурса.


-----
PostgreSQL DBA
 
 Top
rgl
Отправлено: 15 Марта, 2021 - 17:06:06
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Авг. 2017  
Откуда: замкадье


Помог: 1 раз(а)




Не получилось этим способом, все равно возвращает 200 и полностью страницу. Но поискал информацию еще, и вопрос решил так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. curl_setopt($ch, CURLOPT_HTTPHEADER , array('If-None-Match: "b65-5bd9269c5d140"'));

куда подставляю предыдущее значение ETag
В любом случае спасибо.
 
 Top
rgl
Отправлено: 16 Марта, 2021 - 15:31:51
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Авг. 2017  
Откуда: замкадье


Помог: 1 раз(а)




Удалил (было про connection: keep-alive, но опыты показали что, похоже, сервер на это не обращает внимания, т.е. независимо от того, что написать (keep-alive, close, или вообще ничего) все равно работает как если бы keep-alive)

(Отредактировано автором: 17 Марта, 2021 - 17:33:18)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Работа с сетью »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB