使用POCO發送HTTP(S)請求

來源:互聯網
上載者:User

標籤:地址   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)請求

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.