gpt4 book ai didi

c++ - 用于测试 Poco HTTPServer handleRequest 未编译的包装器。

转载 作者:行者123 更新时间:2023-11-28 05:41:04 24 4
gpt4 key购买 nike

我正在尝试编写一个包装器来测试使用 Poco 实现的 http 服务器。服务器使用 HTTPRequestHandler 的子类实现,并实现了 handleRequest 方法。 handleRequest 方法有两个参数 HTTPServerRequest 和 HTTPServerResponse。

handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)

这些都是抽象类。在我的包装器中,我需要直接调用 handleRequest 方法。像这样:

req_handler->handleRequest(&req, &res);

我想要填充请求的方式是使用从 HTTPRequest 继承的 read() 方法,HTTPRequest 是 HTTPServerRequest 的父类。像这样:

HTTPServerRequest req = new HTTPServerRequest();
char* buffer //populate this from std::cin
std::istringstream iss(buffer);
try {
req->read(iss);
}

但问题是我不能直接为 HTTPServerRequest/HTTPServerResponse 调用“new”,因为它们是抽象类。我尝试使用 HTTPServerRequestImpl 但它给出了编译错误,即未实现纯虚函数,并且 HTTPServerRequestImpl 也没有空构造函数。我试过这个:

HTTPServerRequest req  = new HTTPServerRequestImpl()

这也如预期的那样给出了编译器错误。那么编写这样一个包装器的正确方法是什么? Poco写服务器的时候是如何做的比较理想。 ?我只想要一个极简主义的包装器,它使用从标准输入填充的请求调用 handleRequest。

最佳答案

不需要直接使用 HTTPServerRequest。使用 HTTPClientSessionHTTPRequest :

HTTPClientSession s("host", port);
HTTPRequest request(HTTPRequest::HTTP_POST, "/");
std::string body("hello world\r\n0\r\n");
request.setContentLength((int) body.length());
s.sendRequest(request) << body;
HTTPResponse response;
std::istream& rs = s.receiveResponse(response);
// ...

关于c++ - 用于测试 Poco HTTPServer handleRequest 未编译的包装器。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37083656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com