我用 postman 的时候向登录的接口登录一次后,可以让服务端有类似session[:user_id] = @user.id
的实现。
但是,使用 rest-client 写如下代码:
RestClient.post(url, :mobile => mobile, :password => password) # mobile和password是两个变量
会发现虽然登录后返回了用户资料 json,但实际上 session 并没有保存。。
那该怎么使用 rest-client 来让服务端登录后保存我的 session 呢?
#7 楼 @msl12 研究下文档,里面提到了 cookies http://www.rubydoc.info/github/rest-client/rest-client
我都把问题点出来了,下次自己搜 google。
http://www.justinweiss.com/articles/how-rails-sessions-work/
When you request a webpage, the server can set a cookie when it responds back: Your browser will store those cookies. And until the cookie expires, every time you make a request, your browser will send the cookies back to the server:
http://stackoverflow.com/questions/10758105/difference-between-curl-and-web-browser
Hello,我想您误解了我的意思了,我的意思是 只要正确的配置
,浏览器对 web 的访问
是可以用 curl 实现的
浏览器访问
的本质,就是发送 http 请求
服务器端处理 http 协议,无论你是浏览器请求的还是 curl 请求的抑或是其他请求,只要符合协议规范,都会处理。 curl 可以设置 cookie headers referer 等内容
cookie 是存在浏览器上的。rest-client 可以模拟浏览器请求操作,请求的时候可以带上各种参数,比如 cookie,headers,referer。比如你的登入操作,账号和密码传到服务器,服务器识别后,会生成 cookie 值,这个值一般情况保存在浏览器中,使用 signed 的话就是个加密的字符串。你可以尝试下:先用浏览器进行登入,浏览器会存登入的 cookie 值。然后,再用 rest-client 发起请求,每次都带着这个 cookie,看下是否能获得登入后访问的权限。如果你第一次登入就用 rest-client,服务器生成的 cookie 值是否会没地方保存了,因为 要浏览器作为保存的地方 (其中,浏览器帮我们做了多少事具体我就不知道了),而 rest-client 不是浏览器,他能模拟浏览器的请求操作,而没法做浏览器的存储操作等等。不知道是不是这个原因,有木有浏览器开发的大牛。。。
res = %x[curl #{lurl} -s -c /tmp/cookies -d #{user} -d #{psd} ]
我用 curl 做的,第一次用 -c 保存一下
第二次用 -b 使用上次的 cookies
ares = %x[curl -s -b /tmp/cookies #{aurl}]
这不是最好的方法,但能用