On 2023-08-09 10:18:05 -0400, Mortimer Cladwell wrote: > Hi, > I am running a local fake Urbit zod on port 8080. I want to submit an > http-request and obtain an urbauth id cookie. I run the following method: > > (use-modules (web client)(web response) (srfi srfi-9)(oop goops) (ice-9 > receive) (ice-9 pretty-print)) > > (define (urbit-http-connect) > (let* ((uri "http://localhost:8080/~/login") > (data (string-append "password=" "lidlut-tabwed-pillex-ridrup")) > (a (receive (response body) > (http-request uri #:method 'POST #:body data) > response))) > (pretty-print a))) > > ==> #< version: (1 . 1) code: 204 reason-phrase: "ok" headers: > ((date . # 8 year: 2023 zone-offset: 0>) (connection close) (server . > "urbit/vere-2.11") (set-cookie . > "urbauth-~zod=0v7.126dd.8rbvk.lga05.jvieb.287to; Path=/; Max-Age=604800")) > port: #> > > Below I substitute (pretty-print a) with various commands and show the > response: > > (pretty-print (class-of a)) ==> #< <> 7f721fc4c280> > (pretty-print (record? a)) ==> #t > (pretty-print (response? a)) ==> #f > > (pretty-print (response-headers a)) ==> In procedure response-headers: > Wrong type argument: #< version: (1 . 1) code: 204 reason-phrase: > "ok" headers: ((date . # day: 9 month: 8 year: 2023 zone-offset: 0>) (connection close) (server . > "urbit/vere-2.11") (set-cookie . > "urbauth-~zod=0v5.9pm4c.pa0qd.00hao.vsq1p.h37hh; Path=/; Max-Age=604800")) > port: #> > > So I have a record that looks like a record but isn't. How do I > extract the headers from this 'response'? I apologize for my previous message, apparently my reading comprehension is really low at this time of day. Anyway, to actually answer the question: response-headers is the procedure you are looking for. You are already using it, and it works for me (without the receive, so maybe consider dropping it since it is not necessary): ((accept-ranges bytes) (cache-control (max-age . 604800)) (content-type text/html (charset . "UTF-8")) (date . #) (etag "3147526947" . #t) (expires . #) (last-modified . #) (server . "EOS (vny/044F)") (content-length . 1256) (connection close)) Expression evaluated was: (use-modules (ice-9 pretty-print) (ice-9 receive) (web client) (web response)) (define (urbit-http-connect) (let* ((uri "http://example.org") (data (string-append "password=" "lidlut-tabwed-pillex-ridrup")) (response (http-request uri #:method 'POST #:body data))) (pretty-print (response-headers response)))) (urbit-http-connect) > How do I determine the record type? > Thanks > Mortimer W. -- There are only two hard things in Computer Science: cache invalidation, naming things and off-by-one errors.