Không, bạn làm không cần đối tượng Application. Dưới đây là một ví dụ đầy đủ chức năng:
$ httpsget https://httpbin.org/user-agent
{
"user-agent": "Poco HTTPSClientSession"
}
Code:
#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;
}
Context :: VERIFY_NONE, "Chủ đầu tư: Nếu không sử dụng một mật mã vô danh (theo mặc định vô hiệu hóa), máy chủ sẽ gửi một giấy chứng nhận sẽ được đã kiểm tra, nhưng kết quả kiểm tra sẽ bị bỏ qua. " Điều này về cơ bản không đánh bại điểm của giấy chứng nhận? – proteneer
Điểm tốt bằng giấy nhám. Thay đổi thành verifyMode = Context :: VERIFY_STRICT và loadDefaultCAs = true có vẻ như là một mặc định lành mạnh hơn. – thomasa88
Bất kỳ điều gì khác ngoài 'VERIFY_NONE' dường như thực sự an toàn hơn' VERIFY_NONE', nhưng một số máy chủ _have_ không có chứng chỉ hợp lệ ... :-( –