通常 POCO 有一个很大的优势,即使您对此一无所知,也非常简单,并且您不需要像 boost/asio 那样的中/高级 C++ 知识(例如,enable_share_from_this 意味着什么...)
在 poco“安装目录”下,您可以找到示例目录(在我的例子中,在poco\poco-1.4.6p4\Net\samples\httpget\src
).
在线帮助浏览也简单快捷(例如浏览课程)。
如果你目前对 C++ 的理解还不够,请去大学图书馆借阅 Scott Meyers 的书籍(Effective C++ 以及之后 More effective C++ )
所以我们调整示例代码httpget.cpp
到所需的最低限度。
里面主要:
URI uri("http://pocoproject.org/images/front_banner.jpg");
std::string path(uri.getPathAndQuery());
if (path.empty()) path = "/";
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest request(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPResponse response;
if (!doRequest(session, request, response))
{
std::cerr << "Invalid username or password" << std::endl;
return 1;
}
并且该功能几乎未受影响:
bool doRequest(Poco::Net::HTTPClientSession& session,
Poco::Net::HTTPRequest& request,
Poco::Net::HTTPResponse& response)
{
session.sendRequest(request);
std::istream& rs = session.receiveResponse(response);
std::cout << response.getStatus() << " " << response.getReason() << std::endl;
if (response.getStatus() != Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED)
{
std::ofstream ofs("Poco_banner.jpg",std::fstream::binary);
StreamCopier::copyStream(rs, ofs);
return true;
}
else
{
//it went wrong ?
return false;
}
}
我让您为您安排一切并查看图像在磁盘上的位置。
希望它会有所帮助