Zig bindings for libcurl, a free and easy-to-use client-side URL transfer library.
This package is in early stage, although the core functionality works right now, the API is still subject to changes.
The vendored libraries consist of:
Library | Version |
---|---|
libcurl | 8.8.0 |
zlib | 1.3.1 |
mbedtls | 3.6.0 |
const curl = @import("curl");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer if (gpa.deinit() != .ok) @panic("leak");
const allocator = gpa.allocator();
const easy = try curl.Easy.init(.{});
defer easy.deinit();
const resp = try easy.fetchAlloc("http://httpbin.org/anything", allocator, .{});
defer resp.deinit();
std.debug.print("Status code: {d}\nBody: {s}\n", .{
resp.status_code,
resp.body.?.slice(),
});
}
See examples/basic.zig, examples/advanced.zig for more usage.
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();