Hi!
I would like to create a simple webserver that returns the exact payload that was sent with request. Here is the code that I wrote:
"""
#include <stdio.h>
#include <string.h>
#include <microhttpd.h>
#define PORT 8080
int on_connection(void *cls, struct MHD_Connection *conn, const char *url,
const char *method, const char *version, const char *upload_data,
size_t *upload_data_size, void **conn_cls) {
if (strcmp(method, "POST") == 0) {
if (*upload_data_size == 0) {
return MHD_YES;
} else {
*upload_data_size = 0;
}
}
puts(upload_data);
puts(method);
struct MHD_Response *res = MHD_create_response_from_buffer(strlen(upload_data),
(void *)upload_data,
MHD_RESPMEM_PERSISTENT);
return MHD_queue_response(conn, MHD_HTTP_OK, res);
}
int main() {
struct MHD_Daemon *daemon;
daemon = MHD_start_daemon(MHD_USE_INTERNAL_POLLING_THREAD, PORT, NULL, NULL,
&on_connection, NULL,
MHD_OPTION_END);
getchar();
MHD_stop_daemon(daemon);
return 0;
}
"""
But the problem with this code is that it does not return any response. When I try to send a request with curl:
curl -X POST localhost:8080 -d "Hello"
I see in that server itself prints:
Hello
POST
every time I make a request, but curl command returns:
curl: (52) Empty reply from server
I have already noticed that when I sent POST request on_connection function is called twice: first time with *upload_data_size = 0 and the second time with *upload_data_size equals the size of the payload.
Could you help me with that?
Thanks,
czelusniakdawid