Peter,

I am unsure whether the change that you propose really solves the problem that you have.  First off, it seems that DRAKMA restricts the use of file upload parameters to POST requests in the WHEN form that you pasted.  I do not think that is the right thing, as the HTTP standard does not restrict the use of request bodies to specific methods. The only method that is specified to never have a request body is TRACE.  Thus, I would change the condition to check for TRACE, instead of whitelisting PUT.  But, and that is why I am not sure whether you are looking at the real problem, in request.lisp, the processing of file upload parameters is explicitly conditionalized to POST requests in the following form, so even if we changed the condition as you proposed, no file uploads would be processed for PUT requests.

Before moving on with patches (which I am totally open to), I would like to know whether you really try to upload files in your PUT requests. If so, the change must be bigger to cover the following (and any additional) conditional that explicitly check for the POST method.

I am currently on vacation, so any release will have to wait until the end of July. If you want to make it happen quickly then, please send a github pull request with the complete change and don't forget to check and possibly update the documentation.

Thanks,
-Hans

Am 17.07.2013 08:19 schrieb "Peter Wood" <pete_wood@runbox.com>:
Hi

Using Drakma-1.3.2 (via quicklisp) and Sbcl-1.1.9 on Linux (Debian Wheezy):

I believe it is allowed to send parameters with a PUT request, just as with a POST request, but Drakma only allows POST with parameters.

In request.lisp, changing this

(when (and file-parameters-p (not (eq method :post)))
   (parameter-error "Don't know how to handle parameters in ~S, as this is not a POST request."

To this

(when (and file-parameters-p (not (member method '(:post :put))))
   (parameter-error "Don't know how to handle parameters in ~S, as this is not a POST or PUT request."

Allows PUT parameters.

I need this change for drakma to work with an common lisp interface to the paymill payment service api: https://www.paymill.com/
I would like to release the the paymill-api, but if Drakma won't let me use parameters in a put request, I will have to ship a forked version of it with the api.

Regards
Peter

(ps. Just to be clear: I'm not talking about form-data - that IS only allowed with POST.)