错误w / C ++ poco和HTTPSStreamFactory

时间:2010-07-15 21:38:50

标签: c++ https poco-libraries

我正在尝试构建一个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;
}

任何帮助都会很棒。感谢

2 个答案:

答案 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);