Перейти к содержанию

Stalker

Пользователи
  • Активность

    9
  • Зарегистрирован

  • Посещение

Информация о Stalker

  • Звание
    Новичок
  1. Большое Вам спасибо за подсказку, направили меня по верному пути. Проблема оказалась действительно в сервисе, а точнее в том, как он видит значения параметров в зависимости от заголовка. Если в HEADER указано Content-Type=application/x-www-form-urlencoded; charset=utf-8 то сервис делает автоматическую конвертацию из utf-8 в 1251 (эта кодировка базы сервиса) А если указано Content-Type=application/x-www-form-urlencoded то автоматическая конвертация не делается и ее должен сделать сам разработчик сервиса. А так как раньше я тестировал свои сервисы только на Postman (а у него по умолчания второй вариант), то я всегда делал эту конвертацию сам. Отсюда и был баг неправильного значения параметра.
  2. Что например я скрываю ? Есть есть вопросы - задавайте. В атаче я прикрепил демку. Которая использует два варианта Post (мой и Tumaso). Если ставишь галочку "Use UTF8Encode", данные (параметры запроса) в веб-сервис приходят в utf-8, если не ставишь то в windows-1251. Дергал этот же сервис их Postman - там всегда параметры приходят в сервис в utf-8. demo.rar
  3. Попробовал Ваш метод. Сам сервис вызывается, но параметры в него все равно передаются в windows-1251, а не в UTF-8 и соответственно искомые данные не находятся. То есть все равно приходится использовать UTF8Encode. Так что Ваш вариант к сожалению тоже не помог и основной вопрос остается актуальным. Суда по всему данные в Edit.Text в 1251, а перекодировкой параметров из ASource метод TNetHTTPClient.Post не занимается. P.S. Пара вопросов по вашему методу: 1. Почему DisposeOf, а не Free или FreeAndNil ? 2. Чем вариант возвращения данных запроса в LResult (в параметр) лучше, чем возвращаемый самим методом TNetHTTPClient.Post ?
  4. Вызывал Post и как NetHTTPClient1.Post('https://сайт/сервис', ASource,nil, TEncoding.UTF8) .ContentAsString(TEncoding.UTF8); и как NetHTTPClient1.Post('https://сайт/сервис', ASource) .ContentAsString(TEncoding.UTF8); В обоих случаях заголовок, который приходит на сервер, одинаковый:
  5. Это я тоже пробовал. Или оно для другого или не работает как надо. Кроме того, если Вы пройдете по коду NetHTTPClient1.Post внутрь исходников, то в THTTPClient.Post в коде THTTPClient.CreateFormFromStings есть такая проверка: if AEncoding = nil then LEncoding := TEncoding.UTF8 else LEncoding := AEncoding; То есть по умолчанию оно все равно будет UTF8 . Но как я уже сказал выше это не помогает.
  6. Пробовал конечно. В этом случае на сервер приходит русский текст в кодировке windows-1251 (ANSI).
  7. Hi All, Delphi 10.3.3. На текущий момент VCL, дальше будет FMX для мобильных платформ. Имеется Web-Сервис который вызывается через Post с передачей ему параметров в виде x-www-form-urlencoded. в теле запроса. Параметры могут содержать русские буквы, поэтому они должны быть переданы в сервис в UTF8. Вызовом этого сервиса занимается следующий код: var ASource :TStringList; cResponce :String; begin ASource := TStringList.Create(); ASource.Add('nParam1=1'); ASource.Add('cParam2='+UTF8Encode(Edit1.Text)); ASource.Add('cParam3='+UTF8Encode(Edit2.Text)); ASource.Add('cParam4='+UTF8Encode(Edit3.Text)); cResponce := NetHTTPClient1.Post('https://сайт/сервис', ASource).ContentAsString(TEncoding.UTF8); FreeAndNil(ASource); Сам код работает нормально, сервис вызывается, данные возвращаются. НО для передачи параметров в UTF8 приходится использовать функцию UTF8Encode, что приводит в Warning'у от Delphi: Вопрос: Как правильно организовать кодирование параметров в UTF8, что бы этого Warning'а не было ?
  8. Да у меня вроде бы никаких особых стилей для него не задано. А в той версии FMX что у Вас, такая же ошибка ? Это помогло, спасибо. А вот тут не понятно. Ведь на основной форме Form1 Уже есть разные контролы и еще один (TRectangle) туда не поместится. Или Вы тут описались, и имели ввиду Form2 ?
  9. Hi All, Delphi 10.3.3, FMX, Android 32bit 1) Есть основная форма приложения Form1. Есть форма приложения для логина Form2 (на ней пара TEdit, пара TButton). Вызываю из Form1 форму Form2 в модальном режиме с асинхронной процедурой обработки выбора. Все работает, но есть один момент: окно Form2 открывается на весь экран смарта (полностью закрывая собой основное окно Form1), а хотелось что бы оно было небольшого размера по центру основного окна (по типу ShowMessage).. Вопрос: Как это сделать ? 2) И еще небольшой вопрос. В качестве Android устройства у меня смартфон Thl 5000 (с экраном 5"). В IDE в ModelView я соответственно выбираю строку Android 5" Phone. Но когда на смартфоне запускает приложение, то я вижу что размер формы созданный Delphi в ModelView больше чем реальный размер окна (часть элементов на нем не видна, она получилась за границами экрана). Вопрос: В чем тут может быть причина ? 3) Кидаю на форму GroupBox, внутрь помещаю TEdit и устанавливаю у него Align = Top. В результате TEdit залазит на заголовок (Caption) у GroupBox'a. Если такое же сделать в VCL, то там все нормально и TEdit располагается ниже GroupBox.Caption. Вопрос: Это что какая то особенность FMX или это ошибка FMX ? Можно ли как то это поправить ?
×
×
  • Создать...