C++ libcurl PATCH 请求无法通过 .str.c_str() 进行字符串流转换

C++ libcurl PATCH request not working with stringstream conversion via .str.c_str()

我正在通过 C++ libcurl 库发送补丁请求,当我将 "payload" 硬编码到我的程序中时,它可以 100% 正常工作,但是,我希望它被传入,所以我使用 stringstream 来创造它。当我用 stringstream 发送它时,服务器响应 400 Bad request 而当我手动输入它时,程序运行没有错误

这是我在

中对其进行硬编码时的外观(和工作方式)

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"region\":\"us-central\"}");

这就是我用 stringstream 格式化它的方式(由于某些原因它不起作用

stringstream payload;
payload << "{\"region\":\"";
payload << c_codes[i];
payload << "\"}";

CURLOPT_POSTFIELDS 中,我将其称为 payload.str()。c_str()

payload.str()returns暂时的。然后 c_str() 获得指向由该临时文件管理的字符序列的指针。然后临时对象被销毁,字符也随之销毁;指针变得悬空。然后 cURL 发送该指针指向的内存中恰好存在的任何垃圾,该内存曾经保存字符数据但不再保存。

你需要这样的东西

std::string data = payload.str();
curl_easy_setopt(..., data.c_str());

然后确保在处理请求时 data 始终处于活动状态。

问题如 所述,但我只想 post 替代解决方案:

您可以使用 CURLOPT_COPYPOSTFIELDS 而不是 CURLOPT_POSTFIELDS,那么 payload.str().c_str() 会很安全,因为 curl 会复制字符串给你,字符串的生命周期不再是你的责任,它是 curl 的。