hello, i make some test with drakma and i have a problem with http-request :
CL-USER> (with-open-file (os (format nil "/tmp/~A.png" "tttt") :direction :output :if-exists :supersede :element-type 'unsigned-byte) (multiple-value-bind (body-stream status-code headers uri stream must-close) (drakma:http-request "http://stats-dev/cgi-bin/view_image.cgi?filename=/tmp/sms_5Avkjm.png" :want-stream t :force-binary t :content-length t) (declare (ignore headers uri stream must-close)) (when (= status-code 200) (format t "Type ~A~%" (type-of body-stream)) (loop for c = (read-byte body-stream nil) until (null c) do (progn (format t "Write ~%") (write-byte c os))) (close body-stream)))) Type FLEXI-IO-STREAM T
after i try with another image :
CL-USER> (with-open-file (os (format nil "/tmp/~A.png" "tttt") :direction :output :if-exists :supersede :element-type 'unsigned-byte) (multiple-value-bind (body-stream status-code headers uri stream must-close) (drakma:http-request "http://www.google.com/images/logo_sm.gif" :want-stream t :force-binary t :content-length t) (declare (ignore headers uri stream must-close)) (when (= status-code 200) (format t "Type ~A~%" (type-of body-stream)) (loop for c = (read-byte body-stream nil) until (null c) do (progn (format t "Write ~%") (write-byte c os))) (close body-stream)))) Type FLEXI-IO-STREAM Write Write Write Write Write Write [...] Write Write T
and the file /tmp/tttt.png contains the google's logo. With the first request, the file is empty.
Here it is the differents between the 2 requests :
CL-USER> (drakma:http-request "http://stats-dev/cgi-bin/view_image.cgi?filename=/tmp/sms_5Avkjm.png" :want-stream t) #<FLEXI-STREAMS:FLEXI-IO-STREAM {B0F1BF9}> 200 ((:DATE . "Tue, 05 Dec 2006 18:09:17 GMT") (:SERVER . "Apache/1.3.34 (Debian) PHP/4.4.4-6 mod_jk/1.2.18 mod_ssl/2.8.25 OpenSSL/0.9.8c mod_perl/1.29") (:CONNECTION . "close") (:TRANSFER-ENCODING . "chunked") (:CONTENT-TYPE . "image/png")) #<URI http://stats-dev/cgi-bin/view_image.cgi?filename=/tmp/sms_5Avkjm.png%3E #<FLEXI-STREAMS:FLEXI-IO-STREAM {B0F1BF9}> T
and :
CL-USER> (drakma:http-request "http://www.google.com/images/logo_sm.gif" :want-stream t) #<FLEXI-STREAMS:FLEXI-IO-STREAM {B13C631}> 200 ((:CONTENT-TYPE . "image/gif") (:LAST-MODIFIED . "Wed, 07 Jun 2006 19:38:24 GMT") (:EXPIRES . "Sun, 17 Jan 2038 19:14:07 GMT") (:SERVER . "GWS/2.1") (:CONTENT-LENGTH . "4707") (:DATE . "Tue, 05 Dec 2006 18:10:07 GMT")) #<URI http://www.google.com/images/logo_sm.gif%3E #<FLEXI-STREAMS:FLEXI-IO-STREAM {B13C631}> T
i see that in the request which have a problem content-length is not sended. but i don't really understand why the first image is empty.
thanks if someone understand my problem.