• 0
notricky

Как создать новый RESTRequest и передать ему полученные ранее куки

Вопрос

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

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

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

Изменено пользователем Andrey Efimov
Изменён заголовок, объединены темы

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

13 ответов на этот вопрос

  • 0

хмм, так?

THTTPClient.CookieManager.AddServerCookie();

 

Rusland понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

[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?

Изменено пользователем notricky

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 02.10.2016 в 18:38, RareGod сказал:

хмм, так?


THTTPClient.CookieManager.AddServerCookie();

 

))))

В TREST*** ? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 часа назад, notricky сказал:

))))

В TREST*** ? ;)

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

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

UPDATE:

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

UPDATE2:

можно использовать альтернативный вариант, куда можно передать куки (как из примера выше)

zairkz, Kitty и Andrey Efimov понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

ТС'у - не надо плодить и поднимать старые темы с одним и тем же вопросом! Все три темы объединил.

17 минут назад, ZuBy сказал:

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

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

Выбранный ТС'ом раздел как бы намекал... или ты уже перенёс тему?(вопрос более не актуален, посмотрел историю модерации)

Равиль Зарипов (ZuBy) и zairkz понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 22.10.2016 в 09:34, ZuBy сказал:

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

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

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

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

UPDATE:


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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

В общем TREST полная шляпа в вопросе Куков.

Вместо этого использовал TNetHttpClient/Request.

Жаль потраченного впустую времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

С другой стороны, может быть кто-то предложит хакнуть TRestClient и достать таки из него FHttpClient поле. Может есть изящное решение. Тогда вопрос будет закрыт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Я уже выкладывал выше альтернативу TRestClient, там можно работать THTTPClient, пример есть на гитхабе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: netlink
      Добрый день!
      После переезда  с xe8 на Berlin 10.1
      получил проблему с тем, что в мобильном приложении перестали работать запросы.
       
      Сначала приходил coocie с Id сессии в которой мы работаем с сервером.
      И раньше в 8-ке при вызове всех дочерних запросов после аутентификации кука отправлялась на сервер и всё работало.
      Если в 10-ке открывать тот же проект без правок - то перестают работать все дочерние запросы.
      Смотрели откладку - на сервер куки перестали приходить?
      Это баг 10-ки или что-то делать надо ручками?
      Где про это написано?
      Спасибо!
      С уважением,
      Кондрашов Андрей
    • Автор: estra
      Мне необходимо произвести некоторые действия в случае возникновения исключения Time Out в RESTRequest. Но событие OnHTTPProtocolError не возникает при исключениях, не связанных с HTTP:
       
      This event will not get fired if a non HTTP-related exception occurs during execution. This includes, but is not limited to timeout and server not found related exceptions.   Как выйти из ситуации и обработать Time Out? Наверное может помочь try except, но какого класса исключение нужно ловить, пока не нашел.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу