Skip to content

js0ncheng/restclient-cpp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MIT license

关于

这是一个用于C++的简单便捷的REST Client组件,它包装了windows (winhttp/winnet) api !
支持代理,http BasicAuth 认证

环境

C++11

用法

restclient-cpp提供了两种与REST端点交互的方式.
有一个简单的,不需要你配置,所以如果你需要的不仅仅是一个简单的HTTP调用,
你可能会想查看高级用法。还提供了一个编码转换类, textconv_helper
使用方法:

//response utf8
std::wstring body = textconv_helper::A2W_(response.body.c_str(), CP_UTF8);
wprintf(L"body = %s \n", body.c_str());

默认使用的是Winnet Api,切换WinHttp Api

#define _USE_WIHTTP_INTERFACE

简单使用

#include "restclient-cpp/restclient.h"

RestClient::Response r = RestClient::get("https://url.com")
RestClient::Response r = RestClient::post("https://url.com/post", "text/json", "{\"foo\": \"bla\"}")
RestClient::Response r = RestClient::put("https://url.com/put", "text/json", "{\"foo\": \"bla\"}")
RestClient::Response r = RestClient::del("https://url.com/delete")
RestClient::Response r = RestClient::head("https://url.com")

响应类型为RestClient :: Response 属性:

RestClient::Response.code // HTTP response code
RestClient::Response.body // HTTP response body
RestClient::Response.headers // HTTP response headers,The type is map
RestClient::Response.cookies // HTTP response cookies,The type is string
RestClient::Response.cookie // HTTP response cookies,The type is map
RestClient::Response.get_header //It can be used to get the specified header value
RestClient::Response.get_cookie //It can be used to get the specified cookie value

高级用法

GET simple

RestClient::Request request;

request.timeout     	        = 3000;
request.followRedirects     	= false;
request.headers["User-Agent"]	= "Mozilla/5.0";
request.headers["Cookies"]	  = "name=value;";

RestClient::Response response	= RestClient::get("https://www.baidu.com", &request);

printf("%s \n", response.body.c_str());
printf("%d \n", response.code);
printf("%s \n", response.cookies.c_str());
printf("%s %s \n", response.Cookie["BAIDUID"].c_str(), response.get_cookie("BAIDUID").c_str());
printf("%s %s \n", response.headers["Location"].c_str(), response.get_header("Location").c_str());
printf("%s %s \n", response.headers["Content-Type"].c_str(), response.get_header("Content-Type").c_str());
printf("%s %s \n", response.headers["Content-Length"].c_str(), response.get_header("Content-Length").c_str());

POST simple

RestClient::Request request;

request.timeout	= 3000;
request.followRedirects	= false;
request.headers["User-Agent"]	= "Mozilla/5.0";
request.headers["Cookies"] = "name=value;";

RestClient::Response response = RestClient::post("https://www.baidu.com/post.php",
"text/json", "{\"foo\": \"bla\"}",&request);

printf("%s \n", response.body.c_str());
printf("%d \n", response.code);
printf("%s \n", response.cookies.c_str());
printf("%s \n", response.headers["Content-Type"].c_str());
printf("%s \n", response.headers["Content-Length"].c_str());

Proxy simple

RestClient::Request request;

request.proxy.proxy = "http=115.29.2.139:80";
request.proxy.username = "";
request.proxy.password = "";

//request.basicAuth.username = "your username";
//request.basicAuth.password = "your password";

request.timeout	= 3000;
request.followRedirects	= false;
request.headers["User-Agent"]	= "Mozilla/5.0";
request.headers["Cookie"] = "name=value;";

RestClient::Response response	= RestClient::get("https://ipip.yy.com/get_ip_info.php", &request);

//response utf8
std::wstring body = textconv_helper::A2W_(response.body.c_str(), CP_UTF8);
wprintf(L"body = %s \n", body.c_str());

printf("code = %d \n", response.code);
printf("cookie = %s \n", response.cookies.c_str());
printf("%s %s \n", response.Cookie["BAIDUID"].c_str(), response.get_cookie("BAIDUID").c_str());
printf("%s %s \n", response.headers["Location"].c_str(), response.get_header("Location").c_str());
printf("%s %s \n", response.headers["Content-Type"].c_str(), response.get_header("Content-Type").c_str());
printf("%s %s \n", response.headers["Content-Length"].c_str(), response.get_header("Content-Length").c_str());

TODO

  1. upload file

About

C++ winnet/winhttp api restclient

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 99.0%
  • C 1.0%