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

Stalker

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

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

  • Посещение

Сообщения, опубликованные Stalker

  1. В 25.12.2019 в 04:58, Slym сказал:

    Проблема на клиенте отсутствует... копай сервис

    Большое Вам спасибо за подсказку, направили меня по верному пути.

    Проблема оказалась действительно в сервисе, а точнее в том, как он видит значения параметров в зависимости от заголовка.

    Если в HEADER указано Content-Type=application/x-www-form-urlencoded; charset=utf-8

    то сервис делает автоматическую конвертацию из utf-8 в 1251 (эта кодировка базы сервиса)

    А если указано Content-Type=application/x-www-form-urlencoded

    то автоматическая конвертация не делается и ее должен сделать сам разработчик сервиса.

    А так как раньше я тестировал свои сервисы только на Postman (а у него по умолчания второй вариант), то я всегда делал эту конвертацию сам. Отсюда и был баг неправильного значения параметра.

  2. 16 часов назад, krapotkin сказал:

    что-то не сходится в показаниях

    я тоже абсолютно корректно посылаю принимаю данные на win и android и все в правильной кодировке безо всяких ухищрений примерно аналогичным кодом

    что-то важное вы скрываете...

    Что например я скрываю ?  Есть есть вопросы - задавайте. В атаче я прикрепил демку. Которая использует два варианта 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);

    В обоих случаях заголовок, который приходит на сервер, одинаковый:

    Цитата

    HEADER: Connection=Keep-Alive
    HEADER: Content-Type=application/x-www-form-urlencoded; charset=utf-8
    HEADER: @HttpURI=/сервис
    HEADER: @HttpMethod=POST
    HEADER: Authorization=Basic d2dfVzqdUwQ==
    HEADER: Host=сайт
    HEADER: @HttpVersion=HTTP/1.1
    HEADER: User-Agent=Embarcadero URI Client/1.0
    HEADER: @MediaType=application/x-www-form-urlencoded
    HEADER: Content-Length=109

     

  5. Это я тоже пробовал. Или оно для другого или не работает как надо.

    Кроме того, если Вы пройдете по коду NetHTTPClient1.Post внутрь исходников, то в

    THTTPClient.Post в коде THTTPClient.CreateFormFromStings есть такая проверка:

      if AEncoding = nil then
        LEncoding := TEncoding.UTF8
      else
        LEncoding := AEncoding;

    То есть  по умолчанию оно все равно будет UTF8 . Но как я уже сказал выше это не помогает.

  6. 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:

    Цитата

    W1057 Implicit string cast from 'RawByteString' to 'string'

    Вопрос: Как правильно организовать кодирование параметров в UTF8, что бы этого Warning'а не было ?

     

     

  7. 21 минуту назад, Barbanel сказал:

    Не сталкивался с таким, не могу сказать. Возможно баг самой FMX, возможно баг в файле стиля (даже не баг, а внутренняя область гроупбокса неправильно описана). Я бы начал проверку со стиля.

    Да у меня вроде бы никаких особых стилей для него не задано. А в той версии FMX что у Вас, такая же ошибка ?

    22 минуты назад, Barbanel сказал:

    Есть костыльное решение - установи Margins.Top побольше

    Это помогло, спасибо.

    23 минуты назад, Barbanel сказал:

    Чтобы это обойти придется кидать на Form1 прямоугольник (TRectangle емнип) и присваивать ему полупрозрачную заливку. Соост в центр твоего ректангла кидаешь еще одну непрозрачную панель и уже на ней размещаешь свои контролы.

    А вот тут не понятно. Ведь на основной форме Form1 Уже есть разные контролы и еще один (TRectangle) туда не поместится. Или Вы тут описались, и имели ввиду Form2 ?

  8. 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 ? Можно ли как то это поправить ?

     

     

     

×
×
  • Создать...