2014-10-13 3 views
0

Если я написал сервер HTTP, который слушает запросы на какой-то адрес, и он получил запрос от:Как читать данные POST (JSON RPC) с boost :: socket?

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.

+0

Этот вопрос непонятен. Вы спрашиваете, как разбирать JSON? Или вы спрашиваете, почему ваш вызов 'async_read_some()' не работает? –

+0

@SamMiller, я не спрашиваю, как разбирать сериализованные строки JSON. Но я спрашиваю, как я могу прочитать строку JSON в первую очередь. 'async_read_some()', похоже, не выводит мне эти байты вообще. – batman

+1

отредактируйте свой вопрос и покажите код, вы не описали, как и почему вы используете 'async_read_some()'. Аналогично, 'async_read_some()' считывает поток байтов, а не строку JSON, ваше приложение должно обрабатывать кадрирование. –

ответ

0

После небольшой отладки я обнаружил, что async_read_some() действительно извлекает такую ​​информацию RPC JSON (вся основная строка запроса HTTP).

Точную HTTP спецификации следует, как здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5

запрос Весь HTTP поставляется в виде последовательности байтов, то JSON RPC часть которого должна быть проанализирован с помощью JSON парсер.

Что касается того, что я делал неправильно, то буфер, который я передал в async_read_some(), был недостаточно большим и не получал некоторые части HTTP-запроса.