gpt4 book ai didi

c++ - 使用 Poco 在 C++ 中的 HTTPS 请求

转载 作者:可可西里 更新时间:2023-11-01 18:28:19 24 4
gpt4 key购买 nike

我正在尝试使用 Poco 库(版本 poco-1.4.6p1-all)在 C++ 中编写客户端应用程序并在 Visual Studio 2010 中编译,它向具有自写证书的服务器发送 HTTPS 请求。我有一个错误,因为无法识别证书:

httprequest.exe 中 0x76e8c41f 处的第一次机会异常:Microsoft C++ 异常:Poco::Net::SSLException 位于内存位置 0x0044ed38..

我已经尝试更改库(在 X509Certificate.h 中)中编写的验证函数,以便它们始终返回 true 并重建库。同样的错误。

代码如下:

try{
const Poco::URI uri("https://www.theServer.com");
Poco::Net::Context::Ptr context =
new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "",
"","",Poco::Net::Context::VERIFY_RELAXED,
9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");

Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> pAcceptCertHandler = new Poco::Net::AcceptCertificateHandler(true);
Poco::Net::SSLManager::instance().initializeClient(NULL, pAcceptCertHandler, context);

Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context );
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, "" );
req.setContentType("application/x-javascript; charset=utf-8\r\n");
req.setKeepAlive(true);

Poco::Net::HTTPBasicCredentials cred("lala@lala.lala", "lala");
cred.authenticate(req);
session.sendRequest(req);
Poco::Net::HTTPResponse res;
std::istream& rs = session.receiveResponse(res);
std::string resp;

std::vector<Poco::Net::HTTPCookie> cookies;
res.getCookies( cookies );
res.write(std::cout);
}
catch( const Poco::Net::SSLException& e )
{
std::cerr << e.what() << ": " << e.message() << std::endl;
}
catch( const std::exception& e )
{
std::cerr << e.what() << std::endl;;
}

谢谢!

最佳答案

我找到了答案。我真的没有拿到证书。它是这样工作的:

 try{
Poco::Net::initializeSSL();
Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> ptrHandler = new AcceptCertificateHandler(false);
Context::Ptr ptrContext = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_RELAXED, 9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
SSLManager::instance().initializeClient(0, ptrHandler, ptrContext);

Poco::Net::SocketAddress address("www.server.com:443");
Poco::Net::SecureStreamSocket socket(address);
if (socket.havePeerCertificate())
{
X509Certificate cert = socket.peerCertificate();
std::cout<<cert.issuerName()<<"\n";
}
else
{
std::cout<<"No certificate";
}

}catch (Poco::Exception& e) {
std::cout << "Error: " << e.displayText() << "\n";
return -1;
}

关于c++ - 使用 Poco 在 C++ 中的 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18315472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com