我正在尝试为 Rails RESTful API 编写一个小型 rake 任务/测试脚本。我正在使用rest-client gem。
根据文档,以下内容应该可以工作(app.domain明显改变了)
response = RestClient.post "http://app.domain.com/company/v1", {'company_name' => 'Acme'}.to_json, :content_type => 'application/json', :accept => :json
但是我收到了422 Unprocessable Entity响应。
我之前在使用 Net:HTTP 时得到了相同的响应,并且看到我需要做
request["Content-Type"] = "application/json"
处理 CSRF 问题。在那种情况下工作,但现在我正在尝试使用 RestClient。
上面的 RestClient 代码似乎可以处理它,但我没有任何运气。我做一个 put 或 post 都很好,但都没有工作,我一直无法在网上找到这样的例子。有没有人能让这个工作?我正在使用最新版本的 RestClient 1.6.7
编辑
以下是上述调用的 production.log 文件
I, [2013-10-03T14:35:08.982428 #7677] INFO -- : Started PUT "/company/v1.json" for XXX.XXX.XXX.XXX at 2013-10-03 14:35:08 +0000
I, [2013-10-03T14:35:08.992628 #7677] INFO -- : Processing by CompaniesController#add_company as JSON
I, [2013-10-03T14:35:08.992709 #7677] INFO -- : Parameters: {"company_name"=>"Acme", "company"=>{"company_name"=>"Acme"}}
W, [2013-10-03T14:35:08.992974 #7677] WARN -- : Can't verify CSRF token authenticity
I, [2013-10-03T14:35:08.993194 #7677] INFO -- : Completed 422 Unprocessable Entity in 0ms
F, [2013-10-03T14:35:08.995424 #7677] FATAL -- :
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:163:in `handle_unverified_request'
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:170:in `handle_unverified_request'
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:177:in `verify_authenticity_token'
activesupport (4.0.0) lib/active_support/callbacks.rb:377:in `_run__389768266939471454__process_action__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument'
...
有趣的是,尽管我遵循文档中的帖子示例,但参数不正确。(发布和放置都在日志中给我同样的错误。)