Thanks for your response, Ian. I don't know how I missed the (web client) module, but it's right there in my info page. I've been experimenting with it, but am having similar problem to those outlined below. I'm going to start reading some of the code, but my initial impression is that there's lots of loose interpretation (or at least execution) of the specs in the servers I'm testing on (Google, CNN) that are causing errors, e.g. (http-get (string->uri "http://www.cnn.com")) yields: web/client.scm:109:4: In procedure http-get: web/client.scm:109:4: Throw to key `bad-response' with args `("EOF while reading response body: ~a bytes of ~a" (18576 106274))'. In web/client.scm: 109:4 0 (http-get #< scheme: http userinfo: #f host: "www.cnn.com" port: #f path: "" query: #f fragment: #f> #:port # …) In your google.com web client example, the request seemed to return the body of the document, but I'm still encountering the -1 expiration problem. (Guile 2.0.3, though I think I'll go back to the git repo if I can work around a recent compilation error that showed up). It might be useful for me to see if I can make the parsing functions more permissive, since they are (correctly) throwing errors for some common servers. Unfortunately, I don't know that much about the innards of HTTP, but I'm sure I can look at where the errors are generated and short circuit some of the logic and see what happens. =) Thanks for your help with this. Rick