Common Lisp で HTTP リクエストを取り回す時に drakma を使うが、CLISP + Mac OS X の環境で http-request を叩いてみたところ USOCKET:TIMEOUT-ERROR というのが出てコンテンツを get できなかった。
 

 
;; QuickLisp で drakma を load
> (ql:quickload :drakma)
To load "drakma":
  Load 1 ASDF system:
      drakma
      ; Loading "drakma"
(:DRAKMA)
 
;; header 情報も表示するようにセット
> (setf drakma:*header-stream* *standard-output*)
#<IO SYNONYM-STREAM *TERMINAL-IO*>
 
;; そのままだとうまくいかない
> (drakma:http-request "http://lisp.org/")
*** - Condition of type USOCKET:TIMEOUT-ERROR.
The following restarts are available:
ABORT          :R1      Abort main loop
 

 
調べてみたら Google Group のお助けスレッドから こんな やり取りを発見。
 
その中に
 

If I specify the drakma call with connection-timeout set to nil (not 0), I get the web page:
(drakma:http-request “http://www.lisp.org/”
:connection-timeout nil)

 
というコメントを発見したので試してみたら僕の環境でもうまく行った。
 

 
;; get できたやり方
> (drakma:http-request "http://lisp.org/" :connection-timeout nil)
GET / HTTP/1.1
Host: lisp.org
User-Agent: Drakma/1.3.7 (CLISP 2.49 (2010-07-07) (built on nakamura-no-imac.local [192.168.11.4]); Unix; http://weitz.de/drakma/)
Accept: */*
Connection: close
...
 

 
 

§1221 · Posted By · 12月 31, 2013 · Development · Tags: , , , , · [Print]