如果我在 shell 中写下这个,一切都会像魅力一样工作:
// shell (unix)
curl -X PUT -d "{ \"string\" : \"my string 1212 \"}" "https://my.firebaseio.com/myVal.json"
Run Code Online (Sandbox Code Playgroud)
如您所知,这会在我的firebase. 如上所述,这按预期工作。由于我对 C++ 不太了解,所以我不知道如何curl在内部 PUT -requests。我正在考虑通过在 shell 中执行此操作system。
我最终得到了这个:
// c++ code
system('curl -X PUT -d "{ \"string\" : \"my string 1212 \"}" "https://my.firebaseio.com/myVal.json" ');
Run Code Online (Sandbox Code Playgroud)
然而,这会产生以下输出:
curl: (6) Could not resolve host:
curl: (6) Could not resolve host: CD
curl: (7) Could not resolve host: CD
curl: (3) [globbing] unmatched close brace/bracket in column 1
Run Code Online (Sandbox Code Playgroud)
感谢您提供任何有用的建议
// 更新1
在听说单引号'是为字符保留的并采用 erip 提供的解决方案后,它仍然是相同的输出:
curl: (6) Could not resolve host:
curl: (6) Could not resolve host: cd
curl: (7) Could not resolve host: cd
curl: (3) [globbing] unmatched close brace/bracket in column 1
{
"error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names."
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,单引号用于类型char。双引号保留用于std::strings 或char *s。
因此,您的解决方案应该是简单地将单引号替换为双引号,并转义不是最终引号的引号:
system("curl -X PUT -d \"{ \"string\" : \"my string 1212 \"}\" https://my.firebaseio.com/myVal.json ");
Run Code Online (Sandbox Code Playgroud)
但是,就像 @DaoWen 提到的那样,如果可能的话,请始终使用库。
编辑
我建议尝试这个:
std::string command = "curl -X PUT -d \"{ \"string\" : \"my string 1212 \"}\" https://my.firebaseio.com/myVal.json ";
system(command.c_str());
Run Code Online (Sandbox Code Playgroud)
但老实说,如果您不想使用 ,那么使用fork和调用比系统调用更好。execlibcurl
编辑2
std::string command = "curl -H \"Content-Type: application/json\" -X PUT -d '{ \"string\" : \"my string 1212 \"}' https://my.firebaseio.com/myVal.json";
system(command.c_str());
Run Code Online (Sandbox Code Playgroud)
奇怪的转义引号将 key: "string" 视为主机,因为它{被引号包围,充当数据。我通过用单引号将要传递的数据引起来解决了这个问题。
您可以在此处看到我PUT { "Hello" : "World!" }对您的应用程序的了解。
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
8055 次 |
| 最近记录: |