2013-05-18 3 views
-1

Я пытаюсь написать короткий сценарий для проверки подлинности HTTP с использованием запроса GETЗастрял с проверкой подлинности HTTP GET в Ruby

Это делает запрос GET.

def try_login(u, p) 
     path1 = '/index.php' 
     path2 = '?uuser=#{myuser}&ppass=#{mypass}' 
     r = send_request_raw({ 
     'URI' => "#{path1}#{path2}", 
     'method' => 'GET' 
     }) 
    ...continued... 

Но этот код не работает, потому что ошибка говорит:

неопределенными локальная переменная или метод `MyUser»

-> В принципе я пытаюсь отправить один (1) GET с параметрами входа, а приложение отвечает конкретными данными. И я не знаю, как поставить заполнители для user и pass в этом запросе GET.

...

Далее, я проверяю ответ HTTP. Ответ приходит как JSON мимики, как это:

ответ Success

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

Сбой ответа

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

-> Как я могу проверить тело ответа на такого рода данных.

Я пробовал весь день сейчас, но полностью застрял. Пожалуйста посоветуй.

Редактировать: Я не понимаю, почему кто-то проголосовал за этот вопрос, говоря немного о каких-либо исследованиях с моей стороны. До вчерашнего утра у меня было абсолютно нулевое представление о рубиновом коде &, работающем с ним. И затем я провел много часов, глядя на множество разных примеров, создав свой сценарий и протестировав его. Когда он все еще не работал, я задал свой вопрос здесь. Пожалуйста, если вы все еще хотите понизить голос, сделайте это, пожалуйста, по крайней мере, поделитесь некоторыми указателями, чтобы решить эту проблему.

+0

Почему вы не можете просто сказать if (r ['param2'] == 'Auth Fail') ...? - если вы разобрали json. – xaxxon

+0

Вы спрашиваете, как разбирать json? Кроме того, это не проверка подлинности HTTP. – pguardiario

+0

Да, у меня есть 2 вопроса. Во-первых, как отправить запрос GET с помощью заполнителей имен пользователей и паролей, чтобы я мог в итоге выполнить цикл через пользователя, передать значения. Во-вторых, когда я получаю ответ json, как я могу разобрать, чтобы найти ключевое слово pass/fail. – Sunshine

ответ

0
def try_login(u, p) 
    path1 = '/index.php' 
    path2 = '?uuser=#{myuser}&ppass=#{mypass}' 
    r = send_request_raw({ 
    'URI' => "#{path1}#{path2}", 
    'method' => 'GET' 
    }) 
...continued... 

Должно быть:

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

Для разбора JSON в Ruby, я бы порекомендовал вам взглянуть на this ответ на другой вопрос.

Редактировать: Причина try_login(u, p) не работает так, как и следовало ожидать, потому что Руби не делает интерполяцию строки для одинарных кавычек (') строк. Кроме того, myuser и mypass не являются правильными переменными.

+0

Спасибо за ответ @rtcherry. Но я не следую. Вы имеете в виду, когда я делаю «URI» => «# {path1} # {path2}», это действие не поддерживается Ruby? Если это так, как я могу достичь этого любым другим способом ...? – Sunshine

+0

Кроме того, переменные, myuser и mypass показаны здесь только для ясности. Фактический код имеет u & p, как вы указали .. Thanx! – Sunshine

+0

@Sunshine Давайте скажем 'u = 'test_user'' и' p =' test_password''. ''? uuser = # {u} & ppass = # {p} ''даст вам строку'? uuser = # {u} & ppass = # {p} ', но' '? uuser = # {u} & ppass = # {p} "' даст вам строку '? uuser = test_user & ppass = test_password'. – rtcherry

Смежные вопросы