尝试使用libcurlpp(libcurl的C ++包装器)发布表单并获取响应。这一切都有效,但我不知道如何在http事务完成后以编程方式访问curlpp :: Easy对象的响应。 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似乎没有任何方法可以访问响应。
谷歌有很多点击,人们问同样的问题,但没有回复。 curlpp邮件列表是一个死区,curlpp网站的API部分已经被打破了一年。
答案 0 :(得分:9)
这就是我最终做到的:
// 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()
中提供的信息流现已提供完整的回复正文。
答案 1 :(得分:0)
自提出问题以来,也许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;
}
答案 2 :(得分:0)
这是一个比其他示例稍微完整的示例。它借鉴了Stephane和kometen的答案,并且将它们组合在一起以确保可以获得HTTP响应代码。
void
runBadQuery() {
curlpp::Easy request;
std::ostringstream stream;
request.setOpt<curlpp::options::Url>("http://localhost:3010/bad");
request.setOpt( new curlpp::options::WriteStream( &stream ) );
request.perform();
long http_code = curlpp::infos::ResponseCode::get(request);
cout << "/bad got code: " << http_code << " And content: " << stream.str() << endl;
}
在我的示例服务器上运行时的输出是:
/bad got code: 400 And content: {
"error": "Illegal request"
}
(我的示例服务器返回JSON。)
答案 3 :(得分:0)
此代码也有效,它来自 This Answer :
#include <curlpp/cURLpp.hpp>
#include <curlpp/Options.hpp>
// RAII cleanup
curlpp::Cleanup myCleanup;
// Send request and get a result.
// Here I use a shortcut to get it in a string stream ...
std::ostringstream os;
os << curlpp::options::Url(std::string("http://example.com"));
string asAskedInQuestion = os.str();