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

RESTRequest отправка данных со спец. символами


Вопрос

Опубликовано (изменено)

Требуется отправить запрос вида:

POST /connect/token HTTP/1.1
Host: bba.nsal.cloud:5000
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

client_id=E45D3491-79EE-4EEA-92B2-22CEBE4BB8B5&client_secret=1234567&grant_type=client_credentials

Но при отправке получаю, что body содержит спец. символы: '%3D' вместо "=", '%26' вместо "&"
 

POST /connect/token HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 109
Host: bba.nsal.cloud:5000

client_id%3D03215B1D-7B0F-4E5C-A81A-81D8A1790915%26client_secret%3D95CMsyy6%26grant_type%3Dclient_credentials

Каким образом отправить запрос без преобразования спец. символов?

Отправляю вот так:
 

  RESTCli := TRESTClient.Create(rURL_Auth);
  with RESTCli do begin
    ContentType := 'application/x-www-form-urlencoded';
    AutoCreateParams := True;
    Params.Clear;
    Params.AddHeader('Cache-Control',rCacheControl);
    Params.AddHeader('Connection',rConnection);
  end;
  RESTReq := TRESTRequest.Create(RESTCli);
  RESTResp := TRESTResponse.Create(RESTReq);
  with RESTReq do begin
    Client := RESTCli;
    AcceptCharset := 'UTF-8';
    Response := RESTResp;
    Resource := 'connect/token';
    Method := rmPOST;
    Params.Clear;

    AddBody(pFile);
    Execute;
  end;
  Result := RESTResp.Content;

 

Изменено пользователем Дмитрий Бочаров

Рекомендуемые сообщения

  • 0
Опубликовано

При использовании IdHTTP все ОК! Сервер отрабатывает запрос. Спец символы не заменяются. Не может быть чтобы RESTClient не умел передавать запросы без изменения спец символов! Есть мнение, что просто что-либо не настроил, банально свойство не описал.

  • 0
Опубликовано

 '%3D' вместо "=", '%26' вместо "&" - это стандартная методика отправки данных, называется url encoding. Принимающая сторона производит обратный процесс url decoding. Это нормальный процесс экранирования спецсимволов для HTTP протокола.

Если вы не хотите использовать encoding (хотя в ContentType := 'application/x-www-form-urlencoded' вы утверждаете обратное), по используйте опцию poDoNotEncode в опциях параметра (http://docwiki.embarcadero.com/Libraries/Tokyo/en/REST.Types.TRESTRequestParameterOption)

А лучше используйте штатный THTTPClient (System.Net.HTTPClient) и будет счастье, потому как TRest, рожденный в недрах безумия Эмбы, преподнесет вам не мало неприятных сюрпризов.

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...