• 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;

 

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

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


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

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

  • 0

а без всяких RestClient простым HttpClient ??

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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, рожденный в недрах безумия Эмбы, преподнесет вам не мало неприятных сюрпризов.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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