2011-10-11 16 views
5
public boolean isGood(String path) 
{ 
    if (p != path) 
    { 
     good = false; 
    } 

    if (good) 
    { 
     try 
     { 
      Connection connection = Jsoup.connect(path); 
      Map<String, String> cookys = Jsoup.connect(path).response().cookies(); 

      if (cookys != cookies) 
       cookies = cookys; 

      for (Entry<String, String> cookie : cookies.entrySet()) 
      { 
       connection.cookie(cookie.getKey(), cookie.getValue()); 
      } 

      Doc = connection.get(); 
      good = true; 
     } 
     catch (Exception e) 
     { 
      rstring = e.getMessage().toString(); 
      good = false; 
     } 
    } 
    else 
    { 
     try 
     { 
      Response response = Jsoup.connect(path).execute(); 
      cookies = response.cookies(); 
      Doc = response.parse(); 
      good = true; 
     } 
     catch (Exception e) 
     { 
      rstring = e.getMessage().toString(); 
      good = false; 
     } 
    }  
    return good; 
} 

यह विधि सही नहीं है। जो मैं समझने की कोशिश कर रहा हूं वह यह जानने का एक तरीका है कि कुकीज़ क्या मौजूदगी, कुकी परिवर्तनों को संभालने और सत्रों को बनाए रखने में सक्षम हो।jsoup के साथ परिवर्तनीय कुकीज़ और सत्र कैसे बनाए रखें?

मैं अपने सरल मशीन फोरम के लिए एक ऐप लिख रहा हूं, और यह कुछ कुकी व्यवहार के लिए क्लिक करते समय अपनी कुकी कॉन्फ़िगरेशन को बदलता है।

लेकिन यदि ऐप मेरी साइट के लिए अच्छा करता है, तो मैं अन्य मंचों के लिए दूसरों के लिए एक संस्करण प्रकाशित करने जा रहा था।

मुझे पता है कि मैं सही दिशा में जा रहा हूं, लेकिन तर्क मेरे बट को लात मारने जैसा है।

किसी भी सलाह की सराहना की जाएगी।

+0

BalusC की टिप्पणी के अलावा मिलता है, यह संभावना नहीं है कि 'पी! = पथ 'चीज जो आप वास्तव में मतलब है, हालांकि यह * संभव * है। –

उत्तर

12

यह कोड बहुत भ्रमित है। प्रवाह अजीब है और अपवाद हैंडलिंग खराब है। ऑब्जेक्ट संदर्भ तुलना if (p != path) और if (cookys != cookies) जैसी कोई समझ नहीं है। ऑब्जेक्ट की सामग्री की तुलना करने के लिए आपको इसके बजाय equals() विधि का उपयोग करने की आवश्यकता है।

बिंदु पर, मैं समझता हूं कि आप उसी डोमेन पर बाद के Jsoup अनुरोधों के समूह में कुकीज़ को बनाए रखना चाहते हैं। उस मामले में, आप करने की जरूरत है मूल रूप से निम्नलिखित प्रवाह पालन:

Map<String, String> cookies = new HashMap<String, String>(); 

// First request. 
Connection connection1 = Jsoup.connect(url1); 
for (Entry<String, String> cookie : cookies.entrySet()) { 
    connection1.cookie(cookie.getKey(), cookie.getValue()); 
} 
Response response1 = connection1.execute(); 
cookies.putAll(response1.cookies()); 
Document document1 = response1.parse(); 
// ... 

// Second request. 
Connection connection2 = Jsoup.connect(url2); 
for (Entry<String, String> cookie : cookies.entrySet()) { 
    connection2.cookie(cookie.getKey(), cookie.getValue()); 
} 
Response response2 = connection2.execute(); 
cookies.putAll(response2.cookies()); 
Document document2 = response2.parse(); 
// ... 

// Third request. 
Connection connection3 = Jsoup.connect(url3); 
for (Entry<String, String> cookie : cookies.entrySet()) { 
    connection3.cookie(cookie.getKey(), cookie.getValue()); 
} 
Response response3 = connection3.execute(); 
cookies.putAll(response3.cookies()); 
Document document3 = response3.parse(); 
// ... 

// Etc. 

यह निम्न विधि को पुनर्संशोधित जा सकता है:

private Map<String, String> cookies = new HashMap<String, String>(); 

public Document get(url) throws IOException { 
    Connection connection = Jsoup.connect(url); 
    for (Entry<String, String> cookie : cookies.entrySet()) { 
     connection.cookie(cookie.getKey(), cookie.getValue()); 
    } 
    Response response = connection.execute(); 
    cookies.putAll(response.cookies()); 
    return response.parse(); 
} 

जो

YourJsoupWrapper jsoupWrapper = new YourJsoupWrapper(); 

Document document1 = jsoupWrapper.get(url1); 
// ... 

Document document2 = jsoupWrapper.get(url2); 
// ... 

Document document3 = jsoupWrapper.get(url3); 
// ... 

के रूप में इस्तेमाल किया जा सकता ध्यान दें कि आगामी Jsoup 1.6.2 एक नई Connection#cookies(Map) विधि के साथ आएगा जो इसे for लूप हर बार बनाना चाहिए ज़रूरत से ज़्यादा।

+0

मैं आपको बहुत बहुत धन्यवाद। मैंने इसे करने के सही तरीके के उदाहरण की खोज की और खोज की। इस तरह से मैं कोशिश कर रहा था जिस तरह से निश्चित रूप से बेहतर है। lol – texasman1979

+0

भविष्य से कोई भी! किसी कारण से मैंने JSoup को बहुत सुविधाजनक पाया। बस मेरे दो सेंट हैं कि वर्तमान जेएसओपी लाइब्रेरी में कुकीज़ (मानचित्र <स्ट्रिंग, स्ट्रिंग> कुकीज़) नामक एक विधि है जो कुंजी/मूल्य जोड़े के अतिरिक्त करता है। तो उपर्युक्त foreach के लिए प्रतिस्थापित किया जा सकता है: connection.cookies (कुकीज़) –

+0

आप लूप – caub

1

BalusC

के लिए +1 मैं अपने कोड में कुछ बदल गया और यह मेरे लिए काम करता है, तो आप साइट से कुकी हो और केवल से दस्तावेज़

public Document get(String url) throws IOException { 
    Connection connection = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
    Connection.Response response = connection.execute(); 
    connection.cookies(response.cookies()); 
    return connection.get(); 
} 
संबंधित मुद्दे