unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Using guile's web client
@ 2012-03-15  0:05 Chris Vine
  2012-03-15  1:14 ` Ian Price
  2012-03-15  1:43 ` Nala Ginrut
  0 siblings, 2 replies; 8+ messages in thread
From: Chris Vine @ 2012-03-15  0:05 UTC (permalink / raw)
  To: Guile User

Hi,

I have been playing around with guile-2.0.5's high-level web modules.
In order to see if I understood them, I tried about the simplest thing
I could think of: a GET request to checkip.dyndns.com to obtain my IP
address.

The following code works correctly provided I leave the commented out
code commented out:

(use-modules
 (web uri)
 (web response)
 (rnrs bytevectors)
 (web client))

((lambda()
   (let ((uri (build-uri 'http
                         #:host "checkip.dyndns.com"
                         #:port 80
                         #:path "/")))
     (display uri)
     (newline)
     (let ((r (http-get uri #:keep-alive? #t)))
       (if r
           (begin
             (display r)(newline)
;;           (display (read-response-body r))(newline)
             )
           (begin
             (display "Can't obtain response body")
             (newline)))))))

It outputs:

#<<uri> scheme: http userinfo: #f host: "checkip.dyndns.com" port: 80 path: "/" query: #f fragment: #f>
#<<response> version: (1 . 1) code: 200 reason-phrase: "OK" headers: ((content-type text/html) (server . "DynDNS-CheckIP/1.0") (connection close) (cache-control no-cache) (pragma no-cache) (content-length . 105)) port: #<input-output: socket 6>>

The contents of the response object mirrors the response obtained by
node.js with the equivalent code written in javascript, including the
content length, so the response object appears to be correct.  However,
if I try to obtain the response body by uncommenting the call to
read-response-body, I get an error:

Backtrace:
In ice-9/boot-9.scm:
 149: 10 [catch #t #<catch-closure 81e9280> ...]
 157: 9 [#<procedure 81b38c0 ()>]
In unknown file:
   ?: 8 [catch-closure]
In ice-9/boot-9.scm:
  63: 7 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 407: 6 [eval # #]
In ice-9/boot-9.scm:
2111: 5 [save-module-excursion #<procedure 81a1060 at ice-9/boot-9.scm:3646:3 ()>]
3653: 4 [#<procedure 81a1060 at ice-9/boot-9.scm:3646:3 ()>]
In unknown file:
   ?: 3 [load-compiled/vm "/home/chris/.cache/guile/ccache/2.0-LE-4-2.0/home/chris/src/scheme/my-ip-test.scm.go"]
In /home/chris/src/scheme/my-ip-test.scm:
  18: 2 [#<procedure 81ffd90 ()>]
In web/response.scm:
 223: 1 [read-response-body #]
In unknown file:
   ?: 0 [bytevector-length #<eof>]

ERROR: In procedure bytevector-length:
ERROR: In procedure scm_c_bytevector_length: Wrong type argument in position 1 (expecting bytevector): #<eof>

The error is in the procedure call to read-response-body.  Is this a
bug in guile-2, or am I doing something wrong?

Chris



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-03-15 12:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-15  0:05 Using guile's web client Chris Vine
2012-03-15  1:14 ` Ian Price
2012-03-15 10:40   ` Chris Vine
2012-03-15 12:42     ` Ian Price
2012-03-15  1:43 ` Nala Ginrut
2012-03-15  2:11   ` Ian Price
2012-03-15  3:55     ` Nala Ginrut
2012-03-15  4:01       ` Nala Ginrut

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).