2013-05-17 20 views
0

我已经写了一小段,它发送一个GET请求来解析HTTP响应时,如果有一个200 OK响应(AUTH时成功)执行AUTH和检查。现在,我通过这个特定的GET请求看到的一件事是,无论auth是否成功,响应始终为200。如何使用Ruby

的DIFF是在HTTP响应。那就是当auth失败时,第一个响应是200 OK,就像auth成功时一样,在这之后还有第二步。该页面再次被重定向到登录页面。

我只是试图让一个快速的脚本,可以检查我的登录用户,并通过我的web应用程序,并告诉我这权威性地通过了,哪些没有。

我应该如何检查呢?示例代码是这样的:

def funcA(u, p) 
    print_A("#{ip} - '#{u}' : '#{p}' - Pass") 
end   

def try_login(u, p) 
    path = '/index.php?uuser=#{u}&ppass=#{p}' 
    r = send_request_raw({ 
    'URI' => 'path', 
    'method' => 'GET' 
    }) 

    if (r and r.code.to_i == 200) 
    check = true 
    end 
    if check == true 
    funcA(u, p) 
    else 
    out = "#{ip} - '#{u} - Fail" 
    print_B(out) 
    end 
    return check, r 
end 
end 

更新: 我也尝试添加了匹配“成功/失败”关键字的HTTP响应未来新的检查。它也没有工作。但我现在注意到,回来的回应似乎是另一种形式。 Content-Type的回应是text/html; charset = utf-8。而且我没有做任何解析,所以它失败了。

成功响应是形式:

{"param1":1,"param2"="Auth Success","menu":0,"userdesc":"My User","user":"uuser","pass":"ppass","check":"success"} 

失败的反应是形式:

{"param1":-1,"param2"="Auth Fail","check":"fail"} 

所以现在我需要如何解析这个响应一些指点。

很多谢谢。

+0

你说的是http basic auth?也许你应该展示一些代码。 – pguardiario

+0

增加了我的代码片断.. – Sunshine

+0

请注意,['和'/'或'*不是*一样''&& /''||在红宝石(http://devblog.avdi.org/2010/ 8月2日/使用和 - 和 - 或 - 在旁注/)。当布尔逻辑是意图时,只有后者应该被使用。 –

回答

0

我这样做与"net/http"

require 'net/http' 

uri = URI(url) 
connection = Net::HTTP.start(uri.host, uri.port) 
@response = Net::HTTP.get_response(URI(url)) 
@httpStatusCode = @response.code 
connection.finish 
+0

添加我的代码片段.. – Sunshine

+0

嗨扎克,问题是,正如我上面提到的,有效和无效登录尝试给出相同的200响应。之后,如果认证失败,页面会重定向到登录屏幕。 – Sunshine

0

如果有从200重定向,那么它必须是一个JavaScript或元重定向。所以请在响应主体中寻找。

+0

我检查了任何重定向脚本的响应源代码。没有... – Sunshine

+0

那么你如何解释重定向? – pguardiario

+0

好吧我不确定重定向脚本在哪里。但是,这将如何发生/在这里帮助?我送一个GET请求做身份验证,并收到AUTH通过/失败的响应... – Sunshine