Question

Je joue avec la bibliothèque Net Poco pendant un certain temps, il est tout à fait agréable. Très pratique et facile à comprendre.

J'ai pu définir une adresse proxy, et il dit 407 autorisation de procuration requise, correctement. Je me suis dit que

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

J'ai essayé des valeurs comme « base », « texte brut » dans le schéma, et « utilisateur: mot de passe » dans authInfo. Il ne semble pas fonctionner. Google ne contribue pas.

Quelqu'un at-il fait cela en utilisant Poco net avant? Ou est l'utilisation évidente et je ne suis pas en mesure de le faire fonctionner à cause de mon ignorance vers l'authentification proxy en général? S'il vous plaît conseiller.

EDIT: Après un peu plus à jouer autour, je pense que la fonction setCredentials est utilisé lorsque le serveur distant attend des informations d'authentification pour vous connecter. Je ne l'ai pas été en mesure de trouver un moyen de faire l'authentification proxy à l'aide Poco bibliothèques Net. J'ai pu configurer le serveur proxy et le port bien. Voilà ce que j'aurais s'il y avait juste un serveur proxy sans authentification:

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

Besoin d'aide.

EDIT: Sur la base de la solution proposée par @StackedCrooked, j'ai essayé les détails de configuration d'authentification proxy à l'en-tête de demande avant de faire la demande, et dans une autre approche trouvée sur Internet, je donne les détails auth proxy seulement après avoir fait une demande initiale et une erreur 407 vient, puis faire à nouveau la demande. Les deux méthodes continué à donner la même erreur 407. Mon code actuel ressemble à ceci:

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);
Était-ce utile?

La solution

Vous avez probablement besoin d'ajouter le champ d'autorisation proxy pour les en-têtes HTTP. La classe HTTPRequest de Poco ne dispose pas d'une méthode spécifique pour cela. Cependant, puisqu'il hérite de la classe NameValueCollection vous pouvez définir comme publiquement:

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

QWxhZGRpbjpvcGVuIHNlc2FtZQ== est la version codée base64 de "Aladdin: sésame".

Beaucoup de ces problèmes deviennent plus facile une fois que vous en apprendre un peu sur le protocole HTTP. Je suis maintenant prêcher surtout à moi-même:)

Autres conseils

Je ne l'ai pas utilisé moi-même, mais avez-vous regardé le HTTPBasicCredentials classe? Elle enveloppe l'appel à req.setCredentials via sa méthode authenticate. Vous finirez avec quelque chose le long des lignes de:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top