Из-за частого изменения переменной my_description
я получаю эту ошибку:
{"code": 50109, "message": "Тело запроса содержит недопустимый JSON."}
Можно изменить приведенный ниже код, чтобы проверить, получает ли libcurl
ошибку при отправке сообщения в веб-перехватчик? Я хочу напечатать, когда сообщение отправлено и когда существует ошибка при отправке сообщения.
Я пробовал это:
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
но это не полезно. Кто-нибудь может мне помочь, пожалуйста? Спасибо!
#include <stdio.h>
#include <curl/curl.h>
#define nullptr ((void*)0)
int main() {
char message[65500];
int max_len = sizeof message;
CURL *curl;
CURLcode res;
char webhook[] = "DISCORD_WEBHOOK";
char my_description[] = "Description";
snprintf(message, max_len,"{\"username\": \"Test\",\"embeds\":[{\"description\": \"%s\"}]}", my_description);
curl = curl_easy_init();
if (curl) {
struct curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, webhook);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, message);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return 0;
}
Я пробовал это:
if (res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
Возможно, вы захотите попробовать это:
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
} else {
long response_code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
if (response_code != 200) {
// Error
}
}
Недопустимый JSON может быть вызван кавычками в my_description
. Кавычки необходимо заменить escape-последовательностями \"
.
На самом деле это проблема, даже если сообщение отправлено успешно, оно все равно отображается как ошибка, я добавил это: if (response_code != 200) { printf("ERROR"); }
Я не знаю протокол приложения, используемый на вашем сервере. Обратитесь к его документации о возможных успешных кодах, если они не являются точными 200. Вы можете изменить условие 200 <= response_code response_code <= 299
. Коды HTTP 2xx являются успешными кодами.
Я изменяю значение 200 на 204, и теперь оно работает.
я напечатал response_code, и он показывает значение 204 для успешно отправленного сообщения и 400 для ошибки
if (!(код_ответа >= 200 && код_ответа <= 299)) это отлично работает
Вы знаете, как скрыть ошибку {"code": 50109, "message": "Тело запроса содержит неверный JSON"} из вывода?
Установка ничего не делает, кроме возврата CURLOPT_WRITEFUNCTION.
Ладно, надеюсь, я справлюсь. большое спасибо!
Кто-нибудь знает? Пожалуйста