unsigned long request(
        const utility::string_t &method,
        const utility::string_t &path,
        const std::map<utility::string_t, utility::string_t>& headers,
        void * data,
        size_t data_length)
    {
        auto localHeaders = headers;
        localHeaders["User-Agent"] = "test_http_client";
        web::http::http_request request;
        request.set_method(method);
        request.set_request_uri(web::http::uri_builder(m_uri).append_path(path).to_uri());
        auto& hDest = request.headers();
        for (auto it = localHeaders.begin(); it != localHeaders.end(); ++it)
        {
            auto& currentValue = hDest[it->first];
            if (currentValue.empty())
                currentValue = it->second;
            else
                currentValue = currentValue + U(", ") + it->second;
        }
        request.set_body(utility::string_t(reinterpret_cast<const char*>(data), data_length));

        m_responses.push_back(m_client.request(request));
        return 0;
    }