Poco 是轻量跨平台 C++ 类库,支持网络、文件、线程、加密、jsON/xml 等功能,不依赖第三方库,API 清晰,适合中小型项目;推荐源码构建,需按平台用 CMake 生成工程,核心模块默认编译,httpS 等需手动开启选项;HTTP 客户端示例展示简洁请求流程;各模块职责明确,使用时注意线程安全与字符串编码。

Poco 是一个轻量、跨平台的 C++ 类库集合,专为网络编程、文件系统操作、线程、日期时间、加密、json/XML 解析等常见应用开发任务设计。它不依赖第三方库(除系统基础库外),API 清晰,文档较全,适合中小型项目快速上手。
安装与编译(windows/linux/macos 通用)
官方推荐从源码构建,控制更灵活:
- 下载最新源码(https://pocoproject.org/),解压后进入
build目录 - Windows 下用
cmake -G "visual studio 17 2022" -A x64生成 VS 工程;Linux/macOS 用cmake .. && make -j4 - 默认只编译核心模块(Foundation、XML、Util、Net)。如需 HTTPS 或数据库支持,需开启对应选项,例如:
-DENABLE_NETssl=ON - 安装到系统路径可加
-DCMAKE_INSTALL_PREFIX=/usr/local,然后make install
第一个 Net 模块示例:HTTP 客户端请求
用 Poco::Net::HTTPClientsession 发起 GET 请求,无需手动管理 socket 或解析响应头:
#include <Poco/Net/HTTPClientSession.h> #include <Poco/Net/HTTPRequest.h> #include <Poco/Net/HTTPResponse.h> #include <Poco/StreamCopier.h> #include <Poco/SharedPtr.h> #include <iostream> int main() { try { Poco::Net::HTTPClientSession session("httpbin.org", 80); Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, "/get"); session.sendRequest(req); Poco::Net::HTTPResponse res; std::istream& rs = session.receiveResponse(res); std::cout << "Status: " << res.getStatus() << " " << res.getReason() << "n"; Poco::StreamCopier::copyStream(rs, std::cout); } catch (const Poco::Exception& exc) { std::cerr << exc.displayText() << std::endl; } }
注意:链接时需加 -lPocoNet -lPocoFoundation;若用 HTTPS,主机名写 "https://httpbin.org" 并链接 -lPocoNetSSL。
立即学习“C++免费学习笔记(深入)”;
常用模块速查与典型用途
- Foundation:基础支撑(字符串、时间、日志、配置、线程、信号量)。
Poco::Logger支持多目标输出和级别控制 - XML:dom/SAX 解析器,
Poco::XML::DOMParser可加载 XML 文件并遍历节点 - JSON:轻量解析/生成,
Poco::JSON::Object和Poco::JSON::Parser接口简洁,支持嵌套与序列化 - Util:应用框架支持,含命令行参数解析(
OptionSet)、配置文件读取(INI/properties)、守护进程封装 - Net:TCP/udp、HTTP、websocket、mail(SMTP/POP3)等协议实现,
ServerSocket+TCPServer可快速搭简单服务端
注意事项与避坑提示
- 所有 Poco 对象不是线程安全的(除非文档明确说明),多线程使用时建议每个线程独占 session 或加锁
- 字符串统一用
Poco::UTF8String或std::string(内部以 UTF-8 存储),避免宽字符混用 - HTTP 响应体流(
std::istream&)必须及时读完,否则下次请求可能失败 - Windows 下若遇到链接错误
unresolved external symbol __imp__...,确认是否启用了POCO_STATIC宏,并链接静态库(如PocoFoundationmt.lib)
基本上就这些。Poco 不追求大而全,但把常用功能做得扎实稳定,适合想避开 Boost 庞大依赖、又不愿从零写网络胶水代码的 C++ 开发者。