如何使用Ruby解析HTTP响应

时间:2013-05-17 23:49:41

标签: ruby http

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

差异在HTTP响应中。那是当auth失败时,第一个响应是200 OK,就像auth成功时一样,然后再进行第二步。该页面再次被重定向到登录页面。

我只是想制作一个快速的脚本,可以检查我的登录用户并传递我的网络应用程序并告诉我哪个auth通过,哪个没有。

我该如何检查?示例代码如下:

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"}

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

非常感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果有来自200的重定向,那么它必须是javascript或元重定向。所以只需在响应主体中查找。