# How do I read an HTTP PUT from a controller?

**URL:** <https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379>\
**Category:** Rails\
**Created:** [March 10, 2007, 5:36am UTC](https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379 "2007-03-10T05:36:55Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tyler\_MacDonald](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b5ac83/32.png) [@Tyler\_MacDonald](https://www.ruby-forum.com/u/Tyler_MacDonald)\
**Post date:** [March 10, 2007, 5:36am UTC](https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379/1 "2007-03-10T05:36:55Z")

</div>

I’ve googled around a little bit and havent found anything useful. ☹  
Has anybody written a rails controller that accepts HTTP PUT (DAV)  
requests?  
If so, do you have any pointers?

Thanks,  
Tyler

---

<div class="post-metadata">

**Author:** ![Tyler\_MacDonald](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b5ac83/32.png) [@Tyler\_MacDonald](https://www.ruby-forum.com/u/Tyler_MacDonald)\
**Post date:** [March 10, 2007, 6:49am UTC](https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379/2 "2007-03-10T06:49:00Z")

</div>

Rails can accept pretty much any HTTP request – just check the  
request.method accessor. Rails provides a special test for put that  
makes things really succinct.

def action  
if request.put?  
body = request.raw\_post  
# do something with body  
else  
redirect\_to :action =\> “error”  
end  
end

On Mar 10, 12:34 pm, Tyler MacDonald [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Tyler\_MacDonald](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b5ac83/32.png) [@Tyler\_MacDonald](https://www.ruby-forum.com/u/Tyler_MacDonald)\
**Post date:** [March 11, 2007, 10:28pm UTC](https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379/3 "2007-03-11T22:28:58Z")

</div>

eden li [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> end
> 
> ```
> 
> end

Great, so this code works with some uploaders (like curl), but other  
uploaders (like the one from [upload.thinfile.com](http://upload.thinfile.com)), which work with PHP,  
give  
me this error in ruby… (or just fail silently if I use CGI instead of  
FastCGI)… any ideas?

You have a nil object when you didn’t expect it!  
You might have expected an instance of Array.  
The error occured while evaluating nil.include?  
/var/www/public/…/config/…/vendor/rails/actionpack/lib/action\_controller/cgi\_ext/cgi\_methods.rb:49:in  
`parse_request_parameters' /var/www/public/../config/../vendor/rails/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb:47:in `each’  
/var/www/public/…/config/…/vendor/rails/actionpack/lib/action\_controller/cgi\_ext/cgi\_methods.rb:47:in  
`parse_request_parameters' /var/www/public/../config/../vendor/rails/actionpack/lib/action_controller/cgi_process.rb:71:in `request\_parameters’  
/var/www/public/…/config/…/vendor/rails/actionpack/lib/action\_controller/request.rb:13:in  
`parameters' /var/www/public/../config/../vendor/rails/actionpack/lib/action_controller/session_management.rb:122:in `set\_session\_options\_without\_components’  
/var/www/public/…/config/…/vendor/rails/actionpack/lib/action\_controller/components.rb:178:in  
`set_session_options' /var/www/public/../config/../vendor/rails/actionpack/lib/action_controller/session_management.rb:116:in `process’  
/var/www/public/…/config/…/vendor/rails/railties/lib/dispatcher.rb:38:in  
`dispatch' /var/www/public/../config/../vendor/rails/railties/lib/fcgi_handler.rb:150:in `process\_request’  
/var/www/public/…/config/…/vendor/rails/railties/lib/fcgi\_handler.rb:54:in  
`process!' /usr/lib/ruby/1.8/fcgi.rb:612:in `each\_cgi’  
/usr/lib/ruby/1.8/fcgi.rb:609:in `each' /usr/lib/ruby/1.8/fcgi.rb:609:in `each\_cgi’  
/var/www/public/…/config/…/vendor/rails/railties/lib/fcgi\_handler.rb:53:in  
/`process!' /var/www/public/../config/../vendor/rails/railties/lib/fcgi_handler.rb:23:in /`process!’  
/var/www/public/dispatch.fcgi:26

Thanks,  
Tyler

---

<div class="post-metadata">

**Author:** ![Tyler\_MacDonald](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b5ac83/32.png) [@Tyler\_MacDonald](https://www.ruby-forum.com/u/Tyler_MacDonald)\
**Post date:** [March 13, 2007, 6:59pm UTC](https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379/4 "2007-03-13T18:59:14Z")

</div>

eden li [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I remember running into this same exception when I sent raw XML with  
> ampersands to my rails 1.1.6 controllers. You’ll need to hand patch  
> that line by placing “next if key.nil? || key.empty?” before line 48  
> of vendor/rails/actionpack/lib/action\_controller/cgi\_ext/  
> cgi\_methods.rb.
> 
> OR you could just upgrade to 1.2.2 – I think this has been fixed by  
> now.

Upgrading to 1.2.2 did indeed fix the problem! Thanks, eden!

Cheers,  
Tyler

---

<div class="post-metadata">

**Author:** ![Tyler\_MacDonald](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b5ac83/32.png) [@Tyler\_MacDonald](https://www.ruby-forum.com/u/Tyler_MacDonald)\
**Post date:** [March 12, 2007, 2:16am UTC](https://www.ruby-forum.com/t/how-do-i-read-an-http-put-from-a-controller/88379/5 "2007-03-12T02:16:22Z")

</div>

I remember running into this same exception when I sent raw XML with  
ampersands to my rails 1.1.6 controllers. You’ll need to hand patch  
that line by placing “next if key.nil? || key.empty?” before line 48  
of vendor/rails/actionpack/lib/action\_controller/cgi\_ext/  
cgi\_methods.rb.

OR you could just upgrade to 1.2.2 – I think this has been fixed by  
now.

On Mar 12, 5:27 am, Tyler MacDonald [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
