我正在通过 C++ libcurl 库发送补丁请求,当我将“有效负载”硬编码到我的程序中时,它可以 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()
最佳答案
问题是@Igor Tandetnik描述,但我只想发布一个替代解决方案:
你可以使用CURLOPT_COPYPOSTFIELDS而不是 CURLOPT_POSTFIELDS,那么 payload.str().c_str() 会是安全的,因为 curl 会为您制作一个字符串的拷贝,并且字符串的生命周期不再是您的责任,它是 curl 的。
关于C++ libcurl PATCH 请求无法通过 .str.c_str() 进行字符串流转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987765/