新手问题 rest-client 向登录接口发送 post 请求后服务端不保存 session?

msl12 · 2016年07月27日 · 最后由 yakjuly 回复于 2016年07月28日 · 3752 次阅读

我用 postman 的时候向登录的接口登录一次后,可以让服务端有类似session[:user_id] = @user.id的实现。

但是,使用 rest-client 写如下代码:

RestClient.post(url, :mobile => mobile, :password => password) # mobile和password是两个变量

会发现虽然登录后返回了用户资料 json,但实际上 session 并没有保存。。

那该怎么使用 rest-client 来让服务端登录后保存我的 session 呢?

rails 默认的 session 机制是保存在 cookie 里面的,并不是存在服务器上

那怎么让 rest-client 存这个 cookie 呢? 😯

> a.cookies
 => {"rack.session" => ...}

这个 session 不是吧?

  1. 你知道 session 怎么工作吗?
  2. 你知道 RestClient 和浏览器访问的区别吗?
  3. RestClient 第二次发请求,和浏览器第二次打开一个页面区别在哪里?
  4. Postman 发请求是不是相当于浏览器发请求? 搞懂了就知道你的答案了。

#4 楼 @yakjuly 所以用 rest-client 无法达到保存 session 的目的?

#5 楼 @msl12 客户端只保存 cookies,客户端不懂啥叫 session。

#6 楼 @chareice 那么,rest-client 无法在本地保存 cookies,是么? 😐

#4 楼 @yakjuly 我以为 restclient 就是 curl 的一个高级封装, curl 本身可以完成浏览器的各种操作吧,包括 session cookie referer 等,只需要修改相应的配置就可以了。 当然默认情况下和浏览器是有区别的。或者我理解的不正确?

postman 和 curl 应该是一个道理?

@jicheng1014 @msl12

我都把问题点出来了,下次自己搜 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

#10 楼 @yakjuly

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 不是浏览器,他能模拟浏览器的请求操作,而没法做浏览器的存储操作等等。不知道是不是这个原因,有木有浏览器开发的大牛。。。

#11 楼 @pathbox 我也是差不多这样想的,就是好奇能不能做存储的动作 😬

#13 楼 @msl12 可以自己写逻辑把 session 存 redis 或 mysql 中。你想让 rest-client 帮你存 cookie,看看文档有木有讲,我觉得不太可能

res = %x[curl #{lurl} -s -c /tmp/cookies -d #{user} -d #{psd} ]

我用 curl 做的,第一次用 -c 保存一下

第二次用 -b 使用上次的 cookies

ares = %x[curl -s -b /tmp/cookies #{aurl}]

这不是最好的方法,但能用

#15 楼 @nil 你这名字就能测注入 😂

#11 楼 @jicheng1014 你说的没错,楼主应该是没有考虑 cookie 这一套

msl12 关闭了讨论 09月18日 10:24
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册