Я пытаюсь связать несколько запросов REST с помощью restbed lib, и у меня возникла проблема.
Таким образом, рабочий процесс выглядит примерно так: внешний интерфейс отправляет запрос GET на внутренний сервер. Бэкэнд выполняет некоторую обработку и должен возвращать ответ на веб-интерфейс, но в то же время он также должен передавать ответ на другой REST-сервер.
void CCMService::get_method_handler(const shared_ptr< Session > session)
{
const auto request = session->get_request();
int content_length = request->get_header("Content-Length", 0);
session->fetch(content_length, [](const shared_ptr< Session > session, const Bytes & body)
{
std::vector<std::string> resultImages;
fprintf(stdout, "%.*s\n", (int)body.size(), body.data());
const auto request = session->get_request();
const string parameter = request->get_path_parameter("camGroupId");
try
{
resultImages = prepareImages(parameter.c_str());
}
catch (const std::exception& e)
{
std::string error = e.what();
std::string message = "{error: \"" + error + "\"}";
throw std::exception(message.c_str());
}
fprintf(stderr, "Return response\n");
session->close(OK, resultImages[0], { { "Content-Length", std::to_string(resultImages[0].length())} });
fprintf(stderr, "Send tiles to inference\n");
//send POST request
sendResult(resultImages[1]);
});
}
void CCMService::sendResult(char* result)
{
auto request = make_shared< Request >(Uri("http://127.0.0.1:8080/api"));
request->set_header("Accept", "*/*");
request->set_header("Content-Type", "application/json");
request->set_method("POST");
request->set_header("Host", "http://127.0.0.1:8080");
//request->set_header("Cache-Control", "no-cache");
...
//create json from result - jsonContent
...
request->set_header("Content-Length", std::to_string(jsonContent.length()));
request->set_body(jsonContent);
auto settings = make_shared< Settings >();
auto response = Http::sync(request, settings);
print(response)
}
Что происходит, когда я выполняю запрос POST от функции sendResult, он немедленно получает ответ об ошибке и не ждет реального ответа.
Что я делаю неправильно?
Благодарю.
Задача ещё не решена.
Других решений пока нет …