Аутентификация через прокси-сервер в библиотеке POCO Net C ++

StackOverflow https://stackoverflow.com/questions/1327485

  •  19-09-2019
  •  | 
  •  

Вопрос

Я уже некоторое время играю с библиотекой Poco Net, она довольно приятная.Очень удобно и легко для понимания.

Мне удалось правильно установить адрес прокси-сервера, и там указано, что требуется авторизация прокси-сервера 407.Я так и думал , что

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);

Я попробовал использовать такие значения, как "basic", "plaintext" в scheme и "user: password" в AuthInfo.Похоже, это не работает.Google не помогает.

Кто-нибудь делал это раньше с помощью Poco Net?Или использование очевидно, и я не могу заставить его работать из-за моего невежества в отношении аутентификации через прокси в целом?Пожалуйста, дайте совет.

Редактировать: Поиграв еще немного, я думаю, что функция setCredentials используется, когда удаленный сервер ожидает аутентификационную информацию для входа в систему.Мне не удалось найти способ выполнить аутентификацию через прокси-сервер с использованием библиотек Poco Net.Однако мне удалось установить прокси-сервер и порт.Это то, что у меня было бы, если бы был просто прокси-сервер без аутентификации:

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("host", port);
session.sendRequest(req);

Нужна помощь.

Редактировать: Основываясь на решении, предложенном @StackedCrooked, я попытался установить данные аутентификации прокси-сервера в заголовке запроса перед выполнением запроса, и в другом подходе, найденном в Интернете, я устанавливаю данные аутентификации прокси-сервера только после выполнения первоначального запроса и появления ошибки 407, а затем выполняю запрос снова.Оба метода продолжали выдавать одну и ту же ошибку 407.Мой текущий код выглядит следующим образом:

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("10.7.128.1", 8080);
req.set("Proxy-Authentication", "Basic bGVlbGE6bGVlbGExMjM=");
session.sendRequest(req);
Это было полезно?

Решение

Вероятно, вам нужно добавить поле авторизации прокси-сервера в заголовки HTTP.Класс HttpRequest Poco не имеет специального метода для этого.Однако, поскольку он публично наследует класс NameValueCollection, вы можете установить его следующим образом:

req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");

Где QWxhZGRpbjpvcGVuIHNlc2FtZQ== является версией "Аладдина: сезам, откройся" в кодировке base64.

Многие из этих проблем становятся проще, как только вы немного узнаете о протоколе HTTP.Сейчас я в основном проповедую самому себе :)

Другие советы

Я сам этим не пользовался, но вы смотрели на HTTPBasicCredentials класс?Он завершает вызов req.setCredentials с помощью своего метода аутентификации.В итоге у вас получилось бы что-то вроде:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top