como faço para extrair a resposta de http quando usando libcurlpp?
Pergunta
Tentando usar libcurlpp (um wrapper C++ para o balsa) para postar um formulário e obter a resposta.Tudo funciona, mas eu não tenho nenhuma idéia de como obter programaticamente de acesso para a resposta do curlpp::Fácil de objeto após o http transação foi concluída.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
Quando esse código é executado, uma vez Verbose
é definido como true
Eu posso ver a resposta de obter uma saída para o STDOUT.Mas como faço para obter acesso a toda a resposta, em vez de tê-lo de despejo para STDOUT?O curlpp::Fácil, não parece ter quaisquer métodos para obter acesso para a resposta.
Muitos hits no Google com as pessoas a mesma pergunta, mas sem respostas.O curlpp lista de discussão é uma zona morta, e a seção API do curlpp site foi quebrado por um ano.
Solução
Isto é como eu finalmente fiz isso:
// 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();
Uma vez foo.perform()
de retorno, a resposta completa do corpo agora está disponível na sequência fornecida no WriteStream()
.
Outras dicas
Talvez curlpp ter sido actualizado desde a pergunta foi feita.Eu estou usando esse que eu encontrei em 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;
}