这是一个用于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("http://url.com") RestClient::Response r = RestClient::post("http://url.com/post", "text/json", "{\"foo\": \"bla\"}") RestClient::Response r = RestClient::put("http://url.com/put", "text/json", "{\"foo\": \"bla\"}") RestClient::Response r = RestClient::del("http://url.com/delete") RestClient::Response r = RestClient::head("http://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
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("http://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());
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("http://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());
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("http://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());
- upload file