delphi - 使用indy HTTP客户端和Superobject DELPHI http 400错误代码与rpc服务通信

标签 delphi http superobject

好吧,我难倒了下面的代码给我一个 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.

也许我很累谁知道,但这是开车撞墙了:\

关于 RPC 客户端的文档 https://en.bitcoin.it/wiki/API_reference_%28JSON-RPC%29

用途:

super 对象链接:http://www.progdigy.com/?page_id=6

最佳答案

400 表示“错误请求”。您正在发送服务器无法处理的数据。尝试使用 TIdHTTP.Post(TStream) 而不是 TIdHTTP.Post(TStrings) 来发送您的 JSON 数据。 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;

关于delphi - 使用indy HTTP客户端和Superobject DELPHI http 400错误代码与rpc服务通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590956/

相关文章:

http - 在 Firefox 中使用篡改数据篡改 GET 请求参数?

asp.net - 在自定义 ASP.NET HttpHandler 响应中禁用缓存控制 header 字段

java - 如何在java中进行批量http调用

json - 当我使用 SuperObject 解析字符串时,为什么会出现大量问号?

delphi - 如何实现索引[]默认属性

delphi - Delphi中的 boolean 表达式求值顺序?

android - 安装 Delphi 10.4 Android SDK 时出现问题

delphi - 如何使用注释对字符串列表进行排序

arrays - 使用 SuperObject 访问 JSON 数组

json - 无法将 SuperObject JSON 反序列化为对象