2016-04-07 3 views
2

Ich möchte presome Daten (div mit class = "news_article") von Streetinsider.com. Ich habe ein Konto erstellt und muss mich anmelden, um auf diese Daten zugreifen zu können.Java-Schrott-Website mit Anmeldung erforderlich mit Jsoup

Kann mir jemand erklären, warum dieser Code nicht funktioniert? Ich habe viel versucht, aber nichts funktioniert.

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

ziemlich sicher, dass ist davon ausgehen, HTTP BASIC AUTH, das ist nicht das, was die Website erfordert. Sie müssen ein Sitzungstoken erhalten und die Sitzung fälschen. –

Antwort

2

Ihr Code nicht melden Sie sich nicht in die Website .... Versuchen Sie den Code unten auf der Website einzuloggen.

auf der Website anzumelden:

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(); 

So, jetzt Sie angemeldet sind, aber die Webseite, ob Sie in anderen Browser oder Verbindung angemeldet sind zu erkennen scheint, fordert, dass Sie zum ersten Mal, dass die Verbindung beenden. So unten ist der Code zum Beenden der Verbindung:

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(); 

Alle gut, jetzt res2 Willen enthält die Homepage von Ihrem Konto haben, können Sie gehen, um zu gehen, was auch immer Seite, die Sie wollen. Weitere Informationen darüber, wie mit Jsoup zu einer Webseite einzuloggen, werfen Sie einen Blick auf die folgende Anleitung:

How to login to a website with Jsoup

+0

Omg vielen Dank @Joel Min es funktioniert und ich verstand warum! Genau das habe ich gesucht, du hast mir den Tag gerettet! – zardlemalefique

+0

Keine Sorge, Bruder, froh, dass es geholfen hat :) –

+0

Ich kann es kaum erwarten, Menschen wie Ihnen zu helfen. Ich wünsche dir einen schönen Tag. – zardlemalefique