KRL: получение заголовка "location" из http: post () - PullRequest
2 голосов
/ 15 июня 2011

Я отправляю запрос HTTP POST на URL.Он отправляет обратно нужную мне информацию в заголовке location ответа.Как мне получить этот заголовок?Я пробовал следующий код, и он, кажется, не работает:

В блоке действия правила, которое использует действие http:post():

http:post("https://cas.byu.edu/cas/v1/tickets/")
  with params = {"username": netid, "password": password}
  and autoraise = "gottgt"
  and response_headers = ["location"];

Правило, которое обрабатываетсобытие http:

rule got_tgt {
    select when http post label "gottgt"
    pre {
        content = event:param("content");
        location = event:param("location");
    }
    {
        notify("CAS Login", "Got back the POST response (#{location}): #{content}") with sticky=true;
    }
}

Однако переменная location всегда пуста.Как мне сообщить KRL, что мне нужен заголовок location, и как я могу получить его из ответа?

1 Ответ

2 голосов
/ 15 июня 2011

Несмотря на то, что я не могу проверить вашу конкретную конечную точку, я создал пример приложения, которое вы найдете полезным при отладке этой проблемы.

Обратите внимание, что я автоматически поднимаю ответ и использую setting синтаксис для поднятия событий.Обычно вы не сделаете и того, и другого, но это осветит разницу.При явном повышении результата вы получите полный ответ.В моем примере вы можете видеть, что заголовок server возвращается и отображается также в правиле с автоподнятием.

Ваш код выглядит правильно, но я бы сделал явное повышение и проверил ответ, как я показываю здесь, и это поможет вам точно знать, что вам доступно.

Запустите это приложение здесь: http://ktest.heroku.com/a8x183

и код здесь:

ruleset a8x183 {
    meta {
        name "Testing Response Headers"
        description <<

        >>
        author "Sam Curren"
        logging off
    }

    dispatch {
        // domain "example.com"
    }

    global {
        bodylog = defaction(title, msg){
            {
            append("body", "<h1>#{title}</h1>");
            append("body", "<div>#{msg}</div>");
            }
        };
    }

    rule first_rule {
        select when pageview ".*" setting ()
        pre {

        }
        http:post("http://httpbin.org/post") setting (res)
            with params = {"username":"yahuda","password":"metalcages"}
            and autoraise = "kickstand"
            and response_headers = ["server"];
        fired {
            raise explicit event "moon" with res = res;   
        }
    }

    rule exp {
        select when explicit moon 
        pre {
            res = event:param("res");
            res_s = res.encode();
        }
        bodylog("explicit raise: full response", res_s);
    }

    rule response {
        select when http post label "kickstand"
        pre {
            server_header = event:param("server");
            content = event:param("content");
        }
        {
            bodylog("autoraise: content", content);
            bodylog("autoraise: server_header", server_header);
}
    }
}
...