使用clj-http客户端自动登录

时间:2011-12-30 21:33:47

标签: clojure

我刚看到这个库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))

然而,似乎不推荐使用lib,它建议您使用clj-http库。我只是想知道是否有人知道如何使用该库复制这种行为?

目前我只是做

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

返回一个将http 302重定向到经过身份验证的页面的cookie,但我不知道如何使用经过身份验证的cookie使客户端遵循此重定向

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

仅供参考我解决了这个问题,

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

答案 1 :(得分:0)

我猜你需要明确使用库中的follow-redirect函数。

相关问题