Comment extraire la réponse HTTP lors de l'utilisation de libcurlpp?
Question
Essayer d'utiliser libcurlpp (un wrapper C ++ sur libcurl) pour publier un formulaire et obtenir la réponse. Tout fonctionne, mais je ne sais pas comment accéder par programme par programmation à la réponse de l'objet Curlpp :: Easy une fois la transaction HTTP terminée. Bascialement:
#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
Lorsque ce code s'exécute, car Verbose
est réglé sur true
Je peux voir que la réponse obtenir la sortie vers STDOUT. Mais comment puis-je avoir accès à la réponse complète au lieu de le faire vider à Stdout? Le curlpp :: Easy ne semble pas avoir de méthodes pour accéder à la réponse.
Beaucoup de succès dans Google avec des gens posant la même question, mais pas de réponses. La liste de diffusion Curlpp est une zone morte, et la section API du site Web Curlpp est cassée depuis un an.
La solution
C'est comme ça que je l'ai finalement fait:
// 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();
Une fois que foo.perform()
Renvoie, le corps de réponse complet est désormais disponible dans le flux fourni en WriteStream()
.
Autres conseils
Peut-être que Curlpp a été mis à jour depuis la question de la question. J'utilise ce que j'ai trouvé dans Exemple04.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;
}