Это касается моего проекта, где я пишу Poco SSL-клиент для связи с сервером.
Я могу сделать (i) Basic Auth (ii) Обмен сертификатами.Но после отправки почтового запроса я сталкиваюсь с «Ошибка 500».
Позвольте мне объяснить это =>
У меня есть рабочий локон:
curl -d '{"name":"com.my.session.value"}' -H 'Content-Type: application/json' -H 'Accept: application/json' -E MyCert.pem --key MyKey.pem -u testuser -k -vvv https://<server-ip>:<port>/Internal/directory/path
, используя это Явозможность печатать данные на консоли.Поэтому попытался написать то же самое в Poco / C ++:
// I have handler for keyPassparse, cert, invalid-cert-handler and used them in below line
SSLManager::instance().initializeClient(parse_str, Cert, ptrContext);
URI uri(argv[1]);
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort());
session.setKeepAlive(true);
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, uri.getPath(), Poco::Net::HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("testuser", "secret");
//Here I tried to add headers and data
cred.authenticate(req);
req.add("Content-Type","application/json");
req.add("Accept","application/json");
req.add("data","com.my.session.value"); // try-1 to add data
req.setKeepAlive(true);
std::ostream& myOStream = session.sendRequest(req);
std::string body("name=com.my.session.value"); // try-2 to add data
myOStream << body;
Poco::Net::HTTPResponse response;
std::istream& rs = session.receiveResponse(response);
std::cout << response.getStatus() << " " << response.getReason() << std::endl;
}
catch (Exception& exc)
{
std::cerr << exc.displayText() << std::endl;
return 1;
}
return 0;
}
Это всегда возвращает ошибку: 500 (внутренняя ошибка сервера), что означает, что мой раздел данных не достигает должным образом.
Пожалуйста, предложите мне способ передать правильный раздел "данных" на сервер.
Заранее спасибо.