【问题标题】:Returning JSON object to HTTP POST REST call from C++从 C++ 将 JSON 对象返回到 HTTP POST REST 调用
【发布时间】:2012-06-27 20:30:28
【问题描述】:

我有一个通过 REST 向网络公开的 C++ API。我已将应用程序编写为 FastCGI 进程。我能够使用正文中的数据发布到应用程序并取回文本。但现在,我想将数据作为 JSON 对象返回,而不是文本。

我已经将输出打包到一个 JSON 文件中。我只需要知道如何将其传递回请求者。

编辑:

我目前有这样的东西:http://pastebin.com/vhC30kTJ

在此,我在 printcontent(string) 函数中打印文本。我使用 cout 打印的文本由 FastCGI 传回给 HTTP 请求者。我想改为传递 JSON,但我不知道该怎么做。我能够将数据写入 JSON 文件。我是传回 JSON 文件还是传回 json 样式字符串?我很困惑。

【问题讨论】:

  • 您可以添加一些代码来显示您已经尝试过的内容吗?

标签: c++ json web-services http fastcgi


【解决方案1】:

理想情况下,形成 JSON 的函数应该接受 std::ostream & 的参数。然后,如果你想写入一个文件,你传入一个std::ofstream 并且如果你想将它写入标准输出(在这种情况下你想要这样做,以便它被发送到浏览器)你可以只需传入std::cout。确保先写出所需的 HTTP 标头和空行,否则服务器/浏览器将尝试将 JSON 解释为 HTTP 标头。

void makejson(ostream & output, string content)
{
    /* output << "{\"some\":\"json\"}" */
}

// Write to file
ofstream file("data.json");
makejson(file, "somedata");
file.close();

// Write to browser
cout << "Content-Type: application/json\r\n\r\n";
makejson(cout, "somedata");

【讨论】:

  • 所以基本上我必须创建一个输出流并写入它?目前,我没有使用任何 HTTP 标头,也没有明确定义 ostream。一切都由 FastCGI 自己处理。
  • 对不起,我想我之前误解了你的回答。那么,cout 是否作为 ostream 传递并写入此 ostream 对象会将数据发送到浏览器?完美!
  • 是的——CGI 的工作方式,标准输出被发送到网络服务器,它有机会预处理其中的一些(例如标题),然后将结果发送到浏览器。
  • 对于未来的任何人来说,FastCGI 不像 CGI 那样工作,因为标准输出不会返回到浏览器。一些教程确实演示了用 FastCGI 请求流替换 cin/cout/cerr,这将模拟该功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多