Domanda

Ho giocato con la libreria Poco rete per un certo tempo, è piuttosto bella. Molto comodo e facile da capire.

Sono stato in grado di impostare un indirizzo proxy, e si sta dicendo autorizzazione 407 Proxy richiesto, in modo corretto. Ho pensato che

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

Ho provato a valori come "base", "testo in chiaro" in programma, e "user: password" in authInfo. Non sembra funzionare. Google non sta aiutando.

Qualcuno ha fatto questo utilizzando Poco netto prima? O è l'utilizzo ovvio e io non sono in grado di farlo funzionare a causa della mia ignoranza verso l'autenticazione proxy in generale? Si prega di consulenza.

Modifica Dopo un po 'di più suonare in giro, penso che la funzione SetCredentials viene utilizzato quando il server remoto si aspetta informazioni di autenticazione per effettuare il login. Non sono stato in grado di trovare un modo per fare l'autenticazione proxy utilizzando le librerie Poco netti. Sono stato in grado di impostare il server proxy e la porta però. Questo è quello che avrebbe se non vi fosse solo un server proxy senza autenticazione:

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

Hai bisogno di aiuto.

Modifica Sulla base della soluzione proposta dalla @StackedCrooked, ho provato a installare i dati di autenticazione proxy per l'intestazione della richiesta prima di effettuare la richiesta, e in un altro approccio trovato su internet, ho impostato Proxy auth solo dopo aver effettuato una richiesta iniziale e un errore 407 viene, e poi fare di nuovo la richiesta. Entrambi i metodi tenuti a dare lo stesso errore 407. Il mio codice attuale è simile al seguente:

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);
È stato utile?

Soluzione

Probabilmente, è necessario aggiungere il campo Proxy Autorizzazione agli header HTTP. Classe HTTPRequest di Poco non ha un metodo dedicato per questo. Tuttavia, dal momento che eredita la classe NameValueCollection pubblicamente è possibile impostare in questo modo:

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

Dove QWxhZGRpbjpvcGVuIHNlc2FtZQ== è la versione di Base64 codificati "Aladdin: apriti sesamo".

Un sacco di questi problemi diventano più facile una volta che si impara un po 'il protocollo HTTP. Sono ora in gran parte predicando a me:)

Altri suggerimenti

Non ho usato io stesso, ma ho guardato il HTTPBasicCredentials classe? Si avvolge la chiamata a req.setCredentials attraverso il suo metodo di autenticazione. Si potrebbe finire con qualcosa sulla falsariga di:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top