【问题标题】:How get curlpp response header如何获取 curlpp 响应标头
【发布时间】:2018-03-22 10:40:07
【问题描述】:

我正在调用带有 JSON 有效负载的 REST WS 来订阅某些事件。服务器使用 HTTP-Code 201 和 HTTP-Header 中名为 Location 的字段以及订阅 ID 进行应答。

例如,在 curl (-v) 中我们得到:

[...]
< HTTP/1.1 201 Created
< Connection: Keep-Alive
< Content-Length: 0
< Location: /v2/subscriptions/5ab386ad4bf6feec37ffe44d
[...]

在使用 curlpp 的 C++ 中,我们希望查看响应标头来检索该 ID。现在我们只有正文响应(在本例中为空)。

std::ostringstream response;
subRequest.setOpt(new curlpp::options::WriteStream(&response));

// Send request and get a result.
subRequest.perform();

cout << response.str() << endl;

我们如何使用 curlpp 在 C++ 中获取 Location 标头的字段(示例中的内容为“/v2/subscriptions/5ab386ad4bf6feec37ffe44d”)?

【问题讨论】:

  • 注意:重定向 cout 和 cerr 似乎不起作用。

标签: c++ curl http-headers httpresponse curlpp


【解决方案1】:

您可以使用curlpp::infos::*::get 函数系列检索多个值。例如 HTTP 响应代码:

curlpp::infos::ResponseCode::get(subRequest) 

查看Infos.hpp 标头以获取完整列表。当您需要通过这些信息之一无法获得的值时,您还可以选择在回调中与正文分开接收标头。

subRequest.setOpt(new curlpp::options::HeaderFunction(
    [] (char* buffer, size_t size, size_t items) -> size_t {
        std::string s(buffer, size * items); // buffer is not null terminated
        std::cout << s;
        return size * items;
    }));

【讨论】:

    【解决方案2】:

    好的,我找到了。

    只需添加

    subRequest.setOpt(new curlpp::options::Header(1));
    

    做这个把戏并将标头存储在响应中。

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 2013-06-19
      • 2016-09-21
      • 2013-03-01
      • 2020-08-06
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多