दिलचस्प पोस्ट
पायथन: एक वेरिएबल पर स्ट्रिंग असाइन करने के लिए वार्स () का उपयोग करना कोणीय 2 आंतरिक एचटीएमएल (क्लिक) बाइंडिंग सबमिट करने से पहले ऐप के लिए iTunes लिंक प्राप्त करें एक कस्टम सॉर्टिंग ऑर्डर के जरिये ऑरेक्ट्स का एक अर्रे लिस्ट करना प्रोग्रामिंग के अंत में प्रोग्रामिंग एक सी ++ प्रोग्राम में //! क्यूटी सोर्स कोड में मेमोरीस्ट्रीम पीएनजी, जीआईएफ से WPF बिटमैप इमेज बनाना मैं अपने वेबकिट-आधारित अनुप्रयोग में स्थानीय संग्रहण कैसे सक्षम करूं? नाम XAML में नेमस्पेस त्रुटि में मौजूद नहीं है सरणी से अंतिम आइटम निकालें डब्लूसीएफ में क्यों अधिभार की अनुमति नहीं है? त्रुटि: 'macosx10.8' के लिए एसडीके पथ को हल नहीं किया जा सका क्या "फेंक" और "फेंक एक्स" के बीच अंतर है? पायथन में इंडेक्स का उपयोग करके पीछे की ओर लूप? xpath में केस-असंवेदनशील मिलान?

HttpURLConnection (java.net.CookieManager) से WebView (android.webkit.CookieManager) से कुकीज़ पास करें

मैंने इस बारे में जवाब देखा है कि यह कैसे पुराने DefaultHttpClient साथ काम करना चाहिए, लेकिन HttpURLConnection लिए कोई अच्छा उदाहरण नहीं है

मैं एक वेब अनुप्रयोग के लिए अनुरोध करने के लिए HttpURLConnection का उपयोग कर रहा हूँ। मेरे एंड्रॉइड एप्लिकेशन की शुरुआत में, मैं कुकी कुकीज़ से स्वचालित रूप से निपटने के लिए कुकी CookieHandler.setDefault(new CookieManager()) उपयोग करता CookieHandler.setDefault(new CookieManager()) , और यह ठीक काम कर रहा है।

लॉगिन के बाद कुछ बिंदु पर, मैं HttpURLConnection साथ दृश्यों के पीछे डेटा डाउनलोड करने के बजाय वेब अनुप्रयोग से वेब पेज से लाइव पेज दिखाना चाहता HttpURLConnection । हालांकि, मैं उसी सत्र का उपयोग करना चाहता हूं जो मैंने पहले स्थापित किया था ताकि उपयोगकर्ता को फिर से प्रवेश करने से रोक सकें।

मैं कुकीज़ को java.net.CookieManager से कैसे प्रतिलिपित कर सकता java.net.CookieManager HttpURLConnection को HttpURLConnection द्वारा HttpURLConnection को HttpURLConnection द्वारा उपयोग किया जाता है ताकि मैं सत्र को साझा कर HttpURLConnection ?

Solutions Collecting From Web of "HttpURLConnection (java.net.CookieManager) से WebView (android.webkit.CookieManager) से कुकीज़ पास करें"

मैं आपकी समस्या के लिए एक पूरी तरह से अलग दृष्टिकोण का सुझाव देना चाहूंगा कुकीज़ को एक स्थान से दूसरे (मैन्युअल सिंक) पर कॉपी करने के बजाय, हम HttpURL कनेक्शन बनाते हैं और वेबविज़ उसी कुकी संग्रहण का उपयोग करते हैं।

यह सिंक के लिए पूरी तरह से समाप्त कर देता है उनमें से किसी एक में अपडेट की गई किसी भी कुकी को तुरंत और स्वचालित रूप से दूसरे में दिखाई देगा।

ऐसा करने के लिए, java.net.CookieManager का अपना स्वयं का कार्यान्वयन बनाएं जो वेबव्यू के सभी अनुरोधों को 'वेबकिट एंड्रॉइड.वेबकिट.कुकी प्रबंधक'

कार्यान्वयन:

 import java.io.IOException; import java.net.CookieManager; import java.net.CookiePolicy; import java.net.CookieStore; import java.net.URI; import java.util.Arrays; import java.util.List; import java.util.Map; public class WebkitCookieManagerProxy extends CookieManager { private android.webkit.CookieManager webkitCookieManager; public WebkitCookieManagerProxy() { this(null, null); } WebkitCookieManagerProxy(CookieStore store, CookiePolicy cookiePolicy) { super(null, cookiePolicy); this.webkitCookieManager = android.webkit.CookieManager.getInstance(); } @Override public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException { // make sure our args are valid if ((uri == null) || (responseHeaders == null)) return; // save our url once String url = uri.toString(); // go over the headers for (String headerKey : responseHeaders.keySet()) { // ignore headers which aren't cookie related if ((headerKey == null) || !(headerKey.equalsIgnoreCase("Set-Cookie2") || headerKey.equalsIgnoreCase("Set-Cookie"))) continue; // process each of the headers for (String headerValue : responseHeaders.get(headerKey)) { this.webkitCookieManager.setCookie(url, headerValue); } } } @Override public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) throws IOException { // make sure our args are valid if ((uri == null) || (requestHeaders == null)) throw new IllegalArgumentException("Argument is null"); // save our url once String url = uri.toString(); // prepare our response Map<String, List<String>> res = new java.util.HashMap<String, List<String>>(); // get the cookie String cookie = this.webkitCookieManager.getCookie(url); // return it if (cookie != null) res.put("Cookie", Arrays.asList(cookie)); return res; } @Override public CookieStore getCookieStore() { // we don't want anyone to work with this cookie store directly throw new UnsupportedOperationException(); } } 

और अंत में इसे अपने आवेदन आरंभीकरण पर कर के द्वारा उपयोग करें:

 android.webkit.CookieSyncManager.createInstance(appContext); // unrelated, just make sure cookies are generally allowed android.webkit.CookieManager.getInstance().setAcceptCookie(true); // magic starts here WebkitCookieManagerProxy coreCookieManager = new WebkitCookieManagerProxy(null, java.net.CookiePolicy.ACCEPT_ALL); java.net.CookieHandler.setDefault(coreCookieManager); 

DefaultHttpClient की तुलना में, कुछ अतिरिक्त कदम हैं। प्रमुख अंतर HTTPURLConnection में मौजूदा कुकीज़ का HTTPURLConnection :

  1. CookieHandler.getDefault() कॉल करें और परिणाम को java.net.CookieManager पर java.net.CookieManager
  2. कुकी प्रबंधक के साथ, कुकी स्टोर तक पहुंचने के लिए getCookieStore() को कॉल करें।
  3. कुकी स्टोर के साथ, दिए गए URI लिए कुकीज़ की सूची तक पहुंचने के लिए get() करें।

यहां एक पूर्ण उदाहरण है:

 @Override protected void onCreate(Bundle savedInstanceState) { // Get cookie manager for WebView // This must occur before setContentView() instantiates your WebView android.webkit.CookieSyncManager webCookieSync = CookieSyncManager.createInstance(this); android.webkit.CookieManager webCookieManager = CookieManager.getInstance(); webCookieManager.setAcceptCookie(true); // Get cookie manager for HttpURLConnection java.net.CookieStore rawCookieStore = ((java.net.CookieManager) CookieHandler.getDefault()).getCookieStore(); // Construct URI java.net.URI baseUri = null; try { baseUri = new URI("http://www.example.com"); } catch (URISyntaxException e) { // Handle invalid URI ... } // Copy cookies from HttpURLConnection to WebView List<HttpCookie> cookies = rawCookieStore.get(baseUri); String url = baseUri.toString(); for (HttpCookie cookie : cookies) { String setCookie = new StringBuilder(cookie.toString()) .append("; domain=").append(cookie.getDomain()) .append("; path=").append(cookie.getPath()) .toString(); webCookieManager.setCookie(url, setCookie); } // Continue with onCreate ... } 

मैरिक ने मेरी सारी कुकी समस्याएं इस लाइन के साथ क्रिएट में हल कर लीं:

CookieHandler.setDefault(new CookieManager());

मुझे एक ही समस्या थी, और यह मेरा समाधान है:

बस लॉगिन के बाद (यह महत्वपूर्ण है क्योंकि पहले, आपके पास अभी तक कुकी नहीं है) httpurlconnection POST (GetResponseCode के बाद) का उपयोग करते हुए, मैं करता हूं:

  responseCode = connexion.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { final String COOKIES_HEADER = "Set-Cookie"; cookie = connexion.getHeaderField(COOKIES_HEADER); ... } 

(जहां कुकी मेरी कक्षा में एक सार्वजनिक स्ट्रिंग है)

और वेबव्यू गतिविधि में, जहां मैं WebView का उपयोग कर सर्वर से एक वेब पेज प्रदर्शित करना चाहता हूं, मैं करता हूं:

  String url = "http://toto.com/titi.html"; // the url of the page you want to display CookieSyncManager.createInstance(getActivity()); CookieSyncManager.getInstance().startSync(); android.webkit.CookieManager cookieManager = android.webkit.CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.removeSessionCookie(); cookieManager.setCookie(url, cookie); CookieSyncManager.getInstance().sync(); 

जैसा कि मेरी वेबव्यू एक टुकड़े में है, मुझे प्रसंग के लिए getActivity () का उपयोग करना था, मुझे एंड्रॉइड। वेबबॉक्स भी निर्दिष्ट करना था। कुकी मैनेजर से पहले अन्यथा इसे हल नहीं किया जा सकता (एंड्रॉइड। वेबकैट कुकी प्रबंधक के बदले जावावायर आयात करें)।

कुकी ऊपर की तरह एक स्ट्रिंग है (मेरे टुकड़े में, मुझे इसका उपयोग करके इसे पुनर्प्राप्त करना पड़ा:

  cookie = getArguments().getString(COOKIE); 

और मेरे मुख्य गतिविधि में, मैं इसे भेजता हूं:

  Bundle arg = new Bundle(); arg.putString(Fragment_Cameras.COOKIE, cookie); fragment.setArguments(arg); 

मैं हॉप यह मदद कर सकता है!