Poco HTTPSClient сессия по IP-адресу - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь использовать сеанс клиента 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

Я хочу получить https://google.com через 173.194.221.102

Я пыталсяследующий подход:

std::make_unique<HTTPSClientSession>(SecureStreamSocket(SocketAddress(IPAddress("173.194.221.102"), 0), "https://google.com"));

Сбой с исключением: «Недопустимое состояние: невозможно установить номер порта для уже подключенного сеанса»

Если посмотреть на исходный код Poco, SecureStreamSocket создан сэтот конструктор подключен, и конструктор HTTPSClientSession пытается установить порт https (443) и не может сделать это с уже подключенным сокетом.

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 29 августа 2018

Должно быть что-то вроде этого:

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

Надеюсь, это поможет.

...