2011-12-30 3 views
2

Я только что видел эту библиотеку https://github.com/technomancy/clojure-http-client с этим фрагментом кода на странице README, который является то, что я ищу, чтобы сделатьИспользование CLJ-HTTP-клиент для автоматизации Логин

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

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

На данный момент я просто

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

который возвращает печенье, которое имеет HTTP 302 редирект на аутентичной страницу, но я понятия не имею, как сделать клиент следовать переадресации с использованием проверенного куки

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

ответ

4

FYI Я решил это,

(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)))) 

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

(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

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

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