使用POCO发送HTTP(S)请求
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 ;
}
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 ;
}
使用POCO发送HTTP(S)请求的更多相关文章
- 如果调用ASP.NET Web API不能发送PUT/DELETE请求怎么办?
理想的RESTful Web API采用面向资源的架构,并使用请求的HTTP方法表示针对目标资源的操作类型.但是理想和现实是有距离的,虽然HTTP协议提供了一系列原生的HTTP方法,但是在具体的网络环 ...
- 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案
第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...
- 从零开始学习Node.js例子七 发送HTTP客户端请求并显示响应结果
wget.js:发送HTTP客户端请求并显示响应的各种结果 options对象描述了将要发出的请求.data事件在数据到达时被触发,error事件在发生错误时被触发.HTTP请求中的数据格式通过MIM ...
- 使用 HttpWebRequest 发送模拟 POST 请求
使用HttpWebRequest发送模拟POST请求 网页中,如果form的method="POST",这时点击submit按钮可以给服务器发送了一个POST请求,如果metho ...
- IOS学习之路十八(通过 NSURLConnection 发送 HTTP 各种请求)
你想通过 Http 协议向服务器发送一个 Get 的包装请求,并在这个请求中添加了一些请 求参数. 向远程服务器发送一个 GET 请求,然后解析返回的数据.通常一个 GET 请求是添加了 一些参数的, ...
- 发送POST测试请求的若干方法
最近在工作中需要测试发送带Json格式body值的HTTP POST请求.起初,我在Linux环境下使用curl命令去发送请求,但是,在发送的过程中却遇到了一些问题,经过一段时间的摸索,发现了以下几种 ...
- Postman教程——发送第一个请求
系列文章首发平台为果冻想个人博客.果冻想,是一个原创技术文章分享网站.在这里果冻会分享他的技术心得,技术得失,技术人生.我在果冻想等待你,也希望你能和我分享你的技术得与失,期待. 前言 过年在家,闲来 ...
- charles重复发送一个网络请求&同时发送N次
重发网络请求的目的:后端调试的过程中,一直在客户端进行点点点比较麻烦,此时直接发送请求比较方便查看调试后的结果(方便后端调试) 1.重复发送一个请求(有两种方法) (1)选定该请求,右键选择repea ...
- [Postman]发送第一个请求(1)
通过API请求,您可以与具有要访问的API端点的服务器联系,并执行某些操作.这些操作是HTTP方法. 最常用的方法是GET,POST,PUT和DELETE.方法的名称是不言自明的.例如,GET使您可以 ...
随机推荐
- gevent 使用踩坑
简单介绍 gevent 基本概念: 调度器: hub 上下文切换管理: switch 主循环: loop 协程: greenlet gevent 特性: ...
- 洛谷P3312 - [SDOI2014]数表
Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...
- Nk 1430 Fibonacci(二分矩阵乘幂)
AC代码: #include<iostream> using namespace std; ][]; ][]; ][]; ][]; void binary(int n) { int i,j ...
- 【HDOJ5948】Thickest Burger(签到)
题意:不知道 思路:队友写的 #include <stdio.h> #include <vector> #include <algorithm> #include ...
- 【BZOJ1305】dance跳舞(最大流,裂点,二分答案)
题意:一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲. 有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”). ...
- Java 模板权重随机
Template templates=...// 所有的模板 final int _weights=1000; // 所有的模板权重 Template _template=null; //随机一个权重 ...
- css3 nth-child 与 nth-of-type 的区别
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...
- 真的了解CDN服务吗?
Im CDN,WOW,COOL CDN知识详解 全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络,CDN是构建在网络之上的 ...
- 【Linux学习笔记】栈与函数调用惯例
栈与函数调用惯例(又称调用约定)— 基础篇 记得一年半前参加百度的校招面试时,被问到函数调用惯例的问题.当时只是懂个大概,比如常见函数调用约定类型及对应的参数入栈顺序等.最近看书过程中,重新回顾了这些 ...
- C# UserControl 判断是否是设计模式中
In Windows Forms application, we can use Control.IsInDesignMode or LicenseManager.UsageMode == Licen ...