Ошибка с / C ++ Poco и HTTPS Streamfactory
-
16-09-2020 - |
Вопрос
Я пытаюсь создать приложение C ++ для доступа к ресурсу XML.Использование HTTP код работает нормально, от того, что я могу сказать из документов, все, что мне нужно сделать для работы https для работы, - это убедиться, что SSL установлен (да, установлена давление), и измените streamfactory на httpsstreamfactory.
Вот код, который работает:
Poco::Net::HTTPStreamFactory::registerFactory();
Poco::URI uri(argv[1]);
std::auto_ptr<std::istream> pStr(Poco::URIStreamOpener::defaultOpener().open(uri));
std::string str;
StreamCopier::copyToString(*pStr.get(), str);
.
Вот код, который не удается Poco :: Net :: httpsstreamfactory :: Реструктурныйactory (); POCO :: URI URI (ARGV [1]);
std::auto_ptr<std::istream> pStr(Poco::URIStreamOpener::defaultOpener().open(uri));
std::string str;
StreamCopier::copyToString(*pStr.get(), str);
.
Когда я делаю запрос с httpsstreamfactory, это сообщение об ошибке, которое я получаю:
NULL POINTER: _PINSTANCE [в файле "/home/chpick/poco-1.3.6p2/util/include/poco/util/application.h", линия 422]
Я прикрепил приложение .h
inline Application& Application::instance()
{
poco_check_ptr (_pInstance);
return *_pInstance;
}
.
Любая помощь была бы здоровой.Спасибо
Решение 2
Я закончил идти по-другому: вот что я сделал.
const Poco::URI uri(xmlParams.restURI);
std::string path(argv[1]);
const Poco::Net::Context::Ptr context = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context );
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, argv[1] );
req.setKeepAlive(false);
std::string strToSend = "/";
session.sendRequest(req) << strToSend;
Poco::Net::HTTPResponse res;
std::istream& rs = session.receiveResponse(res); // typedef std::istream XMLCharInputStream;
std::string str;
StreamCopier::copyToString(rs, str);
std::istringstream istr(str);
InputSource source(istr);
parser.parse(&source);
. Другие советы
Проверьте документацию для чего-либо вдоль строк сертификата проверки.Вы видите, что SSL работает сервером и обмен клиентами сертификаты, и в каждой библиотеке, которую я использовал, это делает SSL, разработчик должен создать функцию или каким-либо другим способом подтвердить сертификат, отправленный сервером;Что обычно означает, что разработчик просто принимает что-нибудь без проверки, потому что большинство людей не заботятся об этом.Ваша программа может быть SEG-неисправностью, потому что этот код называется, и ничего не возвращается, поэтому нуль разветвляется, или что-то подобное.