cpp-netlib

How to construct a basic_request<Tag> object (cpp-netlib)


I'm successfully using cpp-netlib (v0.11.0) and I'm developing some unit tests to test my HTTP server and handler function.

The handler function has the following required signature:

typedef boost::network::http::server<RequestHandler> HttpServerType; 

void operator()(const HttpServerType::request& request, HttpServerType::response& response)

What I'd like to be able to do is instantiate the request object so I can call the handler's function call operator. But I can't get it to compile.

In the above signature, request is a typedef for basic_request<Tag>,

which has a constructor which takes a reference to a boost::network::uri::uri.

The code below generates an error when compiled using clang 3.5.

boost::network::uri::uri url;

url << uri::scheme("http") << uri::host(host) << uri::port(port) << uri::path(path);

HttpServerType::request request(url);


No matching constructor for initialization of 'HttpServerType::request' (aka 'basic_request<boost::network::http::tags::http_server>');

What am I doing wrong?


Solution

  • I found a way to do it.

    The template is specialised for the http_server tag.

    template <>
    struct basic_request<tags::http_async_server> :
    not_quite_pod_request_base<tags::http_async_server> 
    {};
    

    and this only has a default ctor.

    The following code does compile:

    HttpServerType::request request;
    request.destination.append("fred"); 
    request.method.append("POST");