2011-04-29 86 views
1

我对Ruby和RoR相当陌生,并且一直在努力解决问题,并且没有到任何地方。从Rails控制器发送POST请求进行身份验证

基本上,我正在构建一个“代理”web服务,它将处理某些请求,并将它们传递给第三方网站。从第三方网站收到的回复是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" => "[email protected]", "password_login" => "password"}) 
response = http.request(request) 

我的问题在于对响应我我正在接受。这个特定的POST请求在成功时(即,用户已经成功验证)正在返回302重定向。这本身不是一个问题,因为我可以通过获取“位置”报头值跟随重定向:

redirectLocation = response['location'] 

当我陷入是保持在与下面的行重定向时自己验证:

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

这是继重定向,但回报显示我未通过认证的响应?

我真的不明白为什么会发生这种情况。我可以看到有通过读取返回一个验证cookie与我原来的回应:

response['cookie'] 

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

非常感谢您的时间!

Rog

回答

1

是的,你需要设置cookie。我想这可能会给你一些会话ID。你需要通过每一个请求。

this代码片段为例如如何传递一个cookie,作为您的新请求的回应。

+0

谢谢,但我该怎么做? – Rog 2011-04-29 06:34:57

+0

只是添加了一个例子的链接。它很容易。它的红宝石;) – thekindofme 2011-04-29 06:35:51

+0

感谢堆指向我在正确的方向。 – Rog 2011-04-29 07:57:45