【问题标题】:How to read POST (JSON RPC) data with boost::socket?如何使用 boost::socket 读取 POST (JSON RPC) 数据?
【发布时间】:2014-10-13 20:07:28
【问题描述】:

如果我编写了一个 HTTP 服务器,它正在侦听某个地址上的请求,并且它收到了来自以下地址的请求:

curl --data-binary '{"method": "sum", "params": {"a":"3", "b":"4"}, "id":"0", "jsonrpc": "2.0"}' http://localhost:12345

现在如果我的服务器拥有一个boost::socket来从它监听的端口读取,它如何获取传递的JSON对象?

我发现async_read_some()没有读取JSON对象对应的字节。

【问题讨论】:

  • 这个问题不清楚。您是在问如何解析 JSON 吗?或者您在问为什么您拨打async_read_some() 不起作用?
  • @SamMiller,我不是在问如何解析序列化的 JSON 字符串。但我首先要问的是如何读取 JSON 字符串。 async_read_some() 似乎根本没有为我获取这些字节。
  • 编辑你的问题并显示一些代码,你还没有描述你如何以及为什么使用async_read_some()。同样,async_read_some() 读取的是字节流,而不是 JSON 字符串,您的应用程序需要处理帧。
  • @SamMiller,谢谢。我发布了一个答案。

标签: c++ boost json-rpc


【解决方案1】:

经过一点调试,我发现async_read_some()确实也获取了这样的JSON RPC信息(基本上是整个HTTP请求字符串)。

这里遵循了确切的 HTTP 规范: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5

整个 HTTP 请求以字节序列的形式出现,其中的 JSON RPC 部分需要借助 JSON 解析器进行解析。

至于我做错了什么,我传递给 async_read_some() 的缓冲区不够大,并且没有收到 HTTP 请求的某些部分。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2013-10-01
    相关资源
    最近更新 更多