我正在尝试使用Poco HTTPS客户端会话通过特定的IP地址从主机名下载网站。 例如,google.com具有以下地址:
我希望通过173.194.221.102
获取https://google.com我正在尝试以下方法:
std::make_unique<HTTPSClientSession>(SecureStreamSocket(SocketAddress(IPAddress("173.194.221.102"), 0), "https://google.com"));
此操作失败,异常“非法状态:无法为已连接的会话设置端口号”
查看Poco源代码,使用此构造函数创建的SecureStreamSocket已连接,HTTPSClientSession的构造函数尝试设置https端口(443),并且无法使用已连接的套接字执行此操作。
有更好的方法吗?
答案 0 :(得分:0)
应该是这样的:
Poco::Net::initializeSSL();
Poco::Net::HTTPSessionFactory::defaultFactory().registerProtocol("https", new Poco::Net::HTTPSSessionInstantiator);
const Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> certificateHandler(new Poco::Net::AcceptCertificateHandler(false));
const Poco::Net::Context::Ptr context(new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, ""));
Poco::Net::SSLManager::instance().initializeClient(nullptr, certificateHandler, context);
Poco::URI serverUri("your address");
Poco::Net::HTTPClientSession* session = Poco::Net::HTTPSessionFactory::defaultFactory().createClientSession(serverUri);
希望有帮助。