我正在尝试构建一个C ++应用程序来访问XML资源。使用http代码工作正常,从我从文档中可以看出,我需要做的就是使https工作是确保ssl是安装(是安装了dev版本),并将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);
这是失败的代码 波科::网:: HTTPSStreamFactory :: 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);
当我使用HTTPSStreamFactory发出请求时,这是我收到的错误消息:
NULL指针:_pInstance [在文件中 “/home/chpick/poco-1.3.6p2/Util/include/Poco/Util/Application.h” 第422行
我附上了Application.h
inline Application& Application::instance()
{
poco_check_ptr (_pInstance);
return *_pInstance;
}
任何帮助都会很棒。感谢
答案 0 :(得分:1)
检查文档中的检查证书。你看,SSL服务器和客户端交换证书,并且在我使用的每个库中都有SSL,开发人员必须创建一个函数或以其他方式验证服务器发送的证书;这通常意味着开发人员只是接受任何事情而不进行检查,因为大多数人并不真正关心它。你的程序可能是段错误的,因为正在调用该代码,并且没有返回任何内容,所以null被取消引用,或类似的东西。
答案 1 :(得分:1)
我最后采取了不同的方式:这就是我所做的。
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);