Использование клиента clj-http для автоматизации входа - PullRequest
2 голосов
/ 31 декабря 2011

Я только что видел эту библиотеку https://github.com/technomancy/clojure-http-client с этим фрагментом кода на странице README, что я и собираюсь сделать

(res/with-cookies {}
  (res/post "http://localhost:3000/login" {} {"user" user "password" password})
  (res/get "http://localhost:3000/my-secret-page))

Однако похоже, что библиотекаустарел, и он советует вам использовать библиотеку clj-http.Мне просто интересно, если кто-нибудь знает, как повторить такого рода поведение с помощью этой библиотеки?

В данный момент я просто делаю

(post "<site i want to login to>" {:form-params {:username "<my username>" :password "<my password>"}})

, который возвращает cookie с перенаправлением http 302на аутентифицированную страницу, но я понятия не имею, как заставить клиента следовать этому перенаправлению, используя аутентифицированный cookie

Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

К вашему сведению, я решил,

(defn login [login-url user pass]
  (let [result (client/post "http://my-site.com/login" {:form-params {:username user :password pass}})]
    (when (= (:status result) 302)
      (:cookies result))))

Если вход в систему будет успешным, он вернет карту cookie, которую затем можно будет использовать в последующих запросах при посещении страниц, требующих входа в систему, например,

(when-let [cookies (login "http://my-site.com" "my-user" "my-pass")]
  (client/get "http://my-site.com/user-page" { :cookies cookies }))
 => <html><head><title>Hello my-user!</titl.......
0 голосов
/ 31 декабря 2011

Полагаю, вам нужно явно использовать функцию follow-redirect из библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...