orb*_*how 5 c++ http request poco-libraries
我想知道如何用C++中的POCO对URL进行请求(例如下载图片并保存)?
到目前为止,我得到了这个小代码
#include <iostream>
#include <string>
#include "multiplication.h"
#include <vector>
#include <HTTPRequest.h>
using std::cout;
using std::cin;
using std::getline;
using namespace Poco;
using namespace Net;
int main() {
HTTPRequest *test = new HTTPRequest("HTTP_GET", "http://www.example.com", "HTTP/1.1");
}
Run Code Online (Sandbox Code Playgroud)
NGI*_*NGI 20
通常POCO有一个非常简单的优点,即使你对它一无所知,你也不需要像boost/asio那样的中/高级C++知识(例如,什么意思是enable_share_from_this ......)
在poco"安装目录"下,您可以找到示例目录(在我的情况下poco\poco-1.4.6p4\Net\samples\httpget\src).
在线帮助浏览也很简单快捷(例如浏览课程).
如果您目前对C++的理解还不够,那就去大学图书馆并借阅Scott Meyers的书籍(Effective C++和更高效的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;
}
Run Code Online (Sandbox Code Playgroud)
而且功能几乎没有改变:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我让你为你安排一些事情,看看你的磁盘放在哪里.
希望它会有所帮助