Poco库使用教程:HTTP GET请求

Poco是一个用于网络编程C++库,它支持多种操作系统,包括桌面、服务器和嵌入式系统。虽然Poco库的文档非常全面,但针对初学者的教程相对较少。本系列教程旨在帮助初学者快速上手Poco库。本文将介绍如何使用Poco库发起HTTP GET请求。

准备工作

在开始之前,您可能需要下载Poco库的完整版,然后编译并安装它。安装完成后,打开您喜欢的文本编辑器,复制以下代码,并将其保存为例如http_get.cc的文件。

编写代码

以下是使用Poco库发起HTTP GET请求的示例代码。

#include #include #include #include #include #include #include #include #include using namespace Poco::Net; using namespace Poco; using namespace std; int main(int argc, char **argv) { if (argc != 2) { cout << "Usage: " << argv[0] << "" << endl; cout << "fetches the resource identified by and print it" << endl; return -1; } try { // 准备会话 URI uri(argv[1]); HTTPClientSession session(uri.getHost(), uri.getPort()); // 准备路径 string path(uri.getPathAndQuery()); if (path.empty()) path = "/"; // 发送请求 HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); session.sendRequest(req); // 获取响应 HTTPResponse res; cout << res.getStatus() << " " << res.getReason() << endl; // 打印响应 istream &is = session.receiveResponse(res); StreamCopier::copyStream(is, cout); } catch (Exception &ex) { cerr << ex.displayText() << endl; return -1; } return 0; }

编译代码

使用g++编译器编译代码:

$ g++ -o http_get http_get.cc -lPocoNet

请确保添加-lPocoNet参数,否则可能会出现编译错误。

运行程序

在终端中运行程序:

$ ./http_get

程序会提示您输入URI:

Usage: ./http_get fetches the resource identified by and print it $ ./http_get http://example.com

程序将输出响应状态码和原因:

200 OK

常见问题

如果您的编译器出现以下错误:

undefined reference to `Poco::URI::URI(char const*)' undefined reference to `Poco::URI::getPort() const' undefined reference to `Poco::URI::getPathAndQuery() const' undefined reference to `Poco::Net::HTTPMessage::HTTP_1_1' undefined reference to `Poco::Net::HTTPRequest::HTTP_GET' undefined reference to `Poco::Net::HTTPClientSession::sendRequest(Poco::Net::HTTPRequest&)' undefined reference to `Poco::Net::HTTPResponse::HTTPResponse()' undefined reference to `Poco::Net::HTTPClientSession::receiveResponse(Poco::Net::HTTPResponse&)' undefined reference to `Poco::Net::HTTPResponse::~HTTPResponse()' undefined reference to `Poco::Net::HTTPRequest::~HTTPRequest()' undefined reference to `Poco::Net::HTTPClientSession::~HTTPClientSession()' undefined reference to `Poco::URI::~URI()' undefined reference to `Poco::Exception::displayText() const'

请确保您使用-lPocoNet参数进行编译:

$ g++ -o http_get http_get.cc -lPocoNet
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485