Jsoup

2016-04-07 28 views
2

ile giriş yapılabilen Java hurda web sitesi, streetinsider.com adresinden verileri yazdırmak istiyorum (div with class = "news_article"). Bir hesap oluşturdum ve bu verilere erişmek için giriş yapmam gerekiyor.Jsoup

Bu kodun neden çalışmadığını bana açıklayan var mı? Çok çalıştım ama hiçbir şey çalışmıyor.

public static final String SPLIT_INTERNET_URL = "http://www.streetinsider.com/Special+Dividends?offset=55"; 
public static final String SPLIT_LOGIN = "https://www.streetinsider.com/login.php"; 

/** 
* @param args the command line arguments 
* @throws java.io.FileNotFoundException 
* @throws java.io.UnsupportedEncodingException 
* @throws java.text.ParseException 
* @throws java.lang.ClassNotFoundException 
*/ 
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException, IOException, ParseException, ClassNotFoundException { 
    // TODO code application logic here 
    Response res = Jsoup.connect(SPLIT_LOGIN) 
      .data("loginemail", "XXXXX", "password", "XXXX") 
      .method(Method.POST) 
      .execute(); 
    Document doc = res.parse(); 

    Map<String, String> cookies = res.cookies(); 

    Document pageWhenAlreadyLoggedIn = Jsoup.connect(SPLIT_INTERNET_URL).cookies(cookies).get(); 
    Elements elems = pageWhenAlreadyLoggedIn.select("div[class=news_article]"); 
    for (Element elem : elems) { 
     System.out.println(elem); 
    } 
} 
+0

oldukça emin web sitesi gerektirir ne değildir, hangi HTTP TEMEL AUTH farz olduğunu. Bir oturum belirteci almanız ve seansı almanız gerekecek. –

cevap

2

Kodunuz web sitesine giriş yapmıyor .... Web sitesine giriş yapmak için aşağıdaki kodu deneyin.

web sitesine giriş için:
Connection.Response res = Jsoup.connect(SPLIT_LOGIN) 
      .data("action", "account", 
       "redirect", "account_home.php?", 
       "radiobutton", "old", 
       "loginemail", "XXXXX", 
       "password", "XXXXX", 
       "LoginChoice", "Sign In to Secure Area") 
      .method(Connection.Method.POST) 
      .followRedirects(true) 
      .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36") 
      .execute(); 

Yani artık giriş yaptınız, ancak web sitesi diğer tarayıcı veya bağlantı, öncelikle bu bağlantıyı sonlandırmak isteklerde kaydedilir olmadığını algılamak gibi görünüyor. Yani aşağıda bağlantı sonlandırma kodudur:

Connection.Response res2 = Jsoup.connect("http://www.streetinsider.com/login_duplicate.php") 
      .data("ok", "End Prior Session") 
      .method(Connection.Method.POST) 
      .cookies(res.cookies()) 
      .followRedirects(true) 
      .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36") 
      .execute(); 

, şimdi res2 irade hesabınızın ana sayfasını iyi içeren Tüm, daha sonra ne istersen sayfasına gitmek için devam edebilirsiniz. Jsoup ile bir web sitesine giriş yapmak konusunda daha fazla bilgi için aşağıdaki öğretici bir göz atın:

How to login to a website with Jsoup

+0

Omg teşekkür ederim çok @Joel Min çalışıyor ve neden olduğunu anladım! Tam olarak aradığım şey bu, günümü kurtardın! – zardlemalefique

+0

Endişelenme yok kardeşim, yardım ettiğine sevindim :) –

+0

Sadece senin gibi insanlara yardım edebilmek için sabırsızlanıyorum. İyi günler Efendim :) – zardlemalefique