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