2013-07-25 76 views
3

我終於建立了Poco NetSSL,但已經是第一個例子不起作用。以下片段引發異常,並在我的IDE(Visual Studio 2012)中打開Debugger.h。Poco NetSSL異常

#include <Poco/Net/HTTPSClientSession.h> 

int main() 
{ 
    Poco::Net::HTTPSClientSession clientSession; 
} 

這是輸出:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
NULL pointer: _pInstance [in file "c:\users\domenic\desktop\poco-1.4.6p1-all\util\include\poco\util\application.h", line 446] 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

下面的代碼僅僅完美...

#include <Poco/Net/HTTPClientSession.h> 

int main() 
{ 
    Poco::Net::HTTPClientSession clientSession; 
} 

我想這事做與OpenSSL的。希望有人能幫助我,我真的想開始我的項目。 :(

+0

我不明白爲什麼它與OpenSSL有關。 OpenSSL是基於C的庫,您正在使用基於C++的庫。 – doptimusprime

+0

Poco NetSSL使用OpenSSL,當然C是另一種語言,但沒有別的選擇,因爲SSL只是C的東西。我驚訝於util \ application.h發生異常,而不是任何SSL相關的文件。你們中有人有足夠的知識在Poco圖書館來幫助我嗎? –

回答

4

如果您使用Poco :: Net :: HTTPSClientSession的默認構造函數(或任何其他不使用Poco :: Net :: Context :: Ptr的構造函數),您需要擁有一個Poco :: Util :: Application的實例,以及一個包含SSL/TLS配置的配置文件,以便創建一個默認的Context對象並初始化Poco :: Net :: SSLManager,或者初始化默認的Context和SSLManager你自己

初始化默認的上下文和SSLManager涉及創建一個證書處理程序,創建一個默認的上下文對象並初始化SSLManager,請參閱郵件並下載示例以瞭解如何完成此操作。這個:

Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> pCert = 
    new Poco::Net::ConsoleCertificateHandler(false); 
Poco::Net::Context::Ptr pContext = 
    new Poco::Net::Context(
     Poco::Net::Context::CLIENT_USE, 
     "", 
     "", 
     "rootcert.pem", 
     Poco::Net::Context::VERIFY_RELAXED, 
     9, 
     false, 
     "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); 
SSLManager::instance().initializeClient(0, pCert, pContext); 
+0

非常感謝,就是這樣! –