Перейти к содержанию
Fire Monkey от А до Я

notricky

Пользователи
  • Постов

    86
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные notricky

  1. Собственно поступаю я так - передаю по ссылке в процедуру reqReceiveData. 

    procedure TFMain.reqReceiveData(const Sender: TObject; AContentLength, AReadCount: Int64; var Abort: Boolean);
    begin
      if not PgbUpdate.Visible then
        PgbUpdate.Visible := true;
      PgbUpdate.Max := AContentLength;
      PgbUpdate.Value := AReadCount;
    end;

    Внутри процедуры соотв создается TNetHttpClient и TNetHttpRequest

    В деплое для WIN32 - все работает, показывается прогресс-бар, все скачивается и тд. Однако в деплое для ANDROID при 

    function TFMain.RunRequest(AUrl: String = ''; ARespStream: TBytesStream = nil; OnRcvData: TReceiveDataEvent = nil): TJSONObject;
    begin
    ...
      c := TNetHTTPClient.Create(nil);
      r := TNetHTTPRequest.Create(nil);
    ...
      r.OnReceiveData := OnRcvData; //если закомментировать - все ок. Если нет - то на следующем шаге подвисон.
      resp := r.Get(url, ARespStream);
    ...
    end;

    зависает. Если закомментировать присвоение процедуры ресива, то все скачивается (только без прогресса). Процедура используется для всех версий: WIN, IOS, ANDROID,MACOS и работает исправно.

    Кто что может сообщить по данному вопросу, вдруг кто сталкивался?

  2. Друзья, честно, объясните, если знаете. Почему в XE8 не работают куки?

    Даже если использовать AddAuthParameter , то когда доходит до TRestRequest.Execute, попадает в DoApplyCookieParams далее в цикле идет поиск куков и делается FClient.SetCookie внутри которого идет обращение к HTTPClient.AddServerCookie внутри которого только проверка на AllowCookies и все...

    Кто-нить может мне пояснить, как это вообще работает в таком случае?

  3. Не работает этот вариант с AddAuthParameter.

    Можете объяснить почему вы решили, что это должно сработать? Очень интересно. Дату, к примеру, не указать явным образом. В каком формате нужно передать Value?

  4. В 22.10.2016 в 09:34, ZuBy сказал:

    каков вопрос - таков ответ.

    Раскрывайте вопрос полностью, с описанием версии студии, использованных компонентов

    Вопрос был полностью раскрыт. Даже больше. Он идет непосредственно перед ответом. а то, что слили все в одну тему... так что поделать.

    В 22.10.2016 в 09:34, ZuBy сказал:

    UPDATE:

    
      RESTRequest1.AddAuthParameter('name','value',TRESTRequestParameterKind.pkCOOKIE);

     

    Логику я не понимаю, но попробую. ОТпишусь.

  5. [XE8]

    Хочу простую и банальную вещь: много запросов, но авторизация (через куки) только один раз. Как это сделать?

    То есть как подставлять в новые запросы полученные ранее куки?

     

    Я посмотрел код и пришёл в ужас. Я не понимаю, почему закомменчено

    unit REST.HttpClient;
    
    ...
    
    procedure TRESTHTTP.AddServerCookie(const ACookie, AURL: string);
    begin
      if FHTTPClient.AllowCookies then
    //    FHTTPClient.CookieManager.AddServerCookie(ACookie, AURL);
        ;       
    end;

    Почему не создается КукиМанагер (он nil).

    Почему все так сложно и через известное место? :(((( Ну и что с этим делать?

    Почему прямое AddCookie не даёт ожидаемого эффекта?

    Если проще забить, то как перейти на TNetHttpClient/Request (тут все с куками хорошо, но плохо с компрессией), если нужно поддерживать GZIP на Windows/Android?

  6. Хочу сюда подписаться.

    Только у меня дополнительный и безрадостный вопрос: как собственно создать новый RESTRequest и передать ему полученные ранее куки, чтобы они передались в запрос и отработали?

  7. Собственно вот такая строчка:

      if TCustomPopupForm(self.PopupForm).OnKeyDown <> KeyDown  then

    вызывает ошибку при компиляции Not enough actual parameters

    Собственно как получить подобное условие?
    И интересен будет комментарий к этому - почему такая ошибка.

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

    В XE7 мне не удалось добавить полученную куку в новый запрос, отчего отправлять асинхронные запросы оказалось невозможным.

    В итоге вопрос: как добавить куки к новому запросу и нужен ли отдельный компонент клиента?

  9. Возникает вышеозначенная ошибка при попытке декодировать приходящий от сервера текст.

    Я пробовал в различных вариантах.

    http://www.fmxexpress.com/secure-your-rest-client-with-ssl-and-gzip-compression-in-delphi-xe8-firemonkey-on-android-and-ios/
    http://www.fmxexpress.com/decode-gzip-content-from-the-rest-client-in-delphi-xe7-firemonkey-on-android-and-ios/  
     

    Я получаю либо  ошибку из названия темы, либо  Error on call to ZLib library function inflateInit2_

    В общем не работает только на iOS (iPhone).

    На Android, Windows, MacOS работает корректно декомпрессия в автоматическом режиме, потому вопроса о строках не возникает.

  10. 45 минут назад, ZuBy сказал:

    незнаю, что и как в XE7 (она уже не жилец)

    но если бы вы посмотрели что из себя представляет модуль System.Zlib, то было бы понятно

    
    var
      zs: TZDecompressionStream;
      Mem: TMemoryStream;
    begin
      Mem := TMemoryStream.Create;
      zs := TZDecompressionStream.Create(Mem);
    
    ZDecompressStr()
    ZCompressStr()

    дальше наверное разберетесь, как это отправить в TRestRequest. т.к. в новых делфях не используется "внутри" TIdHTTP

    Ок, все это на поверхности, но кода на компрессию все так же нет.

    А как в новых делфях осуществить отправку архивированного именно в GZIP методом GET?

    Я вот не могу разобраться.

    Интерес в том, что для декомпрессии в GZIP используется FZlib.DecompressGZipStream

    Но вот аналогичного FZlib.СompressGZipStream - НЕТ! Это первое. Второе. Получу я RawData или String - дальше что делать? Подставлять как обычное значение параметра в Params.ParameterByName().value?

  11. 1. В тегах указана версия Дельфи. XE7

    2. Родной

    3. тем не менее работает: ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP

    4. Как на конкретном примере строки сделать компрессию и подставить полученное... куда? в какое место RestRequest?

×
×
  • Создать...