0

我用 casablanca(或 cpprest)库中的 http_listener 创建了一个简单的应用程序:

#include <cpprest/http_listener.h>
#include <functional>

using namespace web::http::experimental::listener;
using namespace web::http;
using namespace web;

void handle_get(http_request message)
{
    message.reply(status_codes::OK, U("Hello, World!"));
};

void handle_post(http_request message)
{
    message.reply(status_codes::NotFound);
};

void handle_put(http_request message)
{
    message.reply(status_codes::NotFound);
};

void handle_delete(http_request message)
{
    message.reply(status_codes::NotFound);
};

#define TRACE(msg)            std::wcout << msg
#define TRACE_ACTION(a, k, v) std::wcout << a << L" (" << k << L", " << v << L")\n"

int main(int argc, char ** argv)
{
  uri_builder uri(U("http://127.0.0.1:61561"));
  http_listener listener(uri.to_uri());

  listener.support(methods::GET, handle_get);
  listener.support(methods::POST, handle_post);
  listener.support(methods::PUT, handle_put);
  listener.support(methods::DEL, handle_delete);

  try
  {
     listener
        .open()
        .then([&listener](){TRACE(L"\nstarting to listen\n");})
       .wait();

      while (true);
  }
  catch (std::exception const & e)
  {
     std::wcout << e.what() << std::endl;
  }
  catch (...)
  {
     std::wcout << "Unknown exception" << std::endl;
  }

  return 0;
}

我不明白的是,当我尝试访问该页面时(XXXX:XXXX;不管哪个,我已经测试过很多),应用程序毫无例外地崩溃,我得到一个“没有收到数据,无法加载网页,因为服务器未发送数据。错误代码:ERR_EMPTY_RESPONSE”页面。

4

2 回答 2

0

好吧,你没有在回复中发送任何数据,只是一个状态代码。所以,是的,如果您的客户需要数据并且您饿死它,那么这将会发生。

http_request作为参数传递的那个类message肯定希望在调用reply方法之前首先设置内容(或者reply将回复数据作为另一个参数,并且该参数具有空数据默认值)。无论如何,您必须以某种方式提供内容数据,您的客户期待它并依赖您,程序员来满足它。

于 2015-03-27T15:07:19.807 回答
0

似乎问题出在 CPPREST 的版本上。我已经更新到 2.5 并且它工作...

于 2015-04-14T13:19:23.863 回答