|
| Дата |
|
USD/RUB | 89.7026 | BTC/USD | 68611.2498 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
10.06.2011, 14:55
|
#1
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Curl - как НЕ выкачивать файл с сервера?
в серверном браузере на курле, когда загружаю html-страницу, приходится тянуть много не нужных ресурсов: js, картинки и тд.
как сэкономить трафик? т.е. надо курлом сделать вид, что файл выкачиваю, а на самом деле нет.
Причем, в логах веб-сервера должно остаться, что файл выкачался.
CURLOPT_NOBODY = 1 - не помогает, в логах пишется "ноль байт послано"
мож делать curl_close в header callback функции?
|
|
|
10.06.2011, 15:09
|
#2
|
Senior Member
Регистрация: 03.11.2009
Сообщений: 151
Бабло: $20330
|
А если сделать вид, что мы уже закэшировали этот файл?
Правда не уверен, что все веб-сервера поддерживают этот заголовок, но возможно для твоего случая подойдет
Код:
curl_setopt($ch, CURLOPT_HTTPHEADER, array("If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T',time()+60*60*60*60)));
|
|
|
10.06.2011, 15:12
|
#3
|
кодер
Регистрация: 21.01.2008
Сообщений: 315
Бабло: $69585
|
Можно вот так, но это вызывает ошибку у курла
PHP код:
$r = $x = '';
...
curl_setopt($cr, CURLOPT_WRITEFUNCTION,'write_callback');
...
curl_exec($cr);
...
echo $r;
function write_callback($ch, $data)
{
global $x,$r;
$x+=strlen($data);
$r.=$data;
if ($x>10000) return 0;
return strlen($data);
}
__________________
php скрипты от $25 Отзывы: 2013-2011, 2010, 2009. acя: 384 846 ноль два шесть
|
|
|
10.06.2011, 16:22
|
#4
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
|
ТС
Цитата:
Сообщение от 0xDEAD
А если сделать вид, что мы уже закэшировали этот файл?
Правда не уверен, что все веб-сервера поддерживают этот заголовок, но возможно для твоего случая подойдет
Код:
curl_setopt($ch, CURLOPT_HTTPHEADER, array("If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T',time()+60*60*60*60)));
|
это уже немного другое - кеш браузера(он тоже будет отдельной фичей) и на сервере останется 304 и 0 байт отправленных клиенту
с другой стороны, почему бы инет по крайне мере лучше, чем "HEAD 200" и 0 байт
oso, ага, ошибку дает,
в CURLOPT_HEADERFUNCTION тоже ошибка, они похожи
если еще есть способы - буду рад, актуально
|
|
|
10.06.2011, 16:51
|
#5
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953848
|
CURLOPT_LOW_SPEED_LIMIT - 999999999 и CURLOPT_LOW_SPEED_TIME - 1
получится что файл качается одну секунду и рвется соединение
__________________
|
|
|
10.06.2011, 16:52
|
#6
|
Je suis moine ivre
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
|
Тогда в логе сервера так и будет - скачано 200 байт
|
|
|
10.06.2011, 18:37
|
#7
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
|
ТС
Цитата:
Сообщение от sspy
CURLOPT_LOW_SPEED_LIMIT - 999999999 и CURLOPT_LOW_SPEED_TIME - 1
получится что файл качается одну секунду и рвется соединение
|
а тоже вариант, жаль соединение обрывается, но по-другому, видимо, никак
курл:
Цитата:
* Operation too slow. Less than 999999999 bytes/sec transferred the last 1 seconds
* Closing connection #0
|
апач:
Цитата:
"GET /file.tgz HTTP/1.0" 200 98043925 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1)"
|
правда nginx у меня пишет код ответа 499, но это вроде баг его, надо обновить
|
|
|
11.06.2011, 00:16
|
#8
|
Member
Регистрация: 16.01.2008
Сообщений: 86
Бабло: $11570
|
По-моему, ключевое слово тут "байт послано". Т.е. сервер сам пишет, сколько байт фактически отправлено клиенту. И сам клиент - никак не сможет сказать серверу записать Х байт послано, при фактически отправленых Y байт...
|
|
|
11.06.2011, 09:13
|
#9
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
|
ТС
Цитата:
Сообщение от Gyrus
По-моему, ключевое слово тут "байт послано". Т.е. сервер сам пишет, сколько байт фактически отправлено клиенту. И сам клиент - никак не сможет сказать серверу записать Х байт послано, при фактически отправленых Y байт...
|
см пример выше, апач вписал 200 98043925, хотя курл оборвал соединение после первой секунды.
То, что логи пишет веб-сервер сам - это да, но он не всегда такой умный.
|
|
|
|