感谢@Mat的评论,我得到了解决方案:
我替换了
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cQuery);
与
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(cQuery));
curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, cQuery);
我目前正在努力解决一个或多或少会让我疯狂的奇怪问题。
我正在使用以下代码创建我想用于CURLOPT_POSTFIELDS以执行CURL请求的值。
string query;
map<string, string> parameters = resource->GetParameters();
typedef std::map<std::string, std::string>::iterator it_type;
int i = 0;
for (it_type iterator = parameters.begin(); iterator != parameters.end(); iterator++, i++) {
if (i > 0)
query.append("&");
query = query.append(iterator->first).append("=").append(iterator->second);
}
curl_easy_setopt(curl, CURLOPT_POST, true);
const char *cQuery = query.c_str();
cout << cQuery << endl;
cout << "grant_type=client_credentials&scope=default" << endl;
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cQuery);
cout
的输出均为:
grant_type=client_credentials&scope=default
grant_type=client_credentials&scope=default
如果我使用cQuery
变量作为值,服务器正在响应我没有指定授权类型。
如果我要替换
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cQuery);
带
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "grant_type=client_credentials&scope=default");
它工作正常。
我的背景是更多Java和C#相关,所以我假设我错过了一些c ++基础知识。我也是stackoverflow的新手,所以如果我正在做某事。错了,请告诉我。
我期待着你的回答。谢谢你的帮助。
答案 0 :(得分:0)
感谢@Mat的评论,我得到了解决方案:
我替换了
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cQuery);
与
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(cQuery));
curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, cQuery);