API: Response ​
The top-level httpx.Response struct (defined in src/client/requestBuilder.zig) is the buffered response container returned by high-level client requests. It carries the status code, protocol version, headers, and body payload.
NOTE
Server handlers return the separate lightweight httpx.router.Response struct, which carries status, body, contentType, and headers borrowed from the request arena.
Overview ​
Every buffered HTTP client request returns an allocated Response. Callers own the response and must call defer resp.deinit() to release body and header allocations.
const std = @import("std");
const httpx = @import("httpx");
pub fn main() !void {
var gpa: std.heap.DebugAllocator(.{}) = .init;
defer _ = gpa.deinit();
const allocator = gpa.allocator();
const io = std.Io.Threaded.global_single_threaded.io();
var client = httpx.Client.init(allocator, io, .{});
defer client.deinit();
var resp = try client.get("https://httpbun.com/json", .{});
defer resp.deinit();
std.debug.print("Status: {d}\n", .{resp.status});
std.debug.print("Content-Type: {s}\n", .{resp.header("content-type") orelse "unknown"});
// Parse JSON into typed struct
const UserData = struct {
slideshow: struct {
title: []const u8,
author: []const u8,
},
};
const parsed = try resp.json(UserData);
std.debug.print("Title: {s}\n", .{parsed.slideshow.title});
}Structure ​
pub const Response = struct {
allocator: Allocator,
status: u16,
version: HttpVersion,
headers: []Header,
body: []u8,
pub fn deinit(self: *Response) void;
pub fn header(self: *const Response, name: []const u8) ?[]const u8;
pub fn text(self: *const Response) []const u8;
pub fn bytes(self: *const Response) []const u8;
pub fn json(self: *const Response, comptime T: type) !T;
pub fn jsonAlloc(self: *const Response, comptime T: type, allocator: Allocator) !std.json.Parsed(T);
pub fn html(self: *const Response) !httpx.parsing.Document;
pub fn xml(self: *const Response) !httpx.parsing.Document;
pub fn document(self: *const Response) !httpx.parsing.Document;
pub fn contentType(self: *const Response) []const u8;
pub fn writeTo(self: *const Response, writer: anytype) !void;
pub fn reader(self: *const Response) std.Io.Reader;
pub fn isInformational(self: *const Response) bool;
pub fn isSuccess(self: *const Response) bool;
pub fn isRedirect(self: *const Response) bool;
pub fn isClientError(self: *const Response) bool;
pub fn isServerError(self: *const Response) bool;
};Methods ​
resp.deinit() void ​
Frees header allocations and body bytes owned by the response.
resp.header(name: []const u8) ?[]const u8 ​
Performs a case-insensitive lookup across response headers. Returns null if the header is absent.
resp.text() []const u8 ​
Returns the body slice as a string. The slice is valid until resp.deinit().
resp.json(comptime T: type) !T ​
Decodes the response body into the target Zig type T using Zig's standard JSON parser.
resp.html() !httpx.parsing.Document ​
Parses the body into an HTML/DOM document tree using the native HTML engine. Caller must call document.deinit().
resp.xml() !httpx.parsing.Document ​
Parses the body into an XML document tree. Caller must call document.deinit().
resp.document() !httpx.parsing.Document ​
Parses auto-detected document from body and content-type header.
resp.bytes() []const u8 ​
Returns body as bytes.
resp.contentType() []const u8 ​
content-type header value or empty string.
resp.writeTo(writer) !void ​
Writes the buffered body bytes to any writer.
resp.reader() std.Io.Reader ​
Reader over the already-buffered body. Use client.requestStream for an incremental HTTP/1.1 response.
resp.isSuccess() bool / isRedirect() / isClientError() / isServerError() / isInformational() ​
Status-range helpers. Use resp.status for the raw code.
