我是CPPRest的新手,我想弄清楚CPPRest是否可以读取具有coreapi + json内容类型的架构。 (内容类型:application / vnd.coreapi + json; charset = utf-8)。
我正在尝试访问“ http://notes.coreapi.org”并获取数据。与coreapi python软件包(http://www.coreapi.org/)类似,并且想知道cpprest是否支持,如果可以,我可以使用哪些方法来提取信息。我的最终目标是了解架构数据,并类似于coreapi包使用它。
我认为CPPRest这样做是其功能的一部分,但可能我错了。我搜索了它,但找不到相关信息,因此将其发布在这里。
到目前为止,我已向http://notes.coreapi.org发送了一个客户端请求,并尝试以我的代码可以理解的格式获取数据。这是我的代码。
#include <iostream>
//for string to wstring conversion
#include <locale>
#include <codecvt>
#include <string>
#include "myheader.h"
#include "cpprest/base_uri.h"
#include "cpprest/http_client.h"
using namespace web;
using namespace http;
using namespace http::client;
int main()
{
utility::string_t port = U("80");
utility::string_t address = U("http://notes.coreapi.org:");
address.append(port);
http::uri uri = http::uri(address);
http_client client1(http::uri_builder(uri).to_uri());
pplx::task<http_response> client1_response = client1.request(methods::GET);
client1_response.wait();
if (client1_response.is_done())
{
std::wcout << client1_response.get().to_string();
/*
output:
HTTP/1.1 200 OK
Allow: GET, POST, OPTIONS
Connection: keep-alive
Content-Type: application/vnd.coreapi+json; charset=utf-8
Date: Tue, 23 Oct 2018 14:36:36 GMT
Server: gunicorn/19.3.0
Transfer-Encoding: chunked
Vary: Accept
Via: 1.1 vegur
*/
auto stringtask = client1_response.get().extract_string();
if (stringtask.is_done())
{
ucout << " info: stringtask" << std::endl << stringtask.get();
}
auto string1task = client1_response.get().extract_utf16string();
if (string1task.is_done())
{
ucout << " info: string1task" << std::endl << string1task.get();
}
auto extract_utf8string = client1_response.get().extract_utf8string();
if (extract_utf8string.is_done())
{
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide = converter.from_bytes(extract_utf8string.get());
ucout << " info: extract_utf8string" << std::endl << wide.c_str();
}
auto jsontask = client1_response.get().extract_json();
if (jsontask.is_done())
{
ucout << " info: jsontask" << std::endl << jsontask.get();
}
}
}