Перейти к содержанию
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 пользователей онлайн

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