Связь со службой rpc с использованием indy HTTP-клиента и кода ошибки Superobject DELPHI http 400

Хорошо, я озадачен следующий код дает мне ошибку http 400, которая говорит мне, что что-то не так с отправленными данными, но я не могу понять, что!:(

клиент настроен на кодирование URL (я пробовал оба true/false);

procedure TForm2.Button1Click(Sender: TObject);

    var
    O:Isuperobject;
    T:Tstringlist;
    begin
        T := Tstringlist.Create;
        O := SO('{"jsonrpc": "1.0", "method": getinfo, "params": "[]" }');
        t.Add(o.AsString)    ;
        idhttp1.Request.ContentType := '"application/json"';
        memo1.lines.Add(    idhttp1.post('http://127.0.0.1:8332/', T ) )


       end;

    end.

Может быть, я в Tired, кто знает, но это отвлекает от стены:\

Документация по RPC-клиенту https://en.bitcoin.it/wiki/API_reference_%28JSON-RPC%29

ОБЛАСТЬ ПРИМЕНЕНИЯ:

Ссылка на суперобъект: http://www.progdigy.com/?page_id=6

2 ответа

400 означает "Плохой запрос". Вы отправляете данные, которые сервер не может обработать. Попробуйте отправить данные JSON, используя TIdHTTP.Post(TStream) вместо TIdHTTP.Post(TStrings), Версия TStrings кодирует строковые данные таким образом, что, вероятно, изменит данные JSON, поэтому он больше не является допустимым JSON. Эта версия Post() предназначена для запросов application/x-www-form-urlencoded.

Попробуй это:

procedure TForm2.Button1Click(Sender: TObject);
var
  O: Isuperobject;
  Strm: TStringStream;
begin
  O := SO('{"jsonrpc": "1.0", "method": getinfo, "params": "[]" }');
  Strm := TStringStream.Create(O.AsString);
  try
    IdHTTP1.Request.ContentType := 'application/json';
    Memo1.Lines.Add(IdHTTP1.Post('http://127.0.0.1:8332/', Strm));
  finally
    Strm.Free;
  end;
end;

В документации сказано

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

Таким образом, ваш код должен установить свойства Имя пользователя, Пароль и BasicAuthentication объекта запроса Indy.

(Отсутствующая аутентификация обычно вызывает HTTP 401 (неавторизованный) вместо 400.)

Другие вопросы по тегам