Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2016, 18:05   #1
albionseo
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 17
По умолчанию Synapse Gzip декодировать

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

Код:
     HTTP := THTTPSend.Create;
     HTTP.MimeType:='application/x-www-form-urlencoded';
     HTTP.Headers.Add('Accept-Encoding: gzip');
     HTTP.Protocol:='1.1';
     HTTP.Document.LoadFromStream(stream);
     HTTP.HTTPMethod('POST', 'https://login.bgoperator.ru/auth');
     Memo1.Lines.LoadFromStream(HTTP.Document);
     Memo1.Text:=Utf8ToAnsi(Memo1.Text);


     HTTP.Headers.Clear;
     HTTP.MimeType:='application/x-www-form-urlencoded';
     HTTP.Headers.Add('Accept-Encoding: gzip');
     HTTP.Protocol:='1.0';
     HTTP.HTTPMethod('GET', 'http://export.bgoperator.ru/yandex?action=resorts');
     Memo1.Lines.LoadFromStream(HTTP.Document);

Последний раз редактировалось Alex11223; 21.09.2016 в 19:05.
albionseo вне форума Ответить с цитированием
Старый 21.09.2016, 18:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

наткнулся на это, может поможет.
http://www.webdelphi.ru/2011/06/ispo...zip-v-synapse/
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2016, 18:52   #3
albionseo
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
наткнулся на это, может поможет.
http://www.webdelphi.ru/2011/06/ispo...zip-v-synapse/
Да, находил это, в мемо пусто
albionseo вне форума Ответить с цитированием
Старый 21.09.2016, 18:54   #4
albionseo
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 17
По умолчанию

и кстати вот этой процедуры нет - ReadStrFromStream
albionseo вне форума Ответить с цитированием
Старый 21.09.2016, 18:55   #5
albionseo
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 17
По умолчанию

а еще забыл написать, в инди тоже самое
albionseo вне форума Ответить с цитированием
Старый 21.09.2016, 20:21   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
и кстати вот этой процедуры нет - ReadStrFromStream
она в модулях синапса лежит где-то (не помню где), поищите объявление функции.

Для декомпрессии GZip использовал ZLibExGZ модуль вот так:
Код:
function THTTPSendEx.HTTPMethodGET(const aURL: string): Boolean;
var
  MemStream: TMemoryStream;
  bOK: Boolean;
begin
  fWork_WorkSizeBegin := 0;
  fWork_WorkSizeCurrent := 0;
  fWork_TimeStart := 0;
  fWork_TimeLeft := 0;
  fWork_TimeEnd := 0;
  fWork_TimeCurrent := 0;
  fWork_SpeedCurrent := 0;
  // HEAD(aURL);
  fWork_WorkSizeBegin := GetDataLength;
  Document.Clear;

  if (MIMEType = EmptyStr) or (MIMEType = 'application/x-www-form-urlencoded') then
    MIMEType := 'text/html'; // It's default
  bOK := True;
  MemStream := TMemoryStream.Create;
  try

    if fGZIPAllowed then
      Headers.Add('Accept-Encoding: gzip, deflate');
    fWork_TimeStart := GetTickCount;
    SetWorkBegin(fWork_WorkSizeBegin, False);
    Result := HTTPMethod('GET', aURL);
    if GetIsRedirect then
    begin
      Headers.NameValueSeparator := ':';
      fLocation := Trim(Headers.Values['Location']);
      Headers.NameValueSeparator := '=';
    end
    else
      fLocation := '';
    fWork_TimeEnd := GetTickCount;
    if fGZIPAllowed and (Pos('content-encoding: gzip', LowerCase(Headers.Text)) > 0) then
    begin
      try
        GZDecompressStream(Document, MemStream);
      except
        bOK := False;
      end;

      if bOK then
      begin
        Document.Clear;
        Document.LoadFromStream(MemStream);
      end;
    end;
    SetWorkEnd;
  finally
    FreeAndNil(MemStream);
  end;
end;
У меня своя обёртка над синапсом, вам важно только понять как использую GZDecompressStream

Последний раз редактировалось Человек_Борща; 21.09.2016 в 20:23.
Человек_Борща вне форума Ответить с цитированием
Старый 21.09.2016, 22:11   #7
albionseo
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 17
По умолчанию

ну по идее так
PHP код:
     GZDecompressStream(HTTP.DocumentMemStream);
     
memo1.Lines.LoadFromStream(MemStream); 
но ничего нет
albionseo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GZIP der90 PHP 3 29.04.2014 11:05
Неправильное магическое число в заголовке GZip. Передача должна идти в поток GZip. MyXa C# (си шарп) 0 19.08.2012 10:20
Декодировать изображение Motaro44 Помощь студентам 2 20.06.2011 10:38
Декодировать текст Terikon Общие вопросы Delphi 3 30.06.2010 09:16