Мне нужно отправить ID (данные JSON) с помощью библиотеки cUrl, и она не работает.
Это команда:
curl --request POST \
--url https://pos-api.ifood.com.br/v1.0/events/acknowledgment \
--header 'Authorization: bearer {acess_token}' \
--header 'Cache-Control: no-cache' \
--header 'Content-Type: application/json' \
--data '[{"id":"Event_id1"},{"id":"Event_id2"},{"id":"Event_id3"},{"id":"Event_id4"}]'
У меня есть эта функция. Входные параметры:
действительный токен и str (данные JSON) как [{"id":"b7e17af5-fd21-4690-b908-71d489d53355"}]
.
При использовании этих входных данных JSON и действительного токена в командной строке не возникает ошибки, но когда я пытался использовать свою функцию C ++, возникает ошибка 400 (показана в конце).
int iFood_Acknowledgment(QString str, QString token) {
CURL *curl;
CURLcode res;
QString autorizacao;
autorizacao=QString("Authorization: bearer %1").arg(token);
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
/* get a curl handle */
curl = curl_easy_init();
if(curl) {
qDebug() << "autorizacao " << autorizacao.toLocal8Bit().constData() << autorizacao.toUtf8();
qDebug() << "iFood_Acknowledgment executando..." << qPrintable(str);
/* First set the URL that is about to receive our POST. This URL can
just as well be a https:// URL if that is what should receive the
data. */
struct curl_slist *headers = NULL;
curl_easy_setopt(curl, CURLOPT_URL, "https://pos-api.ifood.com.br/v1.0/events/acknowledgment");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, qPrintable(str));
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, str.size());
curl_easy_setopt(curl, CURLOPT_POST, 1L);
// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
headers = curl_slist_append(headers, qPrintable(autorizacao));
headers = curl_slist_append(headers, "Cache-Control: no-cache");
headers = curl_slist_append(headers, "Content-Type: application/json;charset=UTF-8");
// headers = curl_slist_append(headers, "charsets: utf-8");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK){
qDebug() << "iFood_Acknowledgment falhou...";
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
/* always cleanup */
curl_easy_cleanup(curl);
curl_global_cleanup();
curl_slist_free_all(headers);
return 1;
}
curl_global_cleanup();
return 0;
}
Эта функция возвращает код ошибки 400:
{"timestamp":"2018-04-28T01:10:32.681+0000","status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"Bad Request","path":"/events/acknowledgment"}
Что я делаю не так?