Sample code for 30+ languages & platforms
PureBasic

Http Digest Authentication

Demonstrates the DigestAuth property to do HTTP Digest Authentication.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttp.pb"

Procedure ChilkatExample()

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

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; To use HTTP Digest Authentication:
    CkHttp::setCkLogin(http, "myLogin")
    CkHttp::setCkPassword(http, "myPassword")
    CkHttp::setCkDigestAuth(http, 1)

    ; If you would like to see the HTTP session log to see how 
    ; HTTP digest authentication worked.
    CkHttp::setCkSessionLogFilename(http, "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.)
    jsonResponse.s = CkHttp::ckQuickGetStr(http,"https://httpbin.org/digest-auth/auth/myLogin/myPassword")
    If CkHttp::ckLastMethodSuccess(http) = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        ProcedureReturn
    EndIf

    Debug "Response status code: " + Str(CkHttp::ckLastStatus(http))

    Debug 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"
    ; }


    CkHttp::ckDispose(http)


    ProcedureReturn
EndProcedure