如果我访问该页面,带有casablanca的http服务器将崩溃
http server with casablanca crashes if I access the page
我已经从casablanca(或cpprest)库创建了一个简单的应用程序:
#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 listenn");})
.wait();
while (true);
}
catch (std::exception const & e)
{
std::wcout << e.what() << std::endl;
}
catch (...)
{
std::wcout << "Unknown exception" << std::endl;
}
return 0;
}
我没有得到的是,当我试图访问该页面时(X.X.X.X:XXXX;无论是哪一个,我已经测试过很多次),应用程序都会崩溃,我会得到一个"没有收到数据,无法加载网页,因为服务器没有发送数据。错误代码:ERR_EMPTY_REPONSE"页面。
好吧,您在回复中没有发送任何数据,只是发送了一个状态代码。所以,是的,如果你的客户期望数据,而你却缺乏数据,那么这种情况就会发生。
作为message
参数传递的http_request
类肯定希望在调用reply
方法之前先设置内容(或者reply
将回复数据作为另一个参数,并且该参数的默认数据为空)。无论如何,你必须以某种方式提供内容数据,你的客户正在期待它,并依靠你,程序员来满足它
问题似乎出在CPPREST的版本上。我已经更新到2.5,它起作用了。。。
相关文章:
- 如何在boost beast http请求中设置http头
- 在多个核心中处理一个HTTP请求
- SFML library: http request
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 通过单独的 tcp 流建立 http 连接
- 使用 winsock 接收 http 请求
- 使用 cpprest (Casablanca) 返回 PDF 响应
- 如何在 c++ 中通过 http 发送大型视频文件?
- 对于 http 请求,python 比 c++ 快吗?
- 使用 c++ 的 http 客户端的默认方法
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- 如何重用 http::beast::flat_buffer 和 http::response?
- 在客户端和备忘录中获取 HTTP 命令
- 在C ++ ASIO中,如何为HTTP或HTTPS创建相同的套接字对象(接口/抽象问题?
- HTTP 响应格式不正确?
- C REST SDK(Casablanca) - 如何获得HTTP代理设置
- Casablanca中的HTTP身份验证
- 如果我访问该页面,带有casablanca的http服务器将崩溃