我正在尝试使用 curl 创建一个 bash 脚本来登录到一个使用设计并在表单上发布的 Rails 应用程序。
到目前为止,我可以这样做:
#!/bin/bash
curl \
--verbose \
--request GET \
-c cookie \
http://localhost:3000/login > tmpsession
# the ff is a hack to get the authenticity_token from the form
# and join it with the file 'data' for posting with curl
csrf_token=`cat tmpsession|grep 'authenticity_token'|grep -o 'authenticity_token.*' |grep -o 'value=.*' |cut -d ' ' -f1|cut -d \" -f2`
echo "authenticity_token=" > data ; echo $csrf_token >> data; echo "&" >> data; cat samplepost >> data
curl \
--verbose \
-b cookie \
--request POST \
--data "user[username=admin&user[password]=xxpasswordxx&authenticity_token=$csrf_token" \
http://localhost:3000/login
此时,我被重定向到通过redirect_if_not_admin
before_filter的管理/索引页面
但是,当我尝试这样做时:
curl \
--verbose \
-b cookie \
--request POST \
--data @data
http://localhost:3000/admin/posts
我Filter chain halted as :redirect_if_not_admin rendered or redirected
在日志中得到一个告诉我当前没有用户登录的信息。
我在想 curl 将会话存储在 cookie 中,并将其传递给服务器。有没有办法用 curl 保持这样的会话?