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

TNetHTTPClient и JSON-RPC


unicorn

Вопрос

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

  • 0

Вики:

Все передаваемые данные — простые объекты, сериализованные в JSON Запрос — вызов определённого метода, предоставляемого удалённой системой. Он должен содержать три обязательных свойства:

  • method — Строка с именем вызываемого метода.
  • params — Массив объектов, которые должны быть переданы методу, как параметры.
  • id — Значение любого типа, которое используется для установки соответствия между запросом и ответом.

вроде все понятно. в чем конкретно вопрос?

Ссылка на комментарий
  • 0

есть строка с json-сериализованным объектом. Пусть str

Как мне ее отправить через NetHTTPClient.Post? 

Пробую:

with NetHTTPClient1 do
  begin
	ADatas := TStringList.Create;
      ADatas.Add(str);
      res := Post(aURL, ADatas).ContentAsString();
      Memo1.Lines.Add(res);
    finally
      ADatas.Free;
    end;

А ни фига.. Может не там или не так передаю? Форматирую как TJsonObject и одаю методом ToString, строка должна быть корректна. А сервер ругается в ответ...

Ссылка на комментарий
  • 0
try
    LJSONObject := TJsonObject.Create;
    Arr:= TJSONArray.Create;
    Arr.Add('captain');
    LJSONObject.AddPair('jsonrpc', '2.0');
    LJSONObject.AddPair('method', 'get_accounts');
    LJSONObject.AddPair('params', Arr);
    LJSONObject.AddPair('id', '1');
    str := LJSONObject.ToString;
  finally
    LJSONObject.Free;
    Arr.Free;
  end;

вот она родимая

Ссылка на комментарий
  • 0

от души рекомендую заменить TJSONObject на XSuperObject https://github.com/onryldz/x-superobject

код будет таким примерно

uses
  XSuperObject;
...


procedure TForm1.b1Click(Sender: TObject);
var
  x:ISuperObject;
  arr:ISuperArray;
  str:string;
begin
  X:=TSuperObject.Create();
  X.S['jsonrpc'] := '2.0';
  X.S['method'] := 'get_accounts';
  X.I['id'] := 1;
  arr:=TSuperArray.Create();
  arr.Add('captain');
  X.A['params']:=arr;
  ...
str:=X.AsJSON();
...

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

у вас это строка, а в приведенных примерах - число. может, в этом проблема 

h:=THTTPClient.Create();
//  h.Accept := 'application/json'
//  h.AcceptCharSet := 'UTF-8';
  src:=TStringStream.Create('{"jsonrpc":"2.0","method":"get_accounts","id":1,"params":["captain"]}');
  res:=TStringStream.Create();
  resp:=h.Post(URL,src,res);
  if resp.StatusCode=200 then
  begin
    ShowMessage('Ответ'+sLineBreak+res.DataString);
  end;
  FreeAndNil(h);
  FreeAndNil(res);
  FreeAndNil(src);

так же может быть, нужно правильно указывать кодировку запроса-ответа и другие заголовки HTTP

проверьте этот код. а потом уже делайте JSON любым способом

Ссылка на комментарий

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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