如何使用 boost::socket 读取 POST (JSON RPC) 数据?
Posted
技术标签:
【中文标题】如何使用 boost::socket 读取 POST (JSON RPC) 数据?【英文标题】:How to read POST (JSON RPC) data with boost::socket? 【发布时间】: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,谢谢。我发布了一个答案。
【参考方案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 请求的某些部分。
【讨论】:
以上是关于如何使用 boost::socket 读取 POST (JSON RPC) 数据?的主要内容,如果未能解决你的问题,请参考以下文章
Web系统中如何操作外部设备,比如POS机、IC卡读卡器等 - PHP进阶讨论