Sample code for 30+ languages & platforms
Swift

Http Digest Authentication

Demonstrates the DigestAuth property to do HTTP Digest Authentication.

Chilkat Swift Downloads

Swift

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

    let http = CkoHttp()!

    // To use HTTP Digest Authentication:
    http.login = "myLogin"
    http.password = "myPassword"
    http.digestAuth = true

    // If you would like to see the HTTP session log to see how 
    // HTTP digest authentication worked.
    http.sessionLogFilename = "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.)
    var jsonResponse: String? = http.quickGetStr(url: "https://httpbin.org/digest-auth/auth/myLogin/myPassword")
    if http.lastMethodSuccess == false {
        print("\(http.lastErrorText!)")
        return
    }

    print("Response status code: \(http.lastStatus.intValue)")

    print("\(jsonResponse!)")

    // 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"
    // }

}