Проверка подлинности прокси в библиотеке POCO Net C ++ - PullRequest
6 голосов
/ 25 августа 2009

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

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

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

Я пробовал значения как «basic», «text» в схеме и «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);

Ответы [ 2 ]

2 голосов
/ 25 августа 2009

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

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

Где QWxhZGRpbjpvcGVuIHNlc2FtZQ== - это кодированная в Base64 версия "Aladdin: open sesame".

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

1 голос
/ 25 августа 2009

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

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...