一尘不染

如何发送http请求并检索json响应C ++ Boost

json

我需要编写一个命令行客户端,以便在服务器上播放井字游戏。服务器接受http请求并将json发送回我的客户端。我正在寻找一种快速的方法,以使用Boost库发送http请求并以字符串形式接收json。

example http request = "http://???/newGame?name=david"
example json response = "\"status\":\"okay\", \"id\":\"game-23\", \"letter\":2"

阅读 235

收藏
2020-07-27

共1个答案

一尘不染

符合说明的最简单的事情:

[Live On Coliru](http://coliru.stacked-crooked.com/a/e49a6536879aa345)

#include <boost/asio.hpp>
#include <iostream>

int main() {
    boost::system::error_code ec;
    using namespace boost::asio;

    // what we need
    io_service svc;
    ip::tcp::socket sock(svc);
    sock.connect({ {}, 8087 }); // http://localhost:8087 for testing

    // send request
    std::string request("GET /newGame?name=david HTTP/1.1\r\n\r\n");
    sock.send(buffer(request));

    // read response
    std::string response;

    do {
        char buf[1024];
        size_t bytes_transferred = sock.receive(buffer(buf), {}, ec);
        if (!ec) response.append(buf, buf + bytes_transferred);
    } while (!ec);

    // print and exit
    std::cout << "Response received: '" << response << "'\n";
}

这将收到完整的响应。您可以使用虚拟服务器对其进行测试:(
也可以 在Coliru上运行

netcat -l localhost 8087 <<< '"status":"okay", "id":"game-23", "letter":2'

这将表明已收到请求,并且响应将由上面的客户代码写出。

请注意,有关更多建议,您可以查看示例http://www.boost.org/doc/libs/release/doc/html/boost_asio/examples.html(尽管它们专注于异步通信,因为这是阿西欧图书馆)

2020-07-27