如何使用curl将cookie传递给Sinatra应用程序?

时间:2010-04-22 17:20:48

标签: session cookies curl sinatra rack

我正在使用本教程http://rubylearning.com/blog/2009/09/30/cookie-based-sessions-in-sinatra/中标题为“A Sighly Bigger Example”的示例中的代码来弄清楚如何将cookie发送到Sinatra应用程序,但我无法弄清楚如何设置正确的价值

当我在应用程序中将名称设置为“brandon”时,它会创建一个值为BAh7BiIJdXNlciIMYnJhbmRvbg%3D%3D%0A的Cookie,该值是值BAh7BiIJdXNlciIMYnJhbmRvbg== <的网址编码(http://ostermiller.org/calc/encode.html) / p>

使用该值,我可以正确地向应用程序发送cookie

curl -b "rack.session=BAh7BiIJdXNlciIMYnJhbmRvbg==" localhost:9393

我很确定该值是会话的ruby哈希的base64编码,因为文档(http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html)说

  

会话是一个Ruby Hash,存储为base64编码的编组数据集:key(默认值:rack.session)。

我认为这意味着我所要做的就是base64编码{"user"=>"brandon"}并在curl命令中使用它。不幸的是,它创建的值不同于BAh7BiIJdXNlciIMYnJhbmRvbg==。接下来我尝试使用base64编码的值并在各种base64解码器在线解码,但这会产生奇怪的字符(盒子符号和其他),所以我不知道如何重新创建值甚至编码它。

所以我的问题是你知道我需要什么字符/格式来获得正确的base64编码和/或你知道使用curl传递值的另一种方法,这样它将注册为Sinatra应用程序的正确cookie ?

1 个答案:

答案 0 :(得分:1)

如果用户名和密码是在登录页面上的表单中输入的,那么cURL可以“提交”以下形式:

curl -d“username = miniape&amp; password = SeCrEt”http://whatever.com/login

如果您想存储返回的cookie,请指定cookie文件:

curl -c cookies.txt -d“username = miniape&amp; password = SeCrEt”http://whatever.com/login

并在以后的请求中使用这些cookie:

curl -b cookies.txt -d“username = miniape&amp; password = SeCrEt”http://whatever.com/login

如果您想同时发送和接收Cookie,请同时执行这两项操作:

curl -b cookies.txt -c cookies.txt -d“username = miniape&amp; password = SeCrEt”http://whatever.com/login

在metafilter上发现了这个