Pregunta

Llevo un tiempo jugando con la biblioteca de Poco Net, es bastante agradable.Muy conveniente y fácil de entender.

Pude configurar una dirección de proxy y dice correctamente que se requiere autorización de proxy 407.Lo imaginé

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

Probé valores como "básico", "texto sin formato" en el esquema y "usuario: contraseña" en authInfo.No parece funcionar.Google no está ayudando.

¿Alguien ha hecho esto usando Poco Net antes?¿O el uso es obvio y no puedo hacerlo funcionar debido a mi ignorancia sobre la autenticación de proxy en general?Por favor aconséjame.

EDITAR: Después de jugar un poco más, creo que la función setCredentials se usa cuando el servidor remoto espera información de autenticación para iniciar sesión.No he podido encontrar una manera de realizar la autenticación de proxy utilizando las bibliotecas de Poco Net.Sin embargo, pude configurar el servidor proxy y el puerto.Esto es lo que tendría si solo hubiera un servidor proxy sin autenticación:

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

Necesitas ayuda.

EDITAR: Según la solución sugerida por @StackedCrooked, intenté configurar los detalles de autenticación del proxy en el encabezado de la solicitud antes de realizar la solicitud, y en otro enfoque encontrado en Internet, configuro los detalles de autenticación del proxy solo después de realizar una solicitud inicial y aparece un error 407. y luego hacer la solicitud nuevamente.Ambos métodos seguían dando el mismo error 407.Mi código actual se ve así:

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);
¿Fue útil?

Solución

Es probable que tenga que añadir el campo de autorización de mandatario a las cabeceras HTTP. HTTPRequest clase de Poco no tiene un método específico para esto. Sin embargo, ya que hereda la clase NameValueCollection públicamente se puede establecer la siguiente manera:

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

Donde QWxhZGRpbjpvcGVuIHNlc2FtZQ== es los base64 versión de codificados "Aladdin: sésamo abierto".

Muchos de estos problemas se hacen más fácil una vez que aprender un poco sobre el protocolo HTTP. Estoy ahora en su mayoría predicando a mí mismo:)

Otros consejos

No he utilizado yo mismo, pero ¿ha mirado el HTTPBasicCredentials clase? Se envuelve la llamada a req.setCredentials a través de su método de autenticar. Se podría terminar con algo a lo largo de las líneas de:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top