我尝试用cpprestsdk
向服务器发送HTTP(REST)请求。
void postRestRequest(const std::string& uri, const std::string& requestJson) {
const std::string host = "localhost:8080";
const http_client_config authorization = setupAuthorization();
http_client client(U(host), authorization);
http_request request(methods::POST);
uri_builder builder(U(uri));
request.set_request_uri(builder.to_string());
if (not requestJson.empty()) {
const auto mimeType = utf8string("application/json; charset=utf-8");
request.set_body(requestJson, mimeType); // SEGFAULT here
}
}
调用堆栈是:
-|libpthread.so.0
-|[1]
-|
-|libcpprest.so.2.9
-|[2] : pplx::task_completion_event<unsigned long>::set(unsigned long) const+0xb4
-|
-|mylib.so
-|[3] : postRestRequest(std::string const&, std::string const&)+0x49a
我不确定我是否按预期使用了图书馆。
我不知道库中的任务是如何工作的。
它可能也是cpprestsdk库中的一个bug。
但是创建HTTP请求是REST框架的一个重要部分。所以我无法想象图书馆里有一个未知的虫子。
Linux:RHEL7
cpprestsdk:2.9版本
合同一般条件:6.3.1
最佳答案
这就是我如何使用web::json::value
。注意,我使用value::number
这样的成员函数为我的请求对象创建有效的json值。
web::json::value requestParameters;
requestParameters[U("foo")] = web::json::value::number(1);
requestParameters[U("bar")] = web::json::value::string(U("whatever"));
utility::stringstream_t paramStream;
requestParameters.serialize(paramStream);
web::http::http_request request(web::http::methods::POST);
request.set_request_uri(U("MethodName"));
request.set_body(paramStream.str());
关于c++ - Linux上http_request::set_body中的cpprestsdk段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48805739/