Я пытаюсь написать небольшую задачу/тестовый скрипт rake для RESTful API рельсов. Я использую гем rest-client.
В соответствии с документацией должно работать следующее (с < em>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, похоже, справится с этим, но мне не повезло. Я нормально делаю либо пут, либо пост, но ни один из них не работает, и я не смог найти такие примеры в Интернете. Кто-нибудь смог заставить это работать? Я использую последнюю версию 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'
...
Также интересно отметить, что параметры неверны, хотя я следовал примеру поста из документации. (Post и put оба дают мне одинаковые ошибки в журнале.)
ActionController::InvalidAuthenticityToken
. Но он должен возвращать 401 Unauthorized вместо необрабатываемого объекта. - person usha   schedule 03.10.2013