java - jsoup पोस्टिंग और कुकी




screen-scraping (5)

मैं किसी साइट पर लॉगिन करने के लिए jsoup का उपयोग करने की कोशिश कर रहा हूं और फिर जानकारी को स्क्रैप कर रहा हूं, मैं किसी समस्या में भाग रहा हूं, मैं सफलतापूर्वक लॉगिन कर सकता हूं और index.php से एक दस्तावेज़ बना सकता हूं लेकिन मुझे साइट पर अन्य पेज नहीं मिल सकते हैं। मुझे पता है कि मुझे पोस्ट करने के बाद कुकी सेट करने की आवश्यकता है और फिर जब मैं साइट पर एक और पेज खोलने की कोशिश कर रहा हूं तो इसे लोड करें। लेकिन मैं यह कैसे करूँ? निम्नलिखित कोड मुझे लॉगिन करने और index.php प्राप्त करने देता है

Document doc = Jsoup.connect("http://www.example.com/login.php")
               .data("username", "myUsername", 
                     "password", "myPassword")
               .post();

मुझे पता है कि मैं ऐसा करने के लिए अपाचे httpclient का उपयोग कर सकता हूं लेकिन मैं नहीं चाहता।


Answers

//This will get you the response.
Response res = Jsoup
    .connect("loginPageUrl")
    .data("loginField", "[email protected]", "passField", "pass1234")
    .method(Method.POST)
    .execute();

//This will get you cookies
Map<String, String> loginCookies = res.cookies();

//And this is the easiest way I've found to remain in session
Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess")
      .cookies(loginCookies)
      .get();

जब आप साइट पर लॉगिन करते हैं, तो शायद यह एक अधिकृत सत्र कुकी सेट कर रहा है जिसे सत्र को बनाए रखने के बाद के अनुरोधों पर भेजा जाना आवश्यक है।

आप इस तरह की कुकी प्राप्त कर सकते हैं:

Connection.Response res = Jsoup.connect("http://www.example.com/login.php")
    .data("username", "myUsername", "password", "myPassword")
    .method(Method.POST)
    .execute();

Document doc = res.parse();
String sessionId = res.cookie("SESSIONID"); // you will need to check what the right cookie name is

और फिर इसे अगले अनुरोध पर भेजें जैसे:

Document doc2 = Jsoup.connect("http://www.example.com/otherPage")
    .cookie("SESSIONID", sessionId)
    .get();

जहां कोड था:

Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess").cookies().get(); 

मुझे तब तक कठिनाइयों का सामना करना पड़ा जब तक कि मैंने इसे बदल दिया:

Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess").cookies(cookies).get();

अब यह बेकार ढंग से काम कर रहा है।


यहां आप कोशिश कर सकते हैं ...

import org.jsoup.Connection;


Connection.Response res = null;
    try {
        res = Jsoup
                .connect("http://www.example.com/login.php")
                .data("username", "your login id", "password", "your password")
                .method(Connection.Method.POST)
                .execute();
    } catch (IOException e) {
        e.printStackTrace();
    }

अब अपनी सभी कुकीज़ को सहेजें और अपने इच्छित पेज पर अनुरोध करें।

//Store Cookies
cookies = res.cookies();

दूसरे पेज पर अनुरोध करना

try {
    Document doc = Jsoup.connect("your-second-page-link").cookies(cookies).get();
}
catch(Exception e){
    e.printStackTrace();
}

पूछें कि आगे की मदद की ज़रूरत है या नहीं।


सॉर्ट किए गए कुंजी स्टोर के साथ एक और अंतर TreeMap के साथ है, डेवलपर स्ट्रिंग कुंजी के साथ (स्ट्रिंग.CASE_INSENSITIVE_ORDER) दे सकता है, इसलिए मैप एक्सेस पर कुंजी की तुलना करते समय तुलनित्र कुंजी के मामले को अनदेखा करता है। हैश मैप के साथ ऐसा विकल्प देना संभव नहीं है - यह हैश मैप में हमेशा संवेदनशील संवेदनशील तुलना है।







java screen-scraping jsoup