notricky
-
Постов
86 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные notricky
-
-
Я изящного способа не нашёл.
-
С другой стороны, может быть кто-то предложит хакнуть TRestClient и достать таки из него FHttpClient поле. Может есть изящное решение. Тогда вопрос будет закрыт.
-
В общем TREST полная шляпа в вопросе Куков.
Вместо этого использовал TNetHttpClient/Request.
Жаль потраченного впустую времени.
-
Друзья, честно, объясните, если знаете. Почему в XE8 не работают куки?
Даже если использовать AddAuthParameter , то когда доходит до TRestRequest.Execute, попадает в DoApplyCookieParams далее в цикле идет поиск куков и делается FClient.SetCookie внутри которого идет обращение к HTTPClient.AddServerCookie внутри которого только проверка на AllowCookies и все...
Кто-нить может мне пояснить, как это вообще работает в таком случае?
-
Не работает этот вариант с AddAuthParameter.
Можете объяснить почему вы решили, что это должно сработать? Очень интересно. Дату, к примеру, не указать явным образом. В каком формате нужно передать Value?
-
В 22.10.2016 в 09:34, ZuBy сказал:
каков вопрос - таков ответ.
Раскрывайте вопрос полностью, с описанием версии студии, использованных компонентов
Вопрос был полностью раскрыт. Даже больше. Он идет непосредственно перед ответом. а то, что слили все в одну тему... так что поделать.
В 22.10.2016 в 09:34, ZuBy сказал:UPDATE:
RESTRequest1.AddAuthParameter('name','value',TRESTRequestParameterKind.pkCOOKIE);
Логику я не понимаю, но попробую. ОТпишусь.
-
В 22.10.2016 в 12:47, krapotkin сказал:
TCustomPopupForm(self.PopupForm).OnKeyDown <> @KeyDown
Тогда уж @ вначале TCustomPopupForm тоже
-
В 02.10.2016 в 18:38, RareGod сказал:
хмм, так?
THTTPClient.CookieManager.AddServerCookie();
))))
В TREST*** ?
-
[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?
-
KeyDown в моем примере - это обработчик.
Задача была проверить какой обработчик в OnKeyDown. Чтобы не присваивать каждый раз обработчик, если он тот же на входе.
-
Хочу сюда подписаться.
Только у меня дополнительный и безрадостный вопрос: как собственно создать новый RESTRequest и передать ему полученные ранее куки, чтобы они передались в запрос и отработали?
-
Собственно вот такая строчка:
if TCustomPopupForm(self.PopupForm).OnKeyDown <> KeyDown then
вызывает ошибку при компиляции Not enough actual parameters
Собственно как получить подобное условие?
И интересен будет комментарий к этому - почему такая ошибка. -
В ХЕ8 похоже работает.
-
Собственно вопрос в том, что после авторизации клиент получает куку с хешем, который используется для подтверждения залогинености пользователя.
В XE7 мне не удалось добавить полученную куку в новый запрос, отчего отправлять асинхронные запросы оказалось невозможным.
В итоге вопрос: как добавить куки к новому запросу и нужен ли отдельный компонент клиента?
-
Ну вдруг есть люди, которые купили ХЕ7 и на нем программируют. Цены-то не дешёвые, чтобы покупать каждые полгода новые версии только потому, что прежние не работают.
-
То есть в старых версиях - это обречено не работать?
-
Актуальная это какая?
-
Возникает вышеозначенная ошибка при попытке декодировать приходящий от сервера текст.
Я пробовал в различных вариантах.
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 работает корректно декомпрессия в автоматическом режиме, потому вопроса о строках не возникает.
-
-
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?
-
Допустим для примера:
http://site.com/?data=aaaaabbbbbcccccddddd
Как верно енкодить "aaaaabbbbbcccccddddd"? и куда подставить в коде?
-
1. В тегах указана версия Дельфи. XE7
2. Родной
3. тем не менее работает: ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP
4. Как на конкретном примере строки сделать компрессию и подставить полученное... куда? в какое место RestRequest?
-
Вопрос именно в том как, а не что использовать для компрессии.
Допустим есть строка, которую нужно сжать и подставить ее... куда? в значение параметра? А если GET?
-
8 минут назад, ZuBy сказал:
ответ дан выше, посмотрите внимательно
Я посмотрел. Ответ не дан.
Конкретный код не гуглится по теме compresson - Только по теме decompression
[XE8] TNetHttpRequest.OnRecieveData в деплое для android вешает приложение
в Базы данных и REST
Опубликовано
Собственно поступаю я так - передаю по ссылке в процедуру 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 и работает исправно.
Кто что может сообщить по данному вопросу, вдруг кто сталкивался?