2011-07-06 13 views
2

私はhttp:// 400エラーを出して、送信されたデータに間違っていると私に伝えます。indy HTTPクライアントとSuperobject DELPHIを使用したrpcサービスとの通信http 400エラーコード

クライアントがURLを(アイブ氏は、真/偽の両方を試してみました)エンコードするために設定されている。

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. 

はたぶん知っているが、これは、壁をオフに駆動している人はうんざりしてイム:RPCの

ドキュメント\クライアント https://en.bitcoin.it/wiki/API_reference_%28JSON-RPC%29

は使用しています。

Superobjectリンク:http://www.progdigy.com/?page_id=6

答えて

0

をドキュメントが

Basic認証が は、デフォルトでは、セキュリティのためにそれとの通信時に使用される、および、 しなければならないと言いますサーバー は、同じマシン上の他の プロセスからの接続のみを受け入れます。

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

は(行方不明の認証が正常に代わりに400のHTTP 401(不正な)を引き起こす)

+0

はこれを試してみてください! – Strspeed

1

400 "不正な要求" を意味します。サーバーが処理できないデータを送信しています。 TIdHTTP.Post(TStrings)の代わりにTIdHTTP.Post(TStream)を使用してJSONデータを送信してみてください。 TStringsバージョンはJSONデータを変更する可能性のある方法で文字列データをエンコードし、有効なJSONではなくなりました。そのバージョンのPost()は、代わりに 'application/x-www-form-urlencoded'リクエストを意味します。私はusrは/すでにプロパティエディタに渡す設定を追加するのを忘れて

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; 
+0

はまだ400エラーを取得しますが、あなたは私を悟りました。私はそれを知っていたはずです。今もJsonオブジェクトとしてTstreamで試してみようとしています。 – Strspeed

関連する問題