如何解决在 JSON 格式的 post 请求 C++ 中加入一个变量
所以我有这个 put 请求,它提交给在本地主机上运行的服务。 按照下面的方法做就可以了,注意我已经用 ACC_NAME 替换了实际的 acc 名称,用 ACC_PASSWORD 替换了密码。
curl_easy_setopt(curl_account_login,CURLOPT_POSTFIELDS,"{\r\n \"username\": \ACC_NAME\,\r\n \"password\": \"ACC_PASSWORD\,\r\n \"persistLogin\": false\r\n}\r\n");
但是,当我想传入包含 acc_name 和 acc_password 的变量时,它不起作用,我从服务器收到错误响应。 下面的请求使用了 JSON 字符串中加入的变量,它给了我错误响应。
curl_easy_setopt(curl_account_login,"{\r\n \"username\": \""+acc_name+"\,\r\n \"password\": \""+acc_password+"\,\r\n \"persistLogin\": false\r\n}\r\n");
当我将字符串变量加入请求时,我无法弄清楚我做错了什么。 如果我将帐户凭据直接写入请求而不是变量,它可以正常工作。
问候
解决方法
C 风格的字符串文字(如 "something"
)属于 const char []
类型(这是一个以空字符结尾的字符数组),它会衰减为 const char*
(一个指针)。因此,+
(如在 "something" + "another"
中)只是将两个地址相加,导致无效的指针值。您不能通过这种方式简单地使用 +
来连接 C 样式的字符串。
假设您使用的是 C++(不是 C),如您的问题被标记为 c++,我建议使用 C++ 字符串对象,这将允许轻松连接。
此外,curl 文档中有关于 CURLOPT_POSTFIELDS
的注释,提到指向的数据不会被复制,因此需要您确保指针在相关传输完成之前保持有效。因此,我更愿意使用 CURLOPT_COPYPOSTFIELDS
代替。
总而言之,做这样的事情:
#include <string>
// ...
std::string postfields
{
std::string{ "{" }
+ R"("username":")" + ACC_NAME
+ R"(","password":")" + ACC_PASSWORD
+ R"(","persistLogin":false})"
};
curl_easy_setopt(curl_account_login,CURLOPT_COPYPOSTFIELDS,postfields.data());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。