やりたいこと
- APIなどのPOSTでリクエストを投げたときの動作をブラウザではなく、rails console上で確認したい。
手順
- postのリクエストにCSRF対策として、authencity_tokenを含める必要がある
- authencity_tokenをsessionメソッドから生成する
- authencity_tokenを含めてリクエストをPOSTで送信する
$ rails c
app.get 'リクエストを実行するページのURL(ログインページとか検索ページとか)'
token = app.session[:_csrf_token]
=> 'XXXXXXXX'
# or
token = app.response.body.match(/<[^<]+authenticity_token[^>]+value="([^"]+)"[^>]+>/)[1]
=>'XXXXXXXXX'
# rails4の場合
app.post 'リクエストするAPIのURL' , {authencity_token: token, 'data': :data}
Started POST "リクエストするAPIのURL" for 127.0.0.1 at 2016-10-14 11:12:50 +0900
# rails5の場合
app.post 'リクエストするAPIのURL' , params: {authencity_token: token, 'data': :data}
#略
=> 200
200がレスポンスで返ってきたらOK
※ app.get
でページ移動の処理をしないとtoken = nil
になってしまってた。
追記
コメントでrails5の挙動についてアドバイス頂いたので、rails5での挙動についても記載しました。
なお、これを書いた当時はconsole上でhttpリクエスト投げようと思ってましたが、普通に curl
コマンド、もしくは http
コマンドが便利だし、GUIベースで確認するならPostManとか使うほうが色々設定できて便利だと思っています。