1

我目前正在使用boost::beast实现一个 ntrip 1.0 客户端。它的请求如下:

GET /BUCU1 HTTP/1.0 用户代理:NTRIP GNSSInternetRadio/1.2.0 授权:基本 aHVnb2JlbjpodWdvYmVuMTIz

响应如下:

冰冷 200 OK

它具有非标准的 http 响应。

我作为野兽 http 客户端示例代码,它在缓冲区中得到这个响应。但它会在读取函数中产生异常。错误是“读取,错误版本”。我想知道处理非标准 http 响应的最佳方法是什么。

void
    on_write(
        boost::system::error_code ec,
        std::size_t bytes_transferred)
{
    boost::ignore_unused(bytes_transferred);

    if (ec)
        return fail(ec, "write");


    // Receive the HTTP response
    // boost::beast::flat_buffer buffer_; // (Must persist between reads)
    // http::response <http::string_body> res_;

    http::async_read(socket_, buffer_, res_,
        std::bind(
            &session::on_read,
            shared_from_this(),
            std::placeholders::_1,
            std::placeholders::_2));
}

void
    on_read(
        boost::system::error_code ec,
        std::size_t bytes_transferred)
{
    boost::ignore_unused(bytes_transferred);

    if (ec)
        return fail(ec, "read");         // ex
}
4

1 回答 1

0

这可以使用icy_stream位于 master 或 development 分支中的实验目录中的类来完成(https://github.com/boostorg/beast):

#include <boost/beast/experimental/http/icy_stream.hpp>
...
using http = boost::beast::http;
using tcp = boost::asio::ip::tcp;
...
boost::asio::io_context ioc;
http::icy_stream<tcp::socket> stream(ioc);
http::response<http::string_body> res;
...
http::read(stream, res);
于 2018-06-10T14:51:55.897 回答