如何在Poco中接收POST请求内容?

时间:2015-11-27 12:35:11

标签: poco-libraries

我在Poco中编写了一个HTTP客户端,它向HTTPServer发送POST请求 以下是摘录

Poco::Net::HTTPClientSession s("127.0.0.1", 9090);
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/echo");

std::string body("rs=this is a random request body");
request.setContentLength(body.length());
s.sendRequest(request) << body;

服务器收到请求,但以下是我能找到的唯一方法来获得蒸汽(即rs =这是......)

void SRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& hreq, Poco::Net::HTTPServerResponse& resp){
std::istream &i = hreq.stream();
        Poco::StreamCopier::copyStream(i, ss, hreq.getContentLength());
}

因此,获取客户端发送内容的方法是使用字符串。 是否有更简单/直接的方式来获取内容?

3 个答案:

答案 0 :(得分:2)

您目前正在做的事情中没有任何字符串 - 您正在从istream复制到ostream。如果你想避免这种情况,你可以将istream的内容读入一个char数组,如下所示:

std::istream &i = hreq.stream();
int len = hreq.getContentLength();
char* buffer = new char[len];
i.read(buffer, len);

当然,您应该注意避免泄漏。

答案 1 :(得分:2)

您可以尝试Poco / Net / HTMLForm:

Poco::Net::HTMLForm form(hreq, hreq.stream());

然后你可以使用form.get(“rs”)或form [“rs”]来获取带有值的std :: string。

https://pocoproject.org/docs/Poco.Net.HTMLForm.html

答案 2 :(得分:0)

Alex在现代C ++(经C ++ 17测试)中的答案为std::string

auto & stream = hreq.stream();
const size_t len = hreq.getContentLength();
std::string buffer(len, 0);
stream.read(buffer.data(), len);