Hello,

It's 1st day of May, a new month; I thought it would be better to summarize
some issues of http-get. This post include 3 examples; working, half
working and not working because of implementation of declare-uri-header!

Example 1 - working

(use-modules (srfi srfi-8)
             ((web uri)    #:select (string->uri))
             ((web client) #:select (http-get)))

(set-port-encoding! (current-output-port) "UTF-8")
(fluid-set! %default-port-encoding "UTF-8")

(receive (res-headers res-body)
    (http-get (string->uri "http://www.gnu.org/software/guile/";))
  (display res-body)
  (newline))

1. receive is a macro to receive multi valued return of a certain
procedure. http-get returns two values; headers of a web page and content
of that.

2. (fluid-set! %default-port-encoding "UTF-8") is not needed in above case;
codeset of http://www.gnu.org/software/guile/ is UTF-8 and above example
only display it. I think it is a good habit to append this line if you want
to use some other tools like html->sxml of guile-lib.

3. (set-port-encoding! (current-output-port) "UTF-8") is not needed in
above case; codeset of http://www.gnu.org/software/guile/ is UTF-8 and
written in plain english. I think it is a good habit to append this line if
you want to display the content of web page.

Example 2 - half working

(receive (res-headers res-body)
    (http-get (string->uri "http://www.gnu.org/home.en.html";))
  (display res-body)
  (newline))

1. http-get of current stable version, 2.0.5,  of Guile does not
support "Chunked Encoding."
2. You should apply patches of Ian Price's,
http://lists.gnu.org/archive/html/guile-user/2011-11/msg00011.html , if
this case.

Example 3 - not working

(receive (res-headers res-body)
    (http-get (string->uri "http://www.gnu.org/home.html";)
              #:extra-headers
              (acons 'Accept-Language "en-US" '()))
  (display res-body)
  (newline))

1. http://www.gnu.org/home.html replay with the contents of
http://www.gnu.org/home.en.html .
2. Its Content-Location header is home.en.html, not
http://www.gnu.org/home.en.html ; it is a relative URI, not absolute URI.
There is no solution on current Guile if this case. Avoid this case and use
a real web page like http://www.gnu.org/home.en.html .

Reply via email to