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;
};