[Gauche-devel-jp] http-get でうまくリダイレクトされない問題

Back to archive index

Shiro Kawai shiro****@lava*****
2009年 4月 17日 (金) 16:19:29 JST


ありがとうございます。fixしました。

今思うと、copy-portはsize = 0の時は何もせずにリターンし、
size < 0をサイズ無指定と扱う方が良かったかもしれません。
いやまてよ、マニュアルにsize引数は書いてないからまだオフィシャルじゃ
なかったかな。それならそう変えてしまおうかな。

--shiro


From: kzfm1024 <kzfm1****@gmail*****>
Subject: [Gauche-devel-jp] http-get でうまくリダイレクトされない問題
Date: Wed, 15 Apr 2009 00:49:19 +0900

> 尾山と申します。
> 
> 以下のようなレスポンスを返すサイトに対して http-get を 
> 実行したところ
> ブロックしたまま返ってこなくなりました。
> 
> HTTP/1.1 301 MovedPermanently
> Date: Mon, 13 Apr 2009 13:49:47 GMT
> Server: Server
> x-amz-id-1: 1D8FH40X7ZTQPMF8S5DA
> p3p: policyref="http://www.amazon.com/w3c/p3p.xml",CP="AMZN "
> x-amz-id-2: 6R7aDSk08UmlmJY1rkw1wLWWks8vpDL7
> Location: http://www.amazon.com/gp/dmusic/media/log_action.mp3?ie=UTF8&ASIN=B001AUEMFS&TYPE=DigitalMusicSampleStreamSampler&CustomerID=&URL=http%3A%2F%2Famazonm-666.vo.llnwd.net%2Fs%2Fd7%2F100513%2F100513276%2F206028666%5FS64.mp3%3Fe%3D1239634187%26h%3Dd1337683d6e7094fe05f9e91a963bcef
> Vary: Accept-Encoding,User-Agent
> Content-Type: text/html; charset=ISO-8859-1
> Set-cookie: session-id-time=1240210800l; path=/; domain=.amazon.com;  
> expires=Mon Apr 20 07:00:00 2009 GMT
> Set-cookie: session-id=000-0000000-0000000; path=/;  
> domain=.amazon.com; expires=Mon Apr 20 07:00:00 2009 GMT
> Content-Length: 0
> Cneonction: close
> Connection: Keep-Alive
> 
> gosh> (sampleTrack "B001AUEMFS")
>    C-c C-c*** UNHANDLED-SIGNAL-ERROR: unhandled signal 2 (SIGINT)
> Stack Trace:
> _______________________________________
>    0  (read-block! buf src)
>          At line 146 of "/usr/local/share/gauche/0.8.14/lib/gauche/ 
> portutil.scm"
>    1  (copy-port remote sink)
>          At line 298 of "/usr/local/share/gauche/0.8.14/lib/rfc/ 
> http.scm"
>    2  (loop109 (cddr args108) G110 G111)
>          [unknown location]
>    3  (with-error-handler (lambda (e) (let ((e e)) (%guard-rec e e  
> (else ...
>          [unknown location]
>    4  (request-response request conn host request-uri request-body opts)
>          At line 179 of "/usr/local/share/gauche/0.8.14/lib/rfc/ 
> http.scm"
>    5  (amazon-mp3-sampleTrack "xxxxxx" asin)
>          At line 94 of "(stdin)"
> 
> 調べてみたところ Content-Length が 0 の場合は receive- 
> body-nochunked が
> size 0 で実行されます。そして receive-body-nochunked の中で  
> copy-port が
> 実行されて read-block! でブロックしています。
> 
> とりあえず receive-body-nochunked を以下のように修正し 
> たところ、
> リダイレクトされて動作するようになりました。
> 
> *** http.scm.org	2009-04-13 23:26:26.000000000 +0900
> --- http.scm	2009-04-14 00:19:47.000000000 +0900
> ***************
> *** 298,304 ****
>      (flusher sink headers))
> 
>    (define (receive-body-nochunked size remote sink)
> !   (copy-port remote sink :size size))
> 
>    ;; NB: chunk extension and trailer are ignored for now.
>    (define (receive-body-chunked remote sink)
> --- 298,304 ----
>      (flusher sink headers))
> 
>    (define (receive-body-nochunked size remote sink)
> !   (when (positive? size) (copy-port remote sink :size size)))
> 
>    ;; NB: chunk extension and trailer are ignored for now.
>    (define (receive-body-chunked remote sink)
> 
> 以上、よろしくお願いします。
> 
> _______________________________________________
> Gauche-devel-jp mailing list
> Gauch****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp
> 




Gauche-devel-jp メーリングリストの案内
Back to archive index