Great stuff! I'm liking you code.
I built the request_example on a Raspberry Pi 2b running their raspbian jesse and got mostly nulls displayed in both the client and server consoles. On the two json tests the client segfaulted. There were warnings on the compile (which I ignored) so I built it on ubuntu 16.04 lts as a verification and had the same problems.
Rolling up my sleeves, I looked at the warnings (like I should have in the first place), made the following change to the client.c code at about line 86, and it cleaned it right up. The original was missing a zero value for each check_server_certificate or timeout, depending on how you look at it.
/* DMerrell 5/17/17 - Autoinitialization doesn't match definition. Added check_server_certificate=0.
struct _u_request req_list[] = {
{"GET", SERVER_URL_PREFIX "/get/", 0, NULL, NULL, NULL, &url_params, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0}, // Parameters in url
{"DELETE", SERVER_URL_PREFIX "/delete/", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0}, // No parameters
{"POST", SERVER_URL_PREFIX "/post/param/", 0, NULL, NULL, NULL, NULL, NULL, NULL, &post_params, NULL, NULL, 0, string_body, strlen(string_body)}, // Parameters in post_map and string_body
{"POST", SERVER_URL_PREFIX "/post/plain/", 0, NULL, NULL, NULL, NULL, &req_headers, NULL, NULL, NULL, NULL, 0, string_body, strlen(string_body)}, // Paremeters in string body, header MHD_HTTP_POST_ENCODING_FORM_URLENCODED
{"POST", SERVER_URL_PREFIX "/post/json/", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, json_body, NULL, 0, NULL, 0}, // Parameters in json_body
{"PUT", SERVER_URL_PREFIX "/put/plain", 0, NULL, NULL, NULL, NULL, &req_headers, NULL, NULL, NULL, NULL, 0, string_body, strlen(string_body)}, // Paremeters in string body, header MHD_HTTP_POST_ENCODING_FORM_URLENCODED
{"PUT", SERVER_URL_PREFIX "/put/json", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, json_body, NULL, 0, NULL, 0}, // Parameters in json_body
{"POST", SERVER_URL_PREFIX "/post/param/", 0, NULL, NULL, NULL, NULL, NULL, NULL, &post_params, NULL, NULL, 0, NULL, 0} // Parameters in post_map
};
*/
struct _u_request req_list[] = {
{"GET", SERVER_URL_PREFIX "/get/", 0, 0, NULL, NULL, NULL, &url_params, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0}, // Parameters in url
{"DELETE", SERVER_URL_PREFIX "/delete/", 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0}, // No parameters
{"POST", SERVER_URL_PREFIX "/post/param/", 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, &post_params, NULL, NULL, 0, string_body, strlen(string_body)}, // Parameters in post_map and string_body
{"POST", SERVER_URL_PREFIX "/post/plain/", 0, 0, NULL, NULL, NULL, NULL, &req_headers, NULL, NULL, NULL, NULL, 0, string_body, strlen(string_body)}, // Paremeters in string body, header MHD_HTTP_POST_ENCODING_FORM_URLENCODED
{"POST", SERVER_URL_PREFIX "/post/json/", 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, json_body, NULL, 0, NULL, 0}, // Parameters in json_body
{"PUT", SERVER_URL_PREFIX "/put/plain", 0, 0, NULL, NULL, NULL, NULL, &req_headers, NULL, NULL, NULL, NULL, 0, string_body, strlen(string_body)}, // Paremeters in string body, header MHD_HTTP_POST_ENCODING_FORM_URLENCODED
{"PUT", SERVER_URL_PREFIX "/put/json", 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, json_body, NULL, 0, NULL, 0}, // Parameters in json_body
{"POST", SERVER_URL_PREFIX "/post/param/", 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, &post_params, NULL, NULL, 0, NULL, 0} // Parameters in post_map
};