Я должен использовать libmicrohttpd для настройки сервера REST. Нет проблем с запросом GET, но я не понимаю, что я делаю неправильно, чтобы обрабатывать запрос POST (PUT на самом деле) (формат JSON). Вот код:Обработка запроса POST с помощью libmicrohttpd
int MHD_answer_to_connection (void* cls, struct MHD_Connection* connection,
const char* url,
const char* method, const char* version,
const char* upload_data,
size_t* upload_data_size, void** con_cls) {
// Initializes parser/camera/settings...
static Parser parser;
// The first time only the headers are valid, do not respond in the first round
static int dummy;
if (*con_cls != &dummy) {
*con_cls = &dummy;
return MHD_YES;
}
// Parse URL to get the resource
int resource = parser.getRequestedResource(url);
// Check wether if it's a GET or a POST method
if(strcmp(method, MHD_HTTP_METHOD_GET) == 0) {
parser.processGetRequest(resource);
}
else {
parser.processPutRequest(upload_data, *upload_data_size);
}
// Building HTTP response (headers+data)
MHD_Response* httpResponse = parser.getResponse();
int ret = MHD_queue_response (connection, MHD_HTTP_OK, httpResponse);
if (ret != MHD_YES) {
Logger::get().error("Error queuing message");
}
MHD_destroy_response (httpResponse);
// Clear context pointer
*con_cls = NULL;
return ret;
}
Everytime я пытаюсь отправить запрос PUT с некоторыми данными, я получаю «Внутренняя ошибка приложения, соединение закрывается». Проблема может исходить от одной из этих вещей:
оприходования ответа/не-проводки при первом вызове fucntion
модифицирующим или нет * upload_data_size (указать, что обработка выполняется)
хорошее расположение
*con_cls = NULL
инструкции
Спасибо!
слишком поздно, но это то, что мне нужно :) – Pierre