0

我写了一个简短的片段,它发送一个 GET 请求,执行身份验证并检查是否有 200 OK 响应(当身份验证成功时)。现在,我在这个特定的 GET 请求中看到的一件事是,无论身份验证是否成功,响应总是 200。

差异在 HTTP 响应中。也就是认证失败的时候,第一个响应是200 OK,和认证成功的时候一样,之后就是第二步。该页面再次被重定向到登录页面。

我只是想制作一个快速脚本,它可以检查我的登录用户并传递我的 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"}

所以现在我需要一些关于如何解析这个响应的指示。

非常感谢。

4

2 回答 2

0

如果有来自 200 的重定向,那么它必须是 javascript 或元重定向。因此,只需在响应正文中查找即可。

于 2013-05-18T00:57:56.360 回答
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
于 2013-05-17T23:57:28.293 回答