Revision: 4196 Author: edi URL: http://bknr.net/trac/changeset/4196
Be liberal about content length
U trunk/thirdparty/drakma/CHANGELOG.txt U trunk/thirdparty/drakma/doc/index.html U trunk/thirdparty/drakma/request.lisp
Modified: trunk/thirdparty/drakma/CHANGELOG.txt =================================================================== --- trunk/thirdparty/drakma/CHANGELOG.txt 2009-02-09 10:08:05 UTC (rev 4195) +++ trunk/thirdparty/drakma/CHANGELOG.txt 2009-02-09 10:14:59 UTC (rev 4196) @@ -1,6 +1,7 @@ Version 0.12.0 2009-02-09 Use the new ("binary") version of Chunga +Be more lenient about content length (thanks to Zach Beane and "pix") Added conditions types Added *ALLOW-DOTLESS-COOKIE-DOMAINS-P* (thanks to Daniel Janus) Fix generation of user agent header (bug caught by Chaitanya Gupta)
Modified: trunk/thirdparty/drakma/doc/index.html =================================================================== --- trunk/thirdparty/drakma/doc/index.html 2009-02-09 10:08:05 UTC (rev 4195) +++ trunk/thirdparty/drakma/doc/index.html 2009-02-09 10:14:59 UTC (rev 4196) @@ -881,13 +881,12 @@ content body. Note that this will not work with some older web servers. <p> -<a class=none name="content-length2">A non-<code>NIL</code> <code><i>content-length</i></code> argument</a> -means that Drakma <em>must</em> build the request body in RAM and -compute the content length even if it would have otherwise used -chunked encoding - for example in the case of file uploads. A special -case is the value <code>T</code> -for <code><i>content-length</i></code> which means that Drakma should -compute the content length after building the request body. +<a class=none name="content-length2">Providing +a</a> <a href="http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_t.htm#true">true</a> +CONTENT-LENGTH argument which is not a non-negative integer means that +Drakma <em>must</em> build the request body in RAM and compute the +content length even if it would have otherwise used chunked encoding, +for example in the case of file uploads. <p> <a class=none name="content-type"><code><i>content-type</i></code></a> is the corresponding 'Content-Type' header to be sent and will be ignored
Modified: trunk/thirdparty/drakma/request.lisp =================================================================== --- trunk/thirdparty/drakma/request.lisp 2009-02-09 10:08:05 UTC (rev 4195) +++ trunk/thirdparty/drakma/request.lisp 2009-02-09 10:14:59 UTC (rev 4196) @@ -285,12 +285,10 @@ send the content body. Note that this will not work with older web servers.
-A non-NIL CONTENT-LENGTH argument means that Drakma /must/ build the -request body in RAM and compute the content length even if it would -have otherwise used chunked encoding, for example in the case of file -uploads. A special case is the value T for CONTENT-LENGTH which means -that Drakma should compute the content length after building the -request body. +Providing a true CONTENT-LENGTH argument which is not a non-negative +integer means that Drakma /must/ build the request body in RAM and +compute the content length even if it would have otherwise used +chunked encoding, for example in the case of file uploads.
CONTENT-TYPE is the corresponding `Content-Type' header to be sent and will be ignored unless CONTENT is provided as well. @@ -398,8 +396,6 @@ (parameter-error "Don't know how to handle scheme ~S." (uri-scheme uri))) (when (and close keep-alive) (parameter-error "CLOSE and KEEP-ALIVE must not be both true.")) - (when (and (eq content :continuation) content-length) - (parameter-error "CONTENT-LENGTH must be NIL if CONTENT is :CONTINUATION.")) (when (and form-data (not (eq method :post))) (parameter-error "FORM-DATA makes only sense with POST requests.")) ;; convert PROXY argument to canonical form @@ -550,7 +546,9 @@ (when content-type (write-header "Content-Type" "~A" content-type)) (when (and content-length - (not (or (arrayp content) + (not (or (and (integerp content-length) + (not (minusp content-length))) + (arrayp content) (listp content) (eq content :continuation)))) ;; CONTENT-LENGTH forces us to compute request body