17

POCOアシスタントの仕様によると:

Poco::Crypto::OpenSSLInitializer::initialize() を呼び出して、NetSSL ライブラリと、基礎となる OpenSSL ライブラリを初期化します。NetSSL ライブラリのクラスを使用する前に呼び出す必要があります。NetSSL は、Poco::Crypto::OpenSSLInitializer インスタンス、または Context または SSLManager インスタンスの作成時に同様のメカニズムを介して自動的に初期化されます。ただし、アプリケーションの起動時にどのような場合でも initializeSSL() を呼び出すことをお勧めします。

を使用する場合HTTPSClientSession、最初に Application オブジェクトを構築する必要がありますか? クライアントでどのように使用できますか? 誰でも教えてくれますか?どうもありがとうございました!

4

2 に答える 2

16

例として Net/samples/httpget を取り上げてみましょう。httpget/ を新しい httpsget ディレクトリとしてコピーしましょう。

  1. Makefileを開き、「PocoNetSSL」をtarget_libsに追加します
  2. 「HTTPClientSession」を「HTTPSClientSession」に置き換えます
  3. SSL を使用するために Poco::Net::Context を作成する必要があります
  4. 「HTTPClientSession session(uri.getHost(), uri.getPort());」を置き換えます。次の2行で:
const Context::Ptr context = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
HTTPSClientSession session(uri.getHost(), uri.getPort(), context);

概要:

  1. PocoNetSSL を lib_depends として追加
  2. HTTPSClientSession で Poco::Net::Context を使用する
于 2012-10-02T03:42:39.363 に答える
7

いいえ、Application オブジェクトは必要ありません。完全に機能する例を次に示します。

$ httpsget https://httpbin.org/user-agent
{
  "user-agent": "Poco HTTPSClientSession"
}

コード:

#include "Poco/StreamCopier.h"
#include "Poco/URI.h"
#include "Poco/Exception.h"
#include "Poco/SharedPtr.h"
#include "Poco/Net/SSLManager.h"
#include "Poco/Net/KeyConsoleHandler.h"
#include "Poco/Net/ConsoleCertificateHandler.h"
#include "Poco/Net/HTTPSClientSession.h"
#include "Poco/Net/HTTPRequest.h"
#include "Poco/Net/HTTPResponse.h"
#include <memory>
#include <iostream>

using namespace Poco;
using namespace Poco::Net;

class SSLInitializer {
public:
    SSLInitializer() { Poco::Net::initializeSSL(); }

    ~SSLInitializer() { Poco::Net::uninitializeSSL(); }
};

int main(int argc, char** argv)
{
    SSLInitializer sslInitializer;

    SharedPtr<InvalidCertificateHandler> ptrCert = new ConsoleCertificateHandler(false);
    Context::Ptr ptrContext = new Context(Context::CLIENT_USE, "", "", "rootcert.pem", Context::VERIFY_STRICT, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    SSLManager::instance().initializeClient(0, ptrCert, ptrContext);

    try
    {
        if (argc > 1)
        {
            URI uri(argv[1]);
            HTTPSClientSession s(uri.getHost(), uri.getPort());
            HTTPRequest request(HTTPRequest::HTTP_GET, uri.getPath());
            request.set("user-agent", "Poco HTTPSClientSession");
            s.sendRequest(request);
            HTTPResponse response;
            std::istream& rs = s.receiveResponse(response);
            StreamCopier::copyStream(rs, std::cout);
        }
    }
    catch (Exception& ex)
    {
        std::cout << ex.displayText() << std::endl;
        return 1;
    }

    return 0;
}
于 2015-10-26T03:18:49.883 に答える