Поддерживает ли CPPRest кодек coreapi + json?Если да, то какой метод это делает? - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в CPPRest и пытаюсь выяснить, может ли CPPRest читать схемы с типом содержимого coreapi + json.(Content-Type: application / vnd.coreapi + json; charset = utf-8).

Я пытаюсь получить доступ к "http://notes.coreapi.org" и получить данные. Аналогично пакету python coreapi (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();
        }
    }
}
...