Frage

Ich habe seit einiger Zeit mit der Poco Net Bibliothek gespielt, ist es ganz nett. Sehr bequem und leicht zu verstehen.

Ich konnte eine Proxy-Adresse setzen, und es sagt 407 Proxy Autorisierung erforderlich, richtig. Ich dachte, dass

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

Ich habe versucht, Werte wie "basic", "Klartext" in Schema und "user: password" in AuthInfo. Es scheint nicht zu arbeiten. Google ist nicht zu helfen.

Hat jemand, bevor Sie diese mit Poco Net getan? Oder ist die Nutzung offensichtlich, und ich bin nicht in der Lage, es zu Arbeit bekommen wegen meiner Ignoranz gegenüber Proxy-Authentifizierung im Allgemeinen? Bitte Beratung.

EDIT: Nach einigem um mehr spielen, ich denke, die setCredentials Funktion verwendet, wenn der Remote-Server Authentifizierungsinformationen Login erwarten. Ich habe nicht in der Lage gewesen, einen Weg zu finden, die Proxy-Authentifizierung mit Poco Net Bibliotheken zu tun. Ich konnte zwar den Proxy-Server und Port einzustellen. Dies ist, was ich haben würde, wenn es nur ein Proxy-Server ohne Authentifizierung ist:

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

Hilfe nötig.

EDIT: Auf der Basis der Lösung von @StackedCrooked vorgeschlagen, habe ich versucht, die Proxy-Authentifizierung Details zu dem Request-Header Einstellung vor dem diesem Antrag gestellt, und in einem anderen Ansatz im Internet zu finden, hat ich Proxy Auth Details erst nach einer anfänglichen Anfrage und ein 407-Fehler machen kommt, und dann erneut die Anforderung macht. Beiden Methoden gehalten auf die gleichen 407 Fehler geben. Meine aktuellen Code sieht wie folgt aus:

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);
War es hilfreich?

Lösung

Sie müssen wahrscheinlich das Proxy-Berechtigungsfeld an den HTTP-Header hinzuzufügen. Poco Httprequest Klasse verfügt nicht über eine eigene Methode dafür. Da es jedoch die Namevaluecollection-Klasse erbt öffentlich können Sie es wie folgt festgelegt:

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

Wo QWxhZGRpbjpvcGVuIHNlc2FtZQ== ist die Base64-codierte Version von "Aladdin: Sesam öffne dich".

Viele dieser Probleme werden einfacher, wenn Sie ein wenig über das HTTP-Protokoll zu lernen. Ich bin jetzt meistens zu mir predigen:)

Andere Tipps

Ich habe das selbst nicht verwendet, aber haben Sie sich die HTTPBasicCredentials Klasse? Es wickelt den Anruf zu req.setCredentials über seine authenticate Methode auf. Sie würden mit etwas entlang der Linien von Ende:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top