CPPRest是否支持coreapi + json编解码器?如果是这样,那是哪种方法?

时间:2018-10-23 14:52:44

标签: json cpprest-sdk core-api

我是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();
        }
    }
}

0 个答案:

没有答案