Zig Cookbook

介绍

GET

解析提供的 URL 并使用 request 发出同步 HTTP GET 请求。打印获取到的 Response 状态和标头。

注意:由于 HTTP 支持尚处于早期阶段,对于任何复杂的任务,建议使用 libcurl。 并且如果缓冲区不足,它将返回 error.HttpHeadersOverSize

const std = @import("std");
const print = std.debug.print;
const http = std.http;

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    var client = http.Client{ .allocator = allocator };
    defer client.deinit();

    const uri = try std.Uri.parse("http://httpbin.org/headers");
    var req = try client.request(.GET, uri, .{
        .extra_headers = &.{.{ .name = "Custom-header", .value = "Custom Value" }},
    });
    defer req.deinit();

    try req.sendBodiless();

    var redirect_buffer: [1024]u8 = undefined;
    var response = try req.receiveHead(&redirect_buffer);
    var iter = response.head.iterateHeaders();
    while (iter.next()) |header| {
        std.debug.print("Name:{s}, Value:{s}\n", .{ header.name, header.value });
    }

    try std.testing.expectEqual(response.head.status, .ok);
    const body = try response.reader(&.{}).allocRemaining(allocator, .unlimited);
    defer allocator.free(body);

    print("Body:\n{s}\n", .{body});
}

上一示例:UDP 回显
下一示例:POST