आपने अपनी निर्भरताओं के संस्करण निर्दिष्ट नहीं किए हैं। मैं निम्नलिखित के साथ अपने कोड का परीक्षण किया है:
मेरा उत्तर के अंत में
[org.clojure/clojure "1.8.0"]
[clj-webdriver "0.7.2"]
[org.seleniumhq.selenium/selenium-server "3.0.0-beta4"]
Firefox 48.0.2
Mac OS Sierra 10.12
आरईपीएल सत्र से पता चलता है कि यह काम करता है (मैं https://httpbin.org/
का इस्तेमाल किया है यह परीक्षण करने के लिए)।
मैं निम्नलिखित की जाँच करेगा के निवारण के लिए:
- प्रिंट क्या कुकीज़ ड्राइवर से लौट रहे थे या ब्राउज़र कंसोल में जाँच देखने के लिए अगर आपके लॉगिन पृष्ठ के प्रतिसाद सही कुकीज़
- प्रिंट सेट करने के लिए हेडर हैं कि आपके http-client cookiestore में
- आपके लॉगिन-सुरक्षित पृष्ठ पर वास्तविक अनुरोध भेजने के लिए http-client (या अपने सर्वर में डीबग लॉगिंग सक्षम करने के लिए) डीबग लॉगिंग सक्षम करें और यदि अनुरोध में लॉगिन पृष्ठ द्वारा कुकीज़ सेट की गई है।
आरईपीएल सत्र में आप देख सकते हैं कि सेलेनियम से लौटाई गई कुकीज़ में पहले अनुरोध द्वारा कुकीज़ सेट की गई हैं। वे http-client कुकी स्टोर में भी मौजूद हैं और वे https://httpbin.org/cookies
URL द्वारा ठीक से लौट आए हैं जो इंगित करते हैं कि उन्हें http-client द्वारा अनुरोध के साथ भेजा गया है।
(require '[clj-webdriver.taxi :as taxi])
(require '[clj-http.client :as client])
(require '[clj-http.cookies :as cookies])
(require '[clojure.pprint :refer [pprint]])
(import java.text.SimpleDateFormat)
(import org.apache.http.impl.cookie.BasicClientCookie)
(defn convert-selemium-cookie-to-httpclient-cookie [x]
(let [sf (SimpleDateFormat. "yyyy-MM-dd")
fake-date (.parse sf "2018-08-06")]
(doto
(BasicClientCookie. (:name x) (:value x))
(.setDomain (:domain x))
(.setPath (:path x))
(.setExpiryDate (if (:expiry x) (:expiry x) fake-date))
(.setSecure (:secure? x)))))
(defn add-selenium-cookies-to-httpclient-cookie-store [x]
(let [cs (cookies/cookie-store)
http-cookies (map convert-selemium-cookie-to-httpclient-cookie x)]
(mapv (fn [x] (.addCookie cs x)) http-cookies) cs))
(def cookie-name (str "c1" (System/currentTimeMillis)))
(def cookie-value (str "v1" (System/currentTimeMillis)))
(pprint cookie-name)
;; "c11475935066134"
(pprint cookie-value)
;; "v11475935066814"
(def driver (taxi/new-driver {:browser :firefox}))
(taxi/to driver (format "https://httpbin.org/cookies/set?%s=%s" cookie-name cookie-value))
(def selenium-cookies (taxi/cookies driver))
(pprint selenium-cookies)
;; #{{:cookie
;; #object[org.openqa.selenium.Cookie 0x4dc96ce8 "c11475935066134=v11475935066814; path=/; domain=httpbin.org"],
;; :name "c11475935066134",
;; :value "v11475935066814",
;; :path "/",
;; :expiry nil,
;; :domain "httpbin.org",
;; :secure? false}}
(def http-client-cookie-store (add-selenium-cookies-to-httpclient-cookie-store selenium-cookies))
(pprint http-client-cookie-store)
;; #object[org.apache.http.impl.client.BasicCookieStore 0x6dfa86f5 "[[version: 0][name: c11475935066134][value: v11475935066814][domain: httpbin.org][path: /][expiry: Mon Aug 06 00:00:00 CEST 2018]]"]
(def http-client-response
(client/get
"https://httpbin.org/cookies"
{:cookie-store http-client-cookie-store}))
(pprint http-client-response)
;; {:status 200,
;; :headers
;; {"Server" "nginx",
;; "Date" "Sat, 08 Oct 2016 13:58:01 GMT",
;; "Content-Type" "application/json",
;; "Content-Length" "64",
;; "Connection" "close",
;; "Access-Control-Allow-Origin" "*",
;; "Access-Control-Allow-Credentials" "true"},
;; :body
;; "{\n \"cookies\": {\n \"c11475935066134\": \"v11475935066814\"\n }\n}\n",
;; :request-time 1001,
;; :trace-redirects ["https://httpbin.org/cookies"],
;; :orig-content-encoding nil}
स्रोत
2016-10-08 09:34:37
मैं अजगर के बजाय क्लोजर का उपयोग कर रहा हूं। पायथन संस्करण के लिए, मैं इसे पहले से ही बना देता हूं। –