Sample code for 30+ languages & platforms
Zig

Http Digest Authentication

Demonstrates the DigestAuth property to do HTTP Digest Authentication.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const http = try chilkat.Http.init();
    defer http.deinit();

    // To use HTTP Digest Authentication:
    http.setLogin("myLogin");
    http.setPassword("myPassword");
    http.setDigestAuth(true);

    // If you would like to see the HTTP session log to see how
    // HTTP digest authentication worked.
    http.setSessionLogFilename("c:/temp/qa_output/sessionLog.txt");

    // Run the test using this URL with the credentials above.
    // (Works while httpbin.org keeps the test endpoint available.)
    const json_response = http.quickGetStr(alloc, "https://httpbin.org/digest-auth/auth/myLogin/myPassword") catch {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("Response status code: {d}\n", .{http.getLastStatus()});

    std.debug.print("{s}\n", .{json_response});

    // Output:

    // Response status code: 200
    // {
    //   "authenticated": true,
    //   "user": "myLogin"
    // }

    // -----------------------------------------------
    // Here are the contents of the sessionLog.txt

    // ---- Sending Sat, 30 Aug 2025 11:23:12 GMT ----
    // GET /digest-auth/auth/myLogin/myPassword HTTP/1.1
    // Host: httpbin.org
    // Accept: */*
    // Accept-Encoding: gzip
    //
    //
    // ---- Received Sat, 30 Aug 2025 11:23:12 GMT ----
    // HTTP/1.1 401 UNAUTHORIZED
    // Date: Sat, 30 Aug 2025 11:23:12 GMT
    // Content-Type: text/html; charset=utf-8
    // Content-Length: 0
    // Connection: keep-alive
    // Server: gunicorn/19.9.0
    // WWW-Authenticate: Digest realm="me@kennethreitz.com", nonce="fbc6733e2f4d126e7a92d19918f42b0f", qop="auth", opaque="5a14177dc4089cb22c019e6df4fdaadf", algorithm=MD5, stale=FALSE
    // Set-Cookie: stale_after=never; Path=/
    // Set-Cookie: fake=fake_value; Path=/
    // Access-Control-Allow-Origin: *
    // Access-Control-Allow-Credentials: true
    //
    //
    // ---- Sending Sat, 30 Aug 2025 11:23:12 GMT ----
    // GET /digest-auth/auth/myLogin/myPassword HTTP/1.1
    // Host: httpbin.org
    // Accept: */*
    // Accept-Encoding: gzip
    // Authorization: Digest ****
    //
    //
    // ---- Received Sat, 30 Aug 2025 11:23:12 GMT ----
    // HTTP/1.1 200 OK
    // Date: Sat, 30 Aug 2025 11:23:13 GMT
    // Content-Type: application/json
    // Content-Length: 50
    // Connection: keep-alive
    // Server: gunicorn/19.9.0
    // Set-Cookie: fake=fake_value; Path=/
    // Access-Control-Allow-Origin: *
    // Access-Control-Allow-Credentials: true
    //
    // {
    //   "authenticated": true,
    //   "user": "myLogin"
    // }
}