```zig title="Zig" const std = @import("std"); pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); const file_bytes = try std.fs.cwd().readFileAlloc(allocator, "document.pdf", 64 * 1024 * 1024); defer allocator.free(file_bytes); const boundary = "----kreuzberg-zig-boundary"; var body = std.ArrayList(u8).init(allocator); defer body.deinit(); try body.writer().print( "--{s}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"document.pdf\"\r\n" ++ "Content-Type: application/pdf\r\n\r\n", .{boundary}, ); try body.appendSlice(file_bytes); try body.writer().print("\r\n--{s}--\r\n", .{boundary}); var client = std.http.Client{ .allocator = allocator }; defer client.deinit(); const uri = try std.Uri.parse("http://localhost:8000/extract"); var header_buf: [4096]u8 = undefined; var req = try client.open(.POST, uri, .{ .server_header_buffer = &header_buf, .extra_headers = &.{ .{ .name = "content-type", .value = "multipart/form-data; boundary=" ++ boundary }, }, }); defer req.deinit(); req.transfer_encoding = .{ .content_length = body.items.len }; try req.send(); try req.writeAll(body.items); try req.finish(); try req.wait(); const response_body = try req.reader().readAllAlloc(allocator, 16 * 1024 * 1024); defer allocator.free(response_body); const stdout = std.io.getStdOut().writer(); try stdout.print("{s}\n", .{response_body}); } ```