2014-09-24 183 views
4

我想知道如何使用POCO在C++中對URL進行請求(例如下載圖片並保存)?C++ Http請求與POCO

我這個小碼到目前爲止

#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"); 
} 

回答

18

通常POCO有一個很大的優勢是非常簡單的,即使你對它一無所知,甚至喜歡自己需要提升你不需要中間/提前C++知識/ asio(例如,什麼意思enable_share_from_this ...)

在poco「安裝目錄」下,您可以找到示例目錄,在我們的示例中(poco \ poco-1.4.6p4 \ Net \ samples \ httpget \ src)。 在線幫助瀏覽也很容易和快速(瀏覽類......) 如果您目前對C++的理解不夠,請到大學圖書館借閱Scott Meyers的書籍(有效的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; 
    } 

和功能幾乎不變:

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; 
    } 
} 

我讓你爲你安排東西,看看圖像在你的磁盤上的位置。

希望它會幫助

+0

幫助我很多,非常感謝! – orbatschow 2014-09-25 06:41:29