Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ICS + gzip (zlib), THttpCli 
V
    Опции темы
Akella
  Дата 10.9.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Некоторые сайты отдают контент в сжатом виде. Я не могу понять, как мне заставить компоненту THttpCli "разжать" контент или получать уже "разжатый" контент.

Это сообщение отредактировал(а) Akella - 10.9.2010, 22:21
PM MAIL   Вверх
Matematik
Дата 10.9.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



В synaptic просто получал в AnsiString пожатую страницу, проверял заголовок "Content-Encoding: gzip", сигнатуру #$1F#$8B#$08#$00
и распаковывал ф-ей GZDecompressStr() из библиотеки http://www.base2ti.com/?id=delphi.zlib

Код

function IsGZipData(const AData: AnsiString): Boolean;
begin
  // if  Copy(buf,1,4)=#$1F#$8B#$08#$00 then
  Result := (Length(AData)>4) and (PInteger(AData)^=$00088B1F);
end;


В случае ошибки GZDecompressStr() вызывает исключение, бывает сервера шлют битый gzip, тогда делал еще один запрос без заголовка "Accept-Encoding: gzip", соответственно получал несжатую страницу. 

PS
в библиотеке есть ошибка - если размер упакованных данных ==ноль - получаю AV, т.к. нет проверки переменной size
написал автору письмо, но пока без изменений
вот этот кусочек
Код

procedure GZDecompressString(var result: AnsiString; const s: RawByteString;
  var fileName, comment: AnsiString; var dateTime: TDateTime);
var
  index: Integer;
  crc  : Longint;
  size : Integer;
begin
  result := '';
  GZInitializeDecompressString(s, fileName, comment, dateTime, index);
  size := Length(s) - SizeOf(TGZTrailer) - index + 1;
  ZDecompressString2(result, Copy(s, index, size), GZ_ZLIB_WINDOWBITS);
  size := Length(result);
  if size>0 then // этой проверки не было
  begin
    crc := ZCrc32(0, result[1], size);
    GZFinalizeDecompressString(s, crc, size);
  end;
end;

PM MAIL WWW ICQ   Вверх
Akella
Дата 10.9.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



кошмар... но в ICS должны быть родные способы работы со сжатым контентом
PM MAIL   Вверх
Matematik
Дата 11.9.2010, 09:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Глянул одним глазом ics, нашел файлик OverbyteIcsHttpCCodZLib.pas, и судя по исх. коду его надо просто добавить в uses.
PM MAIL WWW ICQ   Вверх
Akella
Дата 13.9.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Да, 2 файла (OverbyteIcsZlib.inc и OverbyteIcsHttpCCodZLib.pas) нужно закинуть в папку, где все dcu этой библиотеки хранятся и прописать OverbyteIcsHttpCCodZLib в USES.

Matematik, +1, спасибо  smile 

Это сообщение отредактировал(а) Akella - 13.9.2010, 08:59
PM MAIL   Вверх
Akella
Дата 13.9.2010, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Ничего не пойму. Работал код, работал и вот те на. Резко всё вернулось на круги своя.
В USES OverbyteIcsHttpCCodZLib не убирал. Опять ICS(HttpCli) не распаковывает полученный контент   smile  smile  smile 

PM MAIL   Вверх
RA
Дата 4.10.2010, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Цитата(Akella @  13.9.2010,  16:55 Найти цитируемый пост)
Ничего не пойму. Работал код, работал и вот те на. Резко всё вернулось на круги своя.
В USES OverbyteIcsHttpCCodZLib не убирал. Опять ICS(HttpCli) не распаковывает полученный контент 



Если в HttpCli собираешься использовать Gzip то не забудь включить тумблер 

Код


 HttpCli.Options  := [httpoEnableContentCoding];


PM   Вверх
Akella
Дата 11.10.2010, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



RA, а если его включить и оставить включенным постоянно для всех (разных) сайтов? Можно так?
PM MAIL   Вверх
RA
Дата 16.11.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Цитата(Akella @  11.10.2010,  10:32 Найти цитируемый пост)
а если его включить и оставить включенным постоянно для всех (разных) сайтов? Можно так? 


Эт не знаю не проверял.

Добавлено @ 16:11
ps: Некоторые провайдеры сами разжимают входящий к клиенту гзип трафик, а некоторые нет, так что тут может оказать очень серьёзная подстава ... поэтому на всякий случай сделаю тут маленькую рекламку 
http://www.fiddler2.com Web debugging proxy

Это сообщение отредактировал(а) RA - 16.11.2010, 16:11
PM   Вверх
Akella
Дата 16.11.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Цитата(RA @  16.11.2010,  16:02 Найти цитируемый пост)
случай сделаю тут маленькую рекламку 

Ты уж тогда опиши, что это и с чего его едят.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.