码迷,mamicode.com
首页 > Web开发 > 详细

使用POCO发送HTTP(S)请求

时间:2018-08-28 23:56:22      阅读:1890      评论:0      收藏:0      [点我收藏+]

标签:地址   col   stream   tpc   val   bsp   idc   tps   请求   

POCO GitHub地址https://github.com/pocoproject/poco

http_example.cpp

#include <iostream>
#include <Poco/URI.h>
#include <Poco/StreamCopier.h>
#include <Poco/Net/HTTPClientSession.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTMLForm.h>
#include <Poco/Net/HTTPResponse.h>
#include <Poco/Net/NetException.h>
using namespace Poco;
using namespace Poco::Net;
void getExample()
{
    try
    {
        URI uri("http://api.eyekey.com/face/Check/checking?app_id=f89ae61fd63d4a63842277e9144a6bd2&app_key=af1cd33549c54b27ae24aeb041865da2&url=http%3A%2F%2Fpicview01.baomihua.com%2Fphotos%2F20120713%2Fm_14_634778197959062500_40614445.jpg");
        HTTPClientSession session(uri.getHost(), uri.getPort());
        HTTPRequest request(HTTPRequest::HTTP_GET, uri.getPathAndQuery());
        session.sendRequest(request);
        HTTPResponse response;
        std::istream &is = session.receiveResponse(response);
        const HTTPResponse::HTTPStatus &status = response.getStatus();
        if (HTTPResponse::HTTPStatus::HTTP_OK == status)
        {
            std::string result;
            StreamCopier::copyToString(is, result);
            std::cout << result << std::endl;
        }
        else
            std::cout << status << std::endl;
    }
    catch (const NetException &ex)
    {
        std::cerr << "ex: " << ex.displayText() << std::endl;
    }
}
void postExample()
{
    try
    {
        URI uri("http://api.eyekey.com/face/Check/checking");
        HTTPClientSession session(uri.getHost(), uri.getPort());
        HTMLForm form;
        form.add("app_id", "f89ae61fd63d4a63842277e9144a6bd2");
        form.add("app_key", "af1cd33549c54b27ae24aeb041865da2");
        form.add("url", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535455294084&di=8ca75c2b8817900345c35dbe0d1940a5&imgtype=0&src=http%3A%2F%2Fa2.att.hudong.com%2F50%2F67%2F01300533963892135071679109235.png");
        HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPath(), HTTPRequest::HTTP_1_1);
        form.prepareSubmit(request);
        form.write(session.sendRequest(request));
        HTTPResponse response;
        std::istream &is = session.receiveResponse(response);
        const HTTPResponse::HTTPStatus &status = response.getStatus();
        if (HTTPResponse::HTTPStatus::HTTP_OK == status)
        {
            std::string result;
            StreamCopier::copyToString(is, result);
            std::cout << result << std::endl;
        }
        else
            std::cout << status << std::endl;
    }
    catch (const NetException &ex)
    {
        std::cerr << "ex: " << ex.displayText() << std::endl;
    }
}
int main()
{
    getExample();
    std::cout << std::endl;
    postExample();
    std::cout << std::endl;
    std::system("pause");
    return 0;
}

https_example.cpp

#include <iostream>
#include <Poco/URI.h>
#include <Poco/StreamCopier.h>
#include <Poco/Net/SSLManager.h>
#include <Poco/Net/AcceptCertificateHandler.h>
#include <Poco/Net/Context.h>
#include <Poco/Net/HTTPSClientSession.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTMLForm.h>
#include <Poco/Net/HTTPResponse.h>
#include <Poco/Net/NetException.h>
using namespace std;
using namespace Poco;
using namespace Poco::Net;
void getExample()
{
    try
    {
        SSLManager::InvalidCertificateHandlerPtr handlerPtr(new AcceptCertificateHandler(false));
        Context::Ptr context = new Context(Context::CLIENT_USE, "");
        SSLManager::instance().initializeClient(nullptr, handlerPtr, context);
        HTTPSClientSession session(context);
        URI uri("https://api.eyekey.com/face/Check/checking?app_id=f89ae61fd63d4a63842277e9144a6bd2&app_key=af1cd33549c54b27ae24aeb041865da2&url=http%3A%2F%2Fpicview01.baomihua.com%2Fphotos%2F20120713%2Fm_14_634778197959062500_40614445.jpg");
        session.setHost(uri.getHost());
        session.setPort(uri.getPort());
        HTTPRequest request(HTTPRequest::HTTP_GET, uri.getPathAndQuery());
        session.sendRequest(request);
        HTTPResponse response;
        istream &is = session.receiveResponse(response);
        const HTTPResponse::HTTPStatus &status = response.getStatus();
        if (HTTPResponse::HTTPStatus::HTTP_OK == status)
        {
            StreamCopier::copyStream(is, cout);
            cout << endl;
        }
        else
            cout << status << endl;
    }
    catch (const NetException &ex)
    {
        cerr << ex.displayText() << endl;
    }
}
void postExample()
{
    try
    {
        SSLManager::InvalidCertificateHandlerPtr handlerPtr(new AcceptCertificateHandler(false));
        Context::Ptr context = new Context(Context::CLIENT_USE, "");
        SSLManager::instance().initializeClient(nullptr, handlerPtr, context);
        HTTPSClientSession session(context);
        URI uri("https://api.eyekey.com/face/Check/checking");
        session.setHost(uri.getHost());
        session.setPort(uri.getPort());
        HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPath());
        HTMLForm form;
        form.set("app_id", "f89ae61fd63d4a63842277e9144a6bd2");
        form.set("app_key", "af1cd33549c54b27ae24aeb041865da2");
        form.set("url", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535455294084&di=8ca75c2b8817900345c35dbe0d1940a5&imgtype=0&src=http%3A%2F%2Fa2.att.hudong.com%2F50%2F67%2F01300533963892135071679109235.png");
        form.prepareSubmit(request);
        form.write(session.sendRequest(request));
        HTTPResponse response;
        istream &is = session.receiveResponse(response);
        const HTTPResponse::HTTPStatus &status = response.getStatus();
        if (HTTPResponse::HTTPStatus::HTTP_OK == status)
        {
            string result;
            StreamCopier::copyToString(is, result);
            cout << result << endl;
        }
        else
            cout << status << endl;
    }
    catch (const NetException &ex)
    {
        cerr << ex.displayText() << endl;
    }
}
int main()
{
    getExample();
    cout << endl;
    postExample();
    cout << endl;
    system("pause");
    return 0;
}

 

使用POCO发送HTTP(S)请求

标签:地址   col   stream   tpc   val   bsp   idc   tps   请求   

原文地址:https://www.cnblogs.com/buyishi/p/9519778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!