Come estrarre la risposta http quando si utilizza libcurlpp?
Domanda
Cercando di utilizzare Libcurlpp (un wrapper C ++ per libcurl) per pubblicare un modulo e ottenere la risposta.Funziona tutto, ma non ho idea di come ottenere l'accesso a livello programmatico alla risposta dallo oggetto Curlpp :: Easy dopo che la transazione HTTP ha finito.BASCIALY:
#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
.
Quando viene eseguito questo codice, poiché Verbose
è impostato su true
, posso vedere la risposta ottenere l'output su StDout.Ma come posso accedere alla risposta completa invece di averlo scarico a Stdout?Il CurlPP :: facile non sembra avere alcun metodo per accedere alla risposta.
Un sacco di colpi in Google con persone che fanno la stessa domanda, ma nessuna risposta.La mailing list CurlPP è una zona morta e la sezione API del sito Web CurlPP è stata rotta per un anno.
Soluzione
Ecco come ho finalmente fatto:
// 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 volta che foo.perform()
restituisce, il corpo di risposta completo è ora disponibile nel flusso fornito in WriteStream()
.
Altri suggerimenti
Forse CrulPP è stato aggiornato dalla domanda.Sto usando questo che ho trovato in esempio04.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;
}
.