Ruby プログラムから新しい人物を作成しようとしています。このタスクでは、rest-client を使用します。
require 'rest_client'
require 'nokogiri'
page = Nokogiri::HTML(RestClient.get("localhost:3000/people/new"))
token = page.css("input[name='authenticity_token']")
token2 = token[0]["value"]
RestClient.post 'localhost:3000/people', :authenticity_token => token2, :person => {:name => 'Joseph'}, :commit => 'Create Person'
最初に people/new に get リクエストを送信し、nokogiri を使用して非表示の入力から Authenticity_token を読み取ることで、authenticity_token を取得しようとしました。
<input name="authenticity_token" type="hidden" value="JKrWBtxcloak2DHucqHtTFZC6W7QyDJoJQI3QtCFBy8=">
次に、このauthenticity_tokenを使用して投稿リクエストを作成します。上記をご覧ください。
しかし、どういうわけかこれはうまくいきません.私のレールコンソールは、トークンの信頼性がないと言っています:
Started POST "/people" for 127.0.0.1 at 2013-09-09 09:33:27 +0200
Processing by PeopleController#create as XML
Parameters: {"authenticity_token"=>"WnbZY/060H5IMGdpVMyRKwG/CHKNAEGafOV3i1f8Kj
o=", "person"=>{"name"=>"Joseph"}, "commit"=>"Create Person"}
WARNING: Can't verify CSRF token authenticity
偽の認証トークンを使用しているのでしょうか、それとも何が間違っているのでしょうか?
アップデート::::::::::::::::::::::::::::::::::::::::::::::::: :::
set-cookie を取得するための新しいプログラムを作成しました。
require 'rest_client'
response = RestClient.get("localhost:3000/people/new")
puts response.headers
出力
{:content_type=>"text/html; charset=utf-8", :x_ua_compatible=>"IE=Edge", :etag=>
"\"aeb1c39272f16046456cf66c53a9ee7c\"", :cache_control=>"max-age=0, private, mus
t-revalidate", :x_request_id=>"87d76be013cb156113b15c11875edeaa", :x_runtime=>"0
.025002", :server=>"WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)", :date=>"Mon, 09 Sep
2013 09:08:36 GMT", :content_length=>"1407", :connection=>"Keep-Alive", :set_coo
kie=>["_rumba_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJTBjMWI3YTkzZjI0MjZmZmE4Zm
QwMzI4ZGE1NmRhNWU3BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMWxqemZjUUMyNG81T2diZjFRN2ZNZn
ljMFNmalp4NUtLcXZhcnVocWcxQWc9BjsARg%3D%3D--3439371de3cba7c2352eace74051858dcc13
7333; path=/; HttpOnly"]}