Java: Webseiten einlesen klappt unzuverlässig

Du willst mithelfen? Hier gibt es die Möglichkeit dazu!
Antworten
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

Ich habe folgenden Code, bei dem bis zu 20x versucht wird, den Inhalt einer Webseite zu bekommen. Wenn ich das laufen lasse zeigt sich, dass tatsächlich bis zu 15 Anläufe nötig sind, bis das klappt. Wenn ich die Seiten mit dem Browser aufrufe, gibt es die Probleme aber nicht. Was muss ich ändern, damit das besser funktioniert?

Code: Alles auswählen

  public static String getUrlContent(String strUrl) throws MalformedURLException,
  IOException {
    try {
      Thread.sleep(500);
    } catch (InterruptedException e) {

    }

    String retval = "";
    String line = null;
    int versuche = 1;
    BufferedReader reader = null;
    
    while (versuche <= 20) {
      System.out.println("getUrlContent:"+strUrl);
      URL url = new URL(strUrl);

      HttpURLConnection con = (HttpURLConnection) url.openConnection();
      InputStream in = con.getInputStream();

      InputStreamReader inReader = new InputStreamReader(in);
      reader = new BufferedReader(inReader);
            
      if (reader.ready()) {
        break;
      }
      versuche++;
      try {
        System.out.println("PAUSE, Try Nr. "+versuche);
        Thread.sleep(4000);
      } catch (InterruptedException e) {

      }
    }
   
   StringBuffer content = new StringBuffer();

   line = reader.readLine();
 
   while (line != null) {
      content.append(line + "\n");
      line = reader.readLine();
    }
    retval = content.toString();

    return retval;
  }
AlexG
Full Member
Beiträge: 97
Registriert: 31 Dez 2007, 15:21

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von AlexG »

Schau dir mal Java NIO an. Kannst für den Inhalt einen eigenen Codec schreiben und den Stream besser kontrollieren.
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von uzi »

ich glaube ehrlich gesagt nicht, dass nio da irgendwas ändert. ich persönlich habe allerdings schon seit ewigkeiten keine webseiten mehr 'zu fuß' eingelesen, sondern nutze für sowas den apache http client: http://hc.apache.org/httpcomponents-cli ... index.html. ich habe jetzt leider gerade keinen zugriff auf mein eclipse, aber ich denke mal, dass das wirschauen-plugin richtung omdb auch den http client benutzt. da kannst du dann vermutlich einfach abschreiben. bisher hatte ich da jedenfalls bzgl robustheit keine probleme.

[edit] guckst du hier: http://tvbrowser.svn.sourceforge.net/vi ... iew=markup
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

Danke, werde ich mal gucken. Ich hatte bisher nicht solche Probleme, deshalb habe ich es immer so gemacht wie in den Beispiel-Parsern.
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von uzi »

manchmal hilft es übrigens auch, die kommunikation zwischen browser und webseite zu sniffen und die gleichen header zu setzen, die auch der browser setzt.
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

Ich komme im Moment nicht mal dazu das auszuprobieren. Dafür wird morgen wohl endlich im TVB stehen, bei welchen Sendern die Achtelfinale laufen. Das das so lange gedauert hat liegt aber nicht an TVB ;-).
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

uzi hat geschrieben: sondern nutze für sowas den apache http client: http://hc.apache.org/httpcomponents-cli ... index.html.
Nachdem ich das eine Weile nicht testen konnte, weil der alte Code auch wieder lief, sieht es jetzt so aus, dass es damit funktioniert. Danke.
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

Oh je, ich bin überarbeitet. Ich hatte den neuen Code noch gar nicht eingecheckt. Das heißt, dass momentan mit dem alten Code alles problemlos läuft. Kann ich also weiterhin nicht testen.
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

Das braucht ja eine ziemliche Menge Jars zum laufen http://hc.apache.org/httpcomponents-cli ... start.html . War mir gar nicht bewusst.
Als offizieller Weg TVB-Parser zu machen, ist der Apache Http Client dann wohl nicht so praktisch. Bisher haben wir im Starterkit eine externe Jar, dann wären es 7, nur um eine Funktionalität zu vereinfachen.
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von uzi »

hm... ich sehe das in dem umfeld nicht wirklich als problem, wenn da viele jars gebraucht werden. du?
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von uzi »

ab davon finde ich jetzt nicht, dass 4 jars 'viel' sind.
Jo
Site Admin
Beiträge: 11802
Registriert: 07 Apr 2006, 23:39

Re: Java: Webseiten einlesen klappt unzuverlässig

Beitrag von Jo »

Stimmt, wären 4 zusätzliche statt 6. Ich denke halt an die Anfänger, die Sender anbieten wollen, aber sich mit Java nicht auskennen. Ich denke, da sind libs, die eingebunden werden müssen, vielleicht eher Hürde als Hilfe, wenn sie nicht ohnehin zwingend nötig sind. Wer sich damit auskennt, kann die libs ja verwenden, wenn es damit besser läuft. Seitdem ich das bei dem Parser oben einsetze, scheint auch alles zu klappen.
Antworten