Zig bindings for libcurl, a free and easy-to-use client-side URL transfer library.
The vendored libraries consist of:
Library | Version |
---|---|
libcurl | 8.8.0 |
zlib | 1.3.1 |
mbedtls | 3.6.0 |
const std = @import("std");
const curl = @import("curl");
const URL = "https://httpbin.liujiacai.net/anything";
pub fn main() !void {
var gpa: std.heap.DebugAllocator(.{}) = .init;
defer if (gpa.deinit() != .ok) @panic("leak");
const allocator = gpa.allocator();
const ca_bundle = try curl.allocCABundle(allocator);
defer ca_bundle.deinit();
const easy = try curl.Easy.init(.{
.ca_bundle = ca_bundle,
});
defer easy.deinit();
{
std.debug.print("GET without body\n", .{});
const resp = try easy.fetch(URL, .{});
std.debug.print("Status code: {d}\n", .{resp.status_code});
}
{
std.debug.print("\nGET with fixed buffer as body\n", .{});
var buffer: [1024]u8 = undefined;
var writer = std.Io.Writer.fixed(&buffer);
const resp = try easy.fetch(URL, .{ .writer = &writer });
std.debug.print("Status code: {d}\nBody: {s}\n", .{ resp.status_code, writer.buffered() });
}
}
Check examples for more examples.
See https://jiacai2050.github.io/zig-curl/
zig fetch --save=curl https://github.com/jiacai2050/zig-curl/archive/refs/tags/${TAG}.zip
The latest tag can be found on release page.
After fetch, import curl
like this in your build.zig
:
const dep_curl = b.dependency("curl", .{});
exe.root_module.addImport("curl", dep_curl.module("curl"));
exe.linkLibC();
This library will link to a vendored libcurl by default, you can disable it and link to system-wide with this
const dep_curl = b.dependency("curl", .{ .link_vendor = false });
exe.linkSystemLibrary("curl");
exe.linkLibC();