👏
【Zig】std.http.Client を利用して HTTP/1 リクエストを送信する
2024年4月時点で std.http
は HTTP/1 のみ、std.crypto.tls
は TLS 1.3 のみをサポートする。Zig 0.12-dev では次のようなコードになる。httpbin.org
は TLS 1.3 をサポートしないので http
で通信することにした
const std = @import("std");
const print = std.debug.print;
pub fn main() !void {
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
var client: std.http.Client = .{ .allocator = allocator };
defer client.deinit();
const uri = std.Uri.parse("http://httpbin.org/get") catch unreachable;
var server_header_buffer: [1024]u8 = undefined;
var req = try client.open(.GET, uri, .{
.server_header_buffer = &server_header_buffer,
});
defer req.deinit();
try req.send();
try req.wait();
const body = req.reader().readAllAlloc(allocator, 10 * 1024) catch unreachable;
defer allocator.free(body);
print("{s}\n", .{ body });
}
Discussion