beast如何发送请求参数

how to send request parameters with beast

我正在尝试发送到服务器的文档中的正文:https://binance-docs.github.io/apidocs/spot/en/#order-book

    // Start the asynchronous operation
    void
    run(
        char const* host,
        char const* port,
        char const* target)
    {
        // Set SNI Hostname (many hosts need this to handshake successfully)
        if(! SSL_set_tlsext_host_name(stream_.native_handle(), host))
        {
            beast::error_code ec{static_cast<int>(::ERR_get_error()), net::error::get_ssl_category()};
            std::cerr << ec.message() << "\n";
            return;
        }

        // Set up an HTTP GET request message
        // req_.version(version);
        req_.method(http::verb::get);
        req_.target(target);
        req_.set(http::field::host, host);
        req_.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
        req_.body() = "symbol=btcusdt";
        req_.prepare_payload(); // make HTTP 1.1 compliant

        // Look up the domain name
        resolver_.async_resolve(
            host,
            port,
            beast::bind_front_handler(
                &session::on_resolve,
                shared_from_this()));
    }

如您所见,req_.body() = "symbol=btcusdt"; 显然无法正常工作(这是我从 Whosebug 获得的),还有其他方法吗?我不想使用 boost json 来发送正文,也许可以使用 jsoncpp。请帮助我并提前谢谢!

As you can see req_.body() = "symbol=btcusdt"; clearly not working(which i got from Whosebug),

你不是从 Whosebug 得到的。你:

    req_.body() = serialize(json::object {{"symbol", "btcusdt"}});
    req_.prepare_payload(); // make HTTP 1.1 compliant

现在,如果您对此有任何疑问,您忘记描述问题所在了。

, it doesn't normally make sense to pass content with a GET request (background: ).

检查 the docs 确认它应该是 GET。因此,它可能需要查询参数。用 "/api/v3/depth?symbol=btcusdt" 戳它得到

{"code":-1100,"msg":"Illegal characters found in parameter 'symbol'; legal range is '^[A-Z0-9-_.]{1,20}$'."}
shutdown: stream truncated

所以,是的,它读取那些。 "/api/v3/depth?symbol=BTCUSDT" 修复错误:

{"lastUpdateId":18749392570,"bids":[["38337.57000000","2.48048000"],["38337.53000000","0.00391000"],["38336.74000000","0.03264000"],["38336.73000000","0.35211000"],["38336.72000000","0.13042000"],["38336.08000000","0.00455000"],["38335.00000000","0.09385000"],["38334.83000000","0.38462000"],["38334.82000000","0.39125000"],["38334.73000000","0.00052000"],["38334.69000000","0.00037000"],["38334.43000000","0.09528000"],["38333.01000000","0.00400000"],["38332.78000000","0.00037000"],["38332.71000000","0.01319000"],["38331.84000000","0.00833000"],["38331.46000000","0.39126000"],["38331.41000000","0.04000000"],["38330.93000000","0.39128000"],["38330.83000000","1.20000000"],["38330.33000000","0.24000000"],["38329.94000000","0.06407000"],["38329.90000000","0.06000000"],["38329.44000000","0.35216000"],["38329.39000000","0.39131000"],["38329.22000000","0.94299000"],["38327.88000000","0.01829000"],["38326.06000000","0.06000000"],["38325.76000000","0.01738000"],["38325.69000000","0.39133000"],["38324.82000000","0.02000000"],["38324.53000000","0.03771000"],["38323.43000000","0.01423000"],["38323.17000000","0.06352000"],["38323.01000000","0.11626000"],["38322.97000000","0.26100000"],["38322.82000000","1.95599000"],["38322.64000000","0.24845000"],["38322.36000000","0.00260000"],["38322.32000000","0.00187000"],["38322.27000000","0.23664000"],["38322.23000000","0.06000000"],["38321.90000000","0.24187000"],["38320.80000000","0.01048000"],["38320.70000000","0.00964000"],["38320.43000000","0.02202000"],["38320.39000000","0.09000000"],["38320.26000000","0.98600000"],["38320.00000000","0.05333000"],["38319.69000000","0.16310000"],["38319.59000000","0.03000000"],["38319.49000000","0.00037000"],["38319.45000000","0.06000000"],["38318.60000000","0.15000000"],["38318.41000000","0.02600000"],["38317.94000000","0.03086000"],["38317.57000000","0.00037000"],["38317.28000000","1.97450000"],["38317.18000000","0.01232000"],["38317.07000000","0.07704000"],["38316.71000000","0.01105000"],["38316.42000000","0.26120000"],["38316.41000000","0.03933000"],["38315.53000000","0.39000000"],["38315.05000000","2.51774000"],["38314.81000000","0.00903000"],["38314.59000000","0.34420000"],["38313.73000000","0.30000000"],["38313.60000000","0.03706000"],["38313.04000000","0.01234000"],["38312.79000000","0.00040000"],["38312.74000000","0.00160000"],["38312.64000000","0.03970000"],["38312.45000000","0.03989000"],["38311.93000000","0.00100000"],["38311.80000000","0.19965000"],["38311.68000000","0.03787000"],["38310.81000000","0.03086000"],["38310.79000000","0.00652000"],["38310.72000000","0.00180000"],["38310.39000000","0.07902000"],["38310.30000000","0.00027000"],["38310.16000000","0.00037000"],["38310.12000000","0.00100000"],["38310.00000000","0.05221000"],["38309.42000000","0.00505000"],["38309.29000000","0.02601000"],["38309.28000000","0.02601000"],["38309.27000000","0.02601000"],["38308.35000000","0.03918000"],["38308.24000000","0.00037000"],["38307.90000000","0.04000000"],["38307.60000000","0.00034000"],["38305.40000000","5.56346000"],["38304.47000000","0.87474000"],["38304.16000000","0.04030000"],["38304.00000000","0.09062000"],["38303.40000000","0.47680000"],["38303.29000000","0.28900000"],["38303.24000000","0.05433000"]],"asks":[["38337.58000000","0.59927000"],["38337.59000000","0.01654000"],["38338.13000000","0.00400000"],["38338.15000000","0.00900000"],["38340.27000000","0.00027000"],["38340.45000000","0.00037000"],["38342.37000000","0.00037000"],["38342.44000000","0.05200000"],["38343.93000000","0.01976000"],["38344.51000000","0.13042000"],["38345.19000000","0.44713000"],["38345.28000000","0.04998000"],["38345.43000000","0.26087000"],["38346.10000000","0.26089000"],["38346.12000000","0.26100000"],["38346.23000000","0.00991000"],["38346.24000000","0.04876000"],["38346.59000000","0.26086000"],["38347.13000000","0.01940000"],["38347.20000000","0.04705000"],["38347.40000000","0.26100000"],["38347.44000000","0.02478000"],["38347.45000000","0.00266000"],["38347.47000000","0.01491000"],["38347.66000000","0.07824000"],["38348.16000000","0.14054000"],["38348.48000000","0.26085000"],["38349.93000000","0.10000000"],["38350.00000000","0.00055000"],["38350.08000000","0.09146000"],["38350.33000000","0.00037000"],["38351.23000000","0.02553000"],["38352.00000000","0.17533000"],["38352.22000000","0.74700000"],["38352.40000000","0.26085000"],["38352.50000000","1.98993000"],["38352.75000000","0.00100000"],["38352.92000000","0.06000000"],["38353.92000000","0.09146000"],["38354.16000000","0.10000000"],["38355.10000000","0.10000000"],["38355.87000000","0.01829000"],["38356.19000000","0.12915000"],["38356.81000000","0.04000000"],["38358.94000000","0.10000000"],["38359.02000000","0.00187000"],["38359.04000000","0.57852000"],["38359.27000000","0.00037000"],["38359.66000000","0.09730000"],["38359.92000000","0.05000000"],["38360.00000000","0.26059000"],["38360.01000000","0.00525000"],["38360.65000000","0.00100000"],["38361.18000000","0.00037000"],["38361.83000000","0.10000000"],["38363.42000000","0.01940000"],["38363.81000000","0.00037000"],["38364.66000000","1.91518000"],["38364.88000000","0.02609000"],["38366.58000000","0.10000000"],["38366.60000000","0.14645000"],["38366.82000000","0.02601000"],["38366.83000000","0.02601000"],["38366.84000000","0.02601000"],["38367.18000000","0.00037000"],["38367.47000000","0.00140000"],["38368.35000000","0.22000000"],["38368.59000000","0.01301000"],["38368.91000000","0.01824000"],["38369.10000000","0.00037000"],["38369.61000000","0.00170000"],["38370.00000000","0.05214000"],["38370.30000000","0.00652000"],["38370.40000000","0.01105000"],["38370.69000000","0.00050000"],["38370.81000000","0.15840000"],["38371.11000000","0.03086000"],["38371.18000000","0.00410000"],["38371.49000000","0.00037000"],["38372.35000000","0.07818000"],["38372.98000000","0.03978000"],["38373.12000000","1.05945000"],["38373.20000000","0.03086000"],["38373.67000000","0.06000000"],["38373.95000000","0.03000000"],["38374.04000000","0.05434000"],["38374.19000000","1.48075000"],["38374.41000000","0.05447000"],["38374.55000000","0.09000000"],["38374.64000000","0.00902000"],["38374.80000000","0.00120000"],["38374.91000000","0.26059000"],["38374.92000000","4.97054000"],["38375.05000000","0.00357000"],["38375.26000000","0.00050000"],["38375.61000000","6.50000000"],["38376.62000000","0.04173000"],["38376.97000000","1.48075000"],["38378.17000000","0.03908000"],["38378.18000000","0.06270000"]]}

正解

您应该添加查询参数。 Beast 没有这方面的设施:

It is the caller's responsibility to ensure that the request target string follows the syntax rules for URIs used with HTTP. In particular, reserved or special characters must be url-encoded. The implementation does not perform syntax checking on the passed string.

因此请考虑使用诸如Boost URL:

static boost::url_view const base_api{"wss://api.binance.com/api/v3/"};

boost::url method{"depth"};
method.params().emplace_back("symbol", "BTCUSDT");

std::make_shared<session>(net::make_strand(ioc), ctx)
    ->run(make_url(base_api, method));

其中 make_urlboost::urls::resolve 的便利包装:

boost::url make_url(boost::url_view base_api, boost::url_view method) {
    assert(!method.is_path_absolute());
    assert(base_api.data()[base_api.size() - 1] == '/');

    boost::urls::error_code ec;
    boost::url              url;
    resolve(base_api, method, url, ec);
    if (ec)
        throw boost::system::system_error(ec);
    return url;
}

这也允许在 run 中进行一些简化:

run(boost::url_view url) {
    std::string const host(url.host());
    std::string const service = url.has_port() //
        ? url.port()
        : (url.scheme_id() == boost::urls::scheme::wss) //
            ? "https"
            : "http";
    url.remove_origin(); // becomes target

完整列表

#include <boost/asio.hpp>
#include <boost/beast.hpp>
#include <boost/beast/ssl.hpp>
#include <boost/json.hpp>
#include <boost/json/src.hpp>
#include <functional>
#include <iostream>
#include <memory>
#include <string>

#include <boost/url.hpp>
#include <boost/url/src.hpp> // for "header-only"

namespace beast = boost::beast;         // from <boost/beast.hpp>
namespace http  = beast::http;          // from <boost/beast/http.hpp>
namespace net   = boost::asio;          // from <boost/asio.hpp>
namespace ssl   = boost::asio::ssl;     // from <boost/asio/ssl.hpp>
namespace json  = boost::json;
using tcp       = boost::asio::ip::tcp; // from <boost/asio/ip/tcp.hpp>

using executor = net::any_io_executor; // boost 1.78 compat, comment if not applicable

//------------------------------------------------------------------------------

boost::url make_url(boost::url_view base_api, boost::url_view method) {
    assert(!method.is_path_absolute());
    assert(base_api.data()[base_api.size() - 1] == '/');

    boost::urls::error_code ec;
    boost::url              url;
    resolve(base_api, method, url, ec);
    if (ec)
        throw boost::system::system_error(ec);
    return url;
}
// Report a failure
void
fail(beast::error_code ec, char const* what)
{
    std::cerr << what << ": " << ec.message() << "\n";
}

// Performs an HTTP GET and prints the response
class session : public std::enable_shared_from_this<session>
{
    tcp::resolver                        resolver_;
    beast::ssl_stream<beast::tcp_stream> stream_;
    beast::flat_buffer                buffer_; // (Must persist between reads)
    http::request<http::string_body>  req_;
    http::response<http::string_body> res_;

  public:
    explicit session(executor ex, ssl::context& ctx)
        : resolver_(ex)
        , stream_(ex, ctx) {}

    // Start the asynchronous operation
    void
    run(boost::url url) {
        std::string const host(url.host());
        std::string const service = url.has_port() //
            ? url.port()
            : (url.scheme_id() == boost::urls::scheme::wss) //
                ? "https"
                : "http";
        url.remove_origin(); // becomes req_.target()

        // Set SNI Hostname (many hosts need this to handshake successfully)
        if(! SSL_set_tlsext_host_name(stream_.native_handle(), host.c_str()))
        {
            beast::error_code ec{static_cast<int>(::ERR_get_error()), net::error::get_ssl_category()};
            std::cerr << ec.message() << "\n";
            return;
        }

        // Set up an HTTP GET request message
        // req_.version(version);
        req_.method(http::verb::get);
        req_.target(url.c_str());
        req_.set(http::field::host, host);
        req_.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
        //req_.body() = serialize(json::object {{"symbol", "btcusdt"}});
        req_.prepare_payload(); // make HTTP 1.1 compliant

        // Look up the domain name

        resolver_.async_resolve(host, service,
                                beast::bind_front_handler(&session::on_resolve,
                                                          shared_from_this()));
    }

    void
    on_resolve(
        beast::error_code ec,
        tcp::resolver::results_type results)
    {
        if(ec)
            return fail(ec, "resolve");

        // Set a timeout on the operation
        beast::get_lowest_layer(stream_).expires_after(std::chrono::seconds(30));

        // Make the connection on the IP address we get from a lookup
        beast::get_lowest_layer(stream_).async_connect(
            results,
            beast::bind_front_handler(
                &session::on_connect,
                shared_from_this()));
    }

    void
    on_connect(beast::error_code ec, tcp::resolver::results_type::endpoint_type)
    {
        if(ec)
            return fail(ec, "connect");

        // Perform the SSL handshake
        stream_.async_handshake(
            ssl::stream_base::client,
            beast::bind_front_handler(
                &session::on_handshake,
                shared_from_this()));
    }

    void
    on_handshake(beast::error_code ec)
    {
        if(ec)
            return fail(ec, "handshake");

        // Set a timeout on the operation
        beast::get_lowest_layer(stream_).expires_after(std::chrono::seconds(30));

        // Send the HTTP request to the remote host
        std::cout << "Sending " << req_ << std::endl;
        http::async_write(stream_, req_,
            beast::bind_front_handler(
                &session::on_write,
                shared_from_this()));
    }

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

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

        // Receive the HTTP response
        http::async_read(stream_, buffer_, res_,
            beast::bind_front_handler(
                &session::on_read,
                shared_from_this()));
    }

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

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

        // Write the message to standard out
        std::cout << res_ << std::endl;

        // Set a timeout on the operation
        beast::get_lowest_layer(stream_).expires_after(std::chrono::seconds(30));

        // Gracefully close the stream
        stream_.async_shutdown(
            beast::bind_front_handler(
                &session::on_shutdown,
                shared_from_this()));
    }

    void
    on_shutdown(beast::error_code ec)
    {
        if(ec == net::error::eof)
        {
            // Rationale:
            // 
            ec = {};
        }
        if(ec)
            return fail(ec, "shutdown");

        // If we get here then the connection is closed gracefully
    }
};

//------------------------------------------------------------------------------

int main() {
    // The io_context is required for all I/O
    net::io_context ioc;

    // The SSL context is required, and holds certificates
    ssl::context ctx{ssl::context::tlsv12_client};

    // Verify the remote server's certificate
    ctx.set_verify_mode(ssl::verify_peer);
    ctx.set_default_verify_paths();

    // Launch the asynchronous operation
    // see for endpoints: https://binance-docs.github.io/apidocs/spot/en/#general-info
    static boost::url_view const base_api{"wss://api.binance.com/api/v3/"};

    boost::url method{"depth"};
    method.params().emplace_back("symbol", "BTCUSDT");

    // The session is constructed with a strand to
    // ensure that handlers do not execute concurrently.
    std::make_shared<session>(net::make_strand(ioc), ctx)
        ->run(make_url(base_api, method));

    // Run the I/O service. The call will return when
    // the get operation is complete.
    ioc.run();
}

版画

url: wss://api.binance.com/api/v3/depth?symbol=BTCUSDT
url.host(): api.binance.com
url.encoded_path(): /api/v3/depth
url.encoded_origin(): wss://api.binance.com
url.encoded_query(): symbol=BTCUSDT
url.encoded_authority(): api.binance.com
Sending GET /api/v3/depth?symbol=BTCUSDT HTTP/1.1
Host: api.binance.com
User-Agent: Boost.Beast/322


HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 6447
Connection: keep-alive
Date: Tue, 26 Apr 2022 22:47:24 GMT
Server: nginx
Vary: Accept-Encoding
x-mbx-uuid: 9e00433d-5123-472c-9bf1-10104394266d
x-mbx-used-weight: 1
x-mbx-used-weight-1m: 1
Strict-Transport-Security: max-age=31536000; includeSubdomains
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'self'
X-Content-Security-Policy: default-src 'self'
X-WebKit-CSP: default-src 'self'
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, HEAD, OPTIONS
X-Cache: Miss from cloudfront
Via: 1.1 fa544a973edca8926f95609301f23b66.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: DUS51-P2
X-Amz-Cf-Id: NIOqhB8rrl5nqCo_-TBwYPkgPXdREtQY4PwIi441WxjKRMOoeBkERQ==

{"lastUpdateId":18749934602,"bids":[["38290.70000000","4.61843000"],["38290.69000000","0.00060000"],["38290.65000000","0.00416000"],["38290.34000000","0.35254000"],["38290.33000000","0.75000000"],["38289.79000000","0.13058000"],["38289.00000000","0.18264000"],["38288.82000000","0.39171000"],["38288.63000000","0.00052000"],["38288.62000000","0.29100000"],["38288.02000000","0.39173000"],["38288.01000000","0.13484000"],["38287.31000000","0.53725000"],["38286.71000000","0.01319000"],["38286.70000000","1.74256000"],["38285.48000000","0.04000000"],["38285.41000000","0.57240000"],["38284.97000000","5.41100000"],["38284.96000000","2.50745000"],["38284.95000000","0.00091000"],["38284.14000000","0.00100000"],["38283.95000000","0.00027000"],["38283.81000000","0.74700000"],["38283.72000000","0.39175000"],["38283.14000000","0.39177000"],["38283.04000000","0.06000000"],["38282.99000000","0.35261000"],["38282.81000000","2.41006000"],["38282.54000000","0.39178000"],["38281.24000000","0.00400000"],["38281.13000000","0.75000000"],["38281.00000000","0.10000000"],["38280.99000000","0.04000000"],["38280.84000000","0.01829000"],["38280.44000000","0.00027000"],["38280.00000000","0.05225000"],["38279.53000000","0.45585000"],["38279.21000000","0.06000000"],["38278.89000000","0.00029000"],["38278.76000000","0.12000000"],["38277.61000000","0.04000000"],["38276.08000000","0.08000000"],["38275.62000000","0.07982000"],["38275.48000000","0.00900000"],["38275.42000000","0.26100000"],["38275.38000000","0.06000000"],["38274.31000000","0.26100000"],["38274.29000000","0.00340000"],["38274.28000000","0.80417000"],["38274.24000000","0.44994000"],["38273.47000000","0.03000000"],["38273.43000000","0.12968000"],["38272.96000000","0.04102000"],["38272.86000000","0.03091000"],["38272.68000000","1.89237000"],["38271.97000000","0.01304000"],["38271.79000000","0.00416000"],["38271.73000000","0.00028000"],["38271.48000000","0.06000000"],["38271.40000000","0.00037000"],["38270.64000000","0.02600000"],["38270.63000000","0.00027000"],["38270.46000000","0.10000000"],["38270.45000000","0.75000000"],["38270.41000000","0.66800000"],["38270.00000000","0.05356000"],["38269.77000000","0.02615000"],["38269.76000000","0.02615000"],["38269.45000000","0.00037000"],["38269.44000000","0.09999000"],["38269.09000000","0.58398000"],["38269.02000000","0.07824000"],["38269.00000000","0.00169000"],["38268.92000000","0.31167000"],["38268.88000000","0.00306000"],["38268.83000000","0.02028000"],["38268.81000000","0.12271000"],["38268.36000000","0.39000000"],["38268.19000000","0.04166000"],["38267.89000000","1.93553000"],["38267.52000000","0.01041000"],["38267.31000000","0.00027000"],["38267.12000000","0.00037000"],["38266.66000000","0.04000000"],["38266.35000000","0.09000000"],["38265.65000000","0.75000000"],["38265.63000000","0.00037000"],["38265.60000000","0.00057000"],["38265.55000000","2.54224000"],["38265.39000000","0.15000000"],["38265.27000000","0.01047000"],["38265.20000000","0.10000000"],["38265.10000000","0.10000000"],["38264.94000000","0.03086000"],["38264.19000000","0.03086000"],["38263.48000000","0.03960000"],["38263.39000000","0.62956000"],["38262.53000000","0.02615000"],["38261.88000000","0.28928000"],["38261.84000000","0.00037000"]],"asks":[["38290.71000000","1.11417000"],["38290.73000000","0.59583000"],["38291.16000000","0.00900000"],["38291.98000000","0.02421000"],["38292.63000000","0.00522000"],["38293.95000000","0.00307000"],["38294.17000000","0.01310000"],["38294.30000000","0.00037000"],["38295.50000000","0.00037000"],["38296.22000000","0.75000000"],["38297.00000000","0.01469000"],["38297.16000000","0.75000000"],["38297.36000000","0.00041000"],["38297.42000000","0.00037000"],["38297.62000000","0.10660000"],["38298.13000000","0.00783000"],["38298.14000000","0.00339000"],["38298.18000000","0.61816000"],["38298.24000000","0.09585000"],["38298.32000000","0.01910000"],["38298.63000000","0.26119000"],["38299.00000000","0.01486000"],["38299.70000000","0.13057000"],["38300.00000000","24.61496000"],["38300.16000000","0.09585000"],["38300.85000000","0.12969000"],["38300.91000000","0.00037000"],["38301.48000000","0.26149000"],["38301.62000000","0.04340000"],["38302.08000000","0.14125000"],["38302.20000000","0.06000000"],["38302.69000000","0.01020000"],["38302.78000000","0.75000000"],["38302.84000000","0.04702000"],["38302.88000000","0.00037000"],["38303.04000000","0.04823000"],["38303.25000000","0.26118000"],["38303.30000000","0.00100000"],["38303.57000000","0.08000000"],["38304.00000000","0.14262000"],["38304.04000000","0.00100000"],["38304.10000000","0.25976000"],["38304.39000000","0.94299000"],["38304.80000000","0.00037000"],["38304.96000000","0.08314000"],["38305.04000000","0.00050000"],["38305.10000000","0.32000000"],["38305.16000000","0.07648000"],["38305.34000000","0.00040000"],["38305.66000000","0.10000000"],["38305.72000000","0.10000000"],["38306.19000000","0.26114000"],["38306.25000000","0.64000000"],["38306.48000000","0.00055000"],["38306.72000000","0.75000000"],["38306.73000000","0.26116000"],["38306.80000000","0.74700000"],["38306.91000000","0.07105000"],["38306.92000000","0.00260000"],["38307.06000000","1.93567000"],["38307.11000000","0.00037000"],["38307.55000000","0.01829000"],["38307.60000000","0.00034000"],["38309.64000000","0.03000000"],["38310.00000000","0.30197000"],["38310.15000000","0.01827000"],["38310.24000000","0.04923000"],["38310.30000000","0.00027000"],["38310.68000000","0.05000000"],["38310.76000000","0.05454000"],["38310.87000000","0.09141000"],["38311.29000000","0.00059000"],["38311.42000000","0.02300000"],["38311.64000000","0.01105000"],["38312.29000000","0.03939000"],["38313.03000000","0.00221000"],["38313.43000000","0.12801000"],["38313.57000000","1.97481000"],["38314.24000000","0.00052000"],["38314.34000000","0.75000000"],["38315.53000000","0.04020000"],["38315.56000000","0.02727000"],["38315.70000000","0.00064000"],["38315.78000000","0.00904000"],["38316.45000000","0.00074000"],["38316.80000000","0.06000000"],["38317.12000000","0.05453000"],["38317.26000000","0.12029000"],["38317.59000000","0.30000000"],["38317.61000000","0.00030000"],["38317.65000000","0.06813000"],["38318.20000000","0.24169000"],["38318.28000000","0.02581000"],["38318.56000000","0.31333000"],["38318.81000000","0.04102000"],["38318.82000000","0.03086000"],["38319.67000000","0.03086000"],["38319.98000000","0.00885000"],["38319.99000000","0.01051000"],["38320.00000000","0.05221000"]]}
shutdown: stream truncated