Poco HTTPSClient会话按IP地址

时间:2018-05-29 12:04:48

标签: poco poco-libraries

我正在尝试使用Poco HTTPS客户端会话通过特定的IP地址从主机名下载网站。 例如,google.com具有以下地址:

  • 173.194.221.113
  • 173.194.221.138
  • 173.194.221.102
  • 173.194.221.139
  • 173.194.221.100
  • 173.194.221.101

我希望通过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),并且无法使用已连接的套接字执行此操作。

有更好的方法吗?

1 个答案:

答案 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);

希望有帮助。