0

XMLリソースにアクセスするためのC++アプリを作成しようとしています。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);

Poco :: Net :: 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;
}

どんな助けでも素晴らしいでしょう。ありがとう

4

2 に答える 2

1

チェック証明書に沿ったものがないか、ドキュメントを確認してください。ご覧のとおり、SSLはサーバーとクライアントが証明書を交換することで機能します。SSLを実行する私が使用したすべてのライブラリで、開発者は関数を作成するか、サーバーが送信した証明書を検証する必要があります。これは通常、ほとんどの人が実際には気にしないため、開発者はチェックせずに何でも受け入れることを意味します。そのコードが呼び出され、何も返されないため、プログラムがセグメント障害を起こしている可能性があります。そのため、nullが逆参照されているか、そのようなものです。

于 2010-07-15T21:45:02.407 に答える
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);
于 2010-07-19T20:36:11.043 に答える