2
4

2 に答える 2

1

400 は「不正なリクエスト」を意味します。サーバーが処理できないデータを送信しています。TIdHTTP.Post(TStream)の代わりに を使用して JSON データを送信してみてください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;
于 2011-07-06T07:16:18.567 に答える
0

ドキュメントには

通信時には基本アクセス認証を使用する必要があります。セキュリティのため、デフォルトでは、サーバーは同じマシン上の他のプロセスからの接続のみを受け入れます。

したがって、コードでは、Indyリクエストオブジェクトのユーザー名、パスワード、およびBasicAuthenticationプロパティを設定する必要があります。

(認証が欠落していると、通常、400ではなくHTTP 401(未承認)が発生します。)

于 2011-07-06T04:50:02.580 に答える