从Rails控制器发送POST请求以进行身份​​验证

时间:2011-04-29 05:48:15

标签: ruby-on-rails ruby http-post session-cookies

我对Ruby和RoR很陌生,并且一直在努力解决问题并且无法实现任何目标。

基本上我正在建立一个“代理”网络服务,它将处理某些请求,并将它们传递给第三方网站。从第三方网站收到的回复是HTML格式,然后将对其进行解析,并给出适当的XML响应。

我需要通过Rails中的控制器发送POST请求以验证用户身份,我正在使用此代码进行操作:

require "net/http"
require "uri"

uri = URI.parse("http://myurl.com/members.cgi")

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({"email_login" => "user@email.com", "password_login" => "password"})
response = http.request(request)

我的问题在于我收到的回复。这个特定的POST请求在成功时(即用户已成功通过身份验证)返回302重定向。这本身不是问题,因为我可以通过获取'location'标头值来跟踪重定向:

redirectLocation = response['location']

我遇到的问题是在使用以下行跟踪重定向时保持身份验证:

redirectResponse = Net::HTTP.get_response(URI.parse(redirectLocation))

这是在重定向之后,但是返回一个显示我未经过身份验证的响应?

我真的不明白为什么会这样。我可以看到有一个身份验证cookie与原始回复一起返回:

response['cookie']

所以最后我的问题是我需要做些什么来让服务器识别我的身份验证状态?以某种方式通过我的第二个请求传递cookie?如果是这样,我该怎么做?

非常感谢你的时间!

罗格

1 个答案:

答案 0 :(得分:1)

是的,你需要设置cookie。我想它可能会给你一些会话ID。您需要传递每个请求。

查看this代码段,了解如何传递您作为新请求回复的Cookie。