¿Cómo extraigo la respuesta http cuando uso libcurlpp?
Pregunta
Intentando usar libcurlpp (un contenedor de C++ para libcurl) para publicar un formulario y obtener la respuesta.Todo funciona, pero no tengo idea de cómo obtener acceso mediante programación a la respuesta del objeto curlpp::Easy una vez finalizada la transacción http.Básicamente:
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>
...
curlpp::Easy foo;
foo.setOpt( new curlpp::options::Url( "http://example.com/" ) );
foo.setOpt( new curlpp::options::Verbose( true ) );
...many other options set...
foo.perform(); // this executes the HTTP transaction
Cuando se ejecuta este código, porque Verbose
se establece en true
Puedo ver que la respuesta se envía a STDOUT.Pero, ¿cómo puedo acceder a la respuesta completa en lugar de volcarla a STDOUT?curlpp::Easy no parece tener ningún método para obtener acceso a la respuesta.
Muchas visitas a Google con personas que hacen la misma pregunta, pero ninguna respuesta.La lista de correo de curlpp es una zona muerta y la sección API del sitio web de curlpp ha estado inactiva durante un año.
Solución
Así lo hice finalmente:
// HTTP response body (not headers) will be sent directly to this stringstream
std::stringstream response;
curlpp::Easy foo;
foo.setOpt( new curlpp::options::Url( "http://www.example.com/" ) );
foo.setOpt( new curlpp::options::UserPwd( "blah:passwd" ) );
foo.setOpt( new curlpp::options::WriteStream( &response ) );
// send our request to the web server
foo.perform();
Una vez foo.perform()
devuelve, el cuerpo completo de la respuesta ahora está disponible en la secuencia proporcionada en WriteStream()
.
Otros consejos
Quizás curlpp se haya actualizado desde que se hizo la pregunta.Estoy usando esto que encontré en example04.cpp.
#include <curlpp/Infos.hpp>
long http_code = 0;
request.perform();
http_code = curlpp::infos::ResponseCode::get(request);
if (http_code == 200) {
std::cout << "Request succeeded, response: " << http_code << std::endl;
} else {
std::cout << "Request failed, response: " << http_code << std::endl;
}