Curl - как НЕ выкачивать файл с сервера? - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB89.7026
BTC/USD68611.2498
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 10.06.2011, 14:55   #1
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию Curl - как НЕ выкачивать файл с сервера?

в серверном браузере на курле, когда загружаю html-страницу, приходится тянуть много не нужных ресурсов: js, картинки и тд.

как сэкономить трафик? т.е. надо курлом сделать вид, что файл выкачиваю, а на самом деле нет.
Причем, в логах веб-сервера должно остаться, что файл выкачался.

CURLOPT_NOBODY = 1 - не помогает, в логах пишется "ноль байт послано"

мож делать curl_close в header callback функции?
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 10.06.2011, 15:09   #2
0xDEAD
Senior Member
 
Аватар для 0xDEAD
 
Регистрация: 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)));
0xDEAD вне форума  
Старый 10.06.2011, 15:12   #3
oso
кодер
 
Аватар для oso
 
Регистрация: 21.01.2008
Сообщений: 315
Бабло: $69585
По умолчанию

Можно вот так, но это вызывает ошибку у курла
PHP код:
$r $x '';
...
curl_setopt($crCURLOPT_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 ноль два шесть
oso вне форума  
Старый 10.06.2011, 16:22   #4
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 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 тоже ошибка, они похожи


если еще есть способы - буду рад, актуально
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 10.06.2011, 16:51   #5
sspy
главный злодей гофака
 
Аватар для sspy
 
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953848
По умолчанию

CURLOPT_LOW_SPEED_LIMIT - 999999999 и CURLOPT_LOW_SPEED_TIME - 1
получится что файл качается одну секунду и рвется соединение
__________________
sspy вне форума  
Старый 10.06.2011, 16:52   #6
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
По умолчанию

Тогда в логе сервера так и будет - скачано 200 байт
Drunk Monk вне форума  
Старый 10.06.2011, 18:37   #7
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 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, но это вроде баг его, надо обновить
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 11.06.2011, 00:16   #8
Gyrus
Member
 
Регистрация: 16.01.2008
Сообщений: 86
Бабло: $11570
По умолчанию

По-моему, ключевое слово тут "байт послано". Т.е. сервер сам пишет, сколько байт фактически отправлено клиенту. И сам клиент - никак не сможет сказать серверу записать Х байт послано, при фактически отправленых Y байт...
Gyrus вне форума  
Старый 11.06.2011, 09:13   #9
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от Gyrus Посмотреть сообщение
По-моему, ключевое слово тут "байт послано". Т.е. сервер сам пишет, сколько байт фактически отправлено клиенту. И сам клиент - никак не сможет сказать серверу записать Х байт послано, при фактически отправленых Y байт...
см пример выше, апач вписал 200 98043925, хотя курл оборвал соединение после первой секунды.
То, что логи пишет веб-сервер сам - это да, но он не всегда такой умный.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума