An ergonomic HTTP Client for Zig.
- Plain bodies, JSON, urlencoded
- Custom request headers
- Response headers (parsed + raw access)
- JSON response parsing
- Built on
std.http.Client
const std = @import("std");
const requezt = @import("requezt");
pub fn main() !void {
var gpa: std.heap.DebugAllocator(.{}) = .init;
defer _ = gpa.deinit();
var client = requezt.Client.init(gpa.allocator(), .{});
defer client.deinit();
var resp = try client.get("https://httpbin.org/get", .{});
defer resp.deinit();
std.debug.print("{s}\n", .{resp.body()});
}Parse responses directly into Zig structs:
const User = struct {
id: u32,
name: []const u8,
email: []const u8,
};
var resp = try client.get("https://api.example.com/user/1", .{});
defer resp.deinit();
const user = try resp.json(User);
defer user.deinit();
std.debug.print("Hello, {s}!\n", .{user.value.name});Send JSON bodies:
const CreateUser = struct {
name: []const u8,
email: []const u8,
};
var resp = try client.postJson("https://api.example.com/users", CreateUser{
.name = "Alice",
.email = "[email protected]",
}, .{});
defer resp.deinit();// Default headers for all requests
var client = requezt.Client.init(allocator, .{
.headers = .{ .authorization = "Bearer token" },
});
// Per-request headers
var resp = try client.get("https://api.example.com", .{
.headers = .{ .content_type = "application/json" },
});- Zig 0.15.2 or later
MIT