Как извлечь HTTP-ответ при использовании libcurlpp? - PullRequest
3 голосов
/ 15 февраля 2011

Попытка использовать libcurlpp (оболочку C ++ для libcurl), чтобы опубликовать форму и получить ответ. Все это работает, но я понятия не имею, как программно получить доступ к ответу от объекта curlpp :: Easy после завершения транзакции http. Bascially:

#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

Когда этот код выполняется, потому что Verbose установлен на true, я вижу, как ответ получает вывод в STDOUT. Но как мне получить доступ к полному ответу вместо того, чтобы получить дамп к STDOUT? Похоже, что curlpp :: Easy не имеет методов для получения доступа к ответу.

Множество обращений в Google, когда люди задают один и тот же вопрос, но не отвечают. Список рассылки curlpp является мертвой зоной, и раздел API веб-сайта curlpp был поврежден в течение года.

Ответы [ 2 ]

9 голосов
/ 18 февраля 2011

Вот как я наконец это сделал:

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

После возврата foo.perform() полное тело ответа теперь доступно в потоке, предоставленном в WriteStream().

0 голосов
/ 10 ноября 2017

Возможно, curlpp был обновлен с тех пор, как был задан вопрос. Я использую то, что я нашел в 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;
}
...