客户端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <event2/event.h> #include <event2/http.h> #include <event2/http_struct.h> #include <event2/bufferevent.h> #include <event2/buffer.h> #define DEFAULT_URL "http://127.0.0.1:8080" void http_request_done(struct evhttp_request *req, void *arg){ char buffer[256]; int nread; if (req == NULL) { printf("request failed "); return; } fprintf(stderr, "Response line: %d %s ", evhttp_request_get_response_code(req),req->response_code_line); while ((nread = evbuffer_remove(evhttp_request_get_input_buffer(req), buffer, sizeof(buffer))) > 0) { fwrite(buffer, nread, 1, stdout); } } int main(int argc, char **argv){ char *url = DEFAULT_URL; if (argc == 2) { url = argv[1]; } struct evhttp_uri *http_uri = NULL; const char *scheme, *host, *path, *query; char uri[256]; int port; http_uri = evhttp_uri_parse(url); scheme = evhttp_uri_get_scheme(http_uri); if (scheme == NULL || (strcasecmp(scheme, "https") != 0 && strcasecmp(scheme, "http") != 0)) { printf("url must be http or https "); return 1; } host = evhttp_uri_get_host(http_uri); port = evhttp_uri_get_port(http_uri); if (port == -1) { port = (strcasecmp(scheme, "http") == 0) ? 80 : 443; } path = evhttp_uri_get_path(http_uri); if (strlen(path) == 0) { path = "/"; } query = evhttp_uri_get_query(http_uri); if (query == NULL) { snprintf(uri, sizeof(uri) - 1, "%s", path); } else { snprintf(uri, sizeof(uri) - 1, "%s?%s", path, query); } uri[sizeof(uri) - 1] = '