Запрос публикации Http_client с использованием C++ REST SDK (Casablanca)

Я пытаюсь выполнить HTTP-запрос POST с использованием библиотеки C++ REST SDK (Casablanca), но мне это не удается... И я не могу найти какой-либо последний/рабочий фрагмент. Кто-нибудь может мне помочь?

С помощью моего следующего кода я получаю среду выполнения web::json::json_exception, говорящую «не строка»:

json::value postData;
postData[L"name"] = json::value::string(L"Joe Smith");
postData[L"sport"] = json::value::string(L"Baseball");

web::http::client::http_client client(L"https://jsonplaceholder.typicode.com/posts");

try
{
    client.request(
        methods::POST,
        L"",
        postData/*.as_string().c_str()*/,
        L"application/json");
}
catch (web::json::json_exception &je)
{
    std::cout << je.what();
}
catch (std::exception &e)
{
    std::cout << e.what();
}

person stkhou    schedule 21.02.2017    source источник
comment
Не работает, даже если я раскомментирую .as_string().c_str()   -  person stkhou    schedule 21.02.2017
comment
Если вы сделаете свой минимальный код, вырезанный и вставленный, работающим, это поможет нам помочь вам.   -  person Scott Stensland    schedule 21.02.2017
comment
Вы пытались удалить последний параметр client.request() (Lapplication/json)?   -  person roalz    schedule 21.02.2017
comment
Хм, попробуйте заменить, когда у вас есть L"somestring" на U("somestring")   -  person Yuriy Ivaskevych    schedule 21.02.2017


Ответы (1)


Вам подойдет что-то вроде этого:

        web::json::value json_v ;
        json_v["title"] = web::json::value::string("foo");
        json_v["body"] = web::json::value::string("bar");
        json_v["userId"] = web::json::value::number(1);
        web::http::client::http_client client("https://jsonplaceholder.typicode.com/posts");
        client.request(web::http::methods::POST, U("/"), json_v)
        .then([](const web::http::http_response& response) {
            return response.extract_json(); 
        })
        .then([&json_return](const pplx::task<web::json::value>& task) {
            try {
                json_return = task.get();
            }
            catch (const web::http::http_exception& e) {                    
                std::cout << "error " << e.what() << std::endl;
            }
        })
        .wait();

        std::cout << json_return.serialize() << std::endl;

Вы также можете просто проанализировать строку следующим образом:

        web::json::value json_par;
        json_par.parse("{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}");

Сразу после использования объекта json так же, как в первом примере. Немного проще, если вы читаете json из файла.

person Community    schedule 14.03.2017
comment
как объявляется json_return? Я получаю необъявленную ошибку. - person Ganesh Kamath - 'Code Frenzy'; 08.11.2019