как мне извлечь ответ http при использовании libcurlpp?

StackOverflow https://stackoverflow.com/questions/5009113

  •  14-11-2019
  •  | 
  •  

Вопрос

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

#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?Curllpp::Easy, похоже, не имеет никаких методов для получения доступа к ответу.

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

Это было полезно?

Решение

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

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

Другие советы

Может быть, 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;
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top