HTTP requests library for the C programming language
Features
- Response handling in streams
- Support for HTTP and HTTPS (depending on OpenSSL)
- Implementation for a StringMap struct used in HTTP headers list and URL parameters
- URL parsing
- Shorthand functions
Getting your external IP address
#include <requester.h> // <-- This library #include <stdio.h> int main(void) { /* Initialize library. */ HttpClient_Init(); /* Perform the request. */ HttpResponse* res = HttpClient_Get("https://ifconfig.me/ip"); if (res == HTTP_INVALID_RESPONSE) { puts("Cannot get your external IP address."); return -1; } char* ip = StreamContent_ReadAsString(res->content); if (ip != NULL) { puts(ip); free(ip); } /* Cleanup resources. */ HttpResponse_Delete(res); HttpClient_Cleanup(); return 0; }
- HTTP 0.9 (untested)
- HTTP 1.1 (tested)
- HTTP 2 and 3 (untested)
Use these functions to avoid creating a HttpRequest struct explicitly.
HttpResponse* HttpClient_Get(const char* url); HttpResponse* HttpClient_Post(const char* url, const char* data, MIMEType content_type); HttpResponse* HttpClient_PostFile(const char* url, const char* file_name, MIMEType content_type); HttpResponse* HttpClient_Put(const char* url, const char* data, MIMEType content_type); HttpResponse* HttpClient_PutFile(const char* url, const char* file_name, MIMEType content_type); HttpResponse* HttpClient_Delete(const char* url); HttpResponse* HttpClient_Head(const char* url);
struct _HttpResponse { StringMap* headers; StreamContent* content; HttpVersion version; HttpStatus status; };
struct _HttpRequest { StringMap* headers; HttpContent* content; URL* url; HttpMethod method; HttpVersion version; };