【问题标题】:Poco HTTPSClient session by IP addressPoco HTTPSClient 会话(按 IP 地址)
【发布时间】:2018-05-29 12:04:47
【问题描述】:

我正在尝试使用 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),对已经连接的socket没有做。

有更好的方法吗?

【问题讨论】:

    标签: poco poco-libraries


    【解决方案1】:

    应该是这样的:

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2021-03-30
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多