Frage

Ich versuche, libcurlpp (einen C++-Wrapper für libcurl) zu verwenden, um ein Formular zu veröffentlichen und die Antwort zu erhalten.Es funktioniert alles, aber ich habe keine Ahnung, wie ich programmgesteuert Zugriff auf die Antwort vom Objekt „curlpp::Easy“ erhalten kann, nachdem die http-Transaktion abgeschlossen ist.Grundsätzlich:

#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

Wenn dieser Code ausgeführt wird, weil Verbose ist eingestellt auf true Ich kann sehen, dass die Antwort an STDOUT ausgegeben wird.Aber wie erhalte ich Zugriff auf die vollständige Antwort, anstatt sie auf STDOUT auszugeben?Der curlpp::Easy scheint keine Methoden zu haben, um auf die Antwort zuzugreifen.

Viele Treffer bei Google mit Leuten, die die gleiche Frage stellen, aber keine Antworten.Die Curlpp-Mailingliste ist eine tote Zone und der API-Bereich der Curlpp-Website ist seit einem Jahr kaputt.

War es hilfreich?

Lösung

So habe ich es letztendlich geschafft:

// 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();

Einmal foo.perform() zurückgibt, ist der vollständige Antworttext jetzt im bereitgestellten Stream verfügbar WriteStream().

Andere Tipps

Möglicherweise wurde Curlpp aktualisiert, seit die Frage gestellt wurde.Ich verwende dies, was ich in example04.cpp gefunden habe.

#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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top