0

GET リクエストを送信し、認証を実行し、200 OK 応答があるかどうかを確認する短いスニペットを作成しました (認証が成功した場合)。さて、この特定の GET リクエストで見た 1 つのことは、認証が成功したかどうかに関係なく、応答が常に 200 であることです。

差分は HTTP 応答にあります。つまり、認証が失敗した場合、最初の応答は 200 OK で、認証が成功した場合とまったく同じです。この後、2 番目のステップがあります。ページは再びログイン ページにリダイレクトされます。

ログインユーザーをチェックして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 に答える