0

我尝试将 HTTP (REST) 请求发送到带有cpprestsdk.

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

我不确定我是否按预期使用该库。我不确切知道pplx图书馆中的任务是如何工作的。

它也可能是 cpprestsdk 库中的错误。但是创建 HTTP 请求是 REST 框架的重要组成部分。所以我无法想象库中有一个未知的错误。

Linux:RHEL7
cpprestsdk:2.9
gcc:6.3.1

4

2 回答 2

0

这就是我使用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());
于 2018-02-19T10:03:15.377 回答
0

库的构建方式存在问题(作为 RPM)。现在它起作用了。

于 2018-03-08T08:31:20.023 回答