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(allocator, .{});
defer easy.deinit();
const resp = try easy.get("http://httpbin.org/anything");
defer resp.deinit();
std.debug.print("Status code: {d}\nBody: {s}\n", .{
resp.status_code,
resp.body.items,
});
}
See examples/basic.zig, examples/advanced.zig for more usage.
zig fetch --save=curl https://github.com/jiacai2050/zig-curl/archive/${COMMIT}.tar.gz
Replace ${COMMIT}
with a real one, then in your build.zig
, import the module like this:
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();