# getInputStream() - Ihr Browser ist veraltet



## ZTirom (11. Feb 2018)

Hallo zusammen,

ich möchte gerne den Quellcode der Seite
https://www.leo.org/englisch-deutsch
auslesen, dazu habe ich folgenden Code

public Connector(String surl) {

       try {

           url = new URL(surl);

           is = url.openStream();

           scan = new Scanner(is);

           while(scan.hasNextLine()) {
               System.out.println(scan.nextLine());
           }


       } catch (MalformedURLException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }
}

Dann kommt folgende Fehlermeldung:

java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.leo.org/englisch-deutsch/
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
   at java.net.URL.openStream(Unknown Source)
   at de.html.connection.Connector.<init>(Connector.java:24)
   at de.html.GUI.actionPerformed(GUI.java:57)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
   at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$500(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)

Dies konnte ich bereits beheben mit folgendem Code:

public Connector(String surl) {

       try {

           url = new URL(surl);

           con = url.openConnection();
           con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0");

           is = con.getInputStream();

           scan = new Scanner(is);

           while(scan.hasNextLine()) {
               System.out.println(scan.nextLine());
           }


       } catch (MalformedURLException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }

   }

Es funktioniert also alles super. Wenn ich nun aber z.B.

https://dict.leo.org/englisch-deutsch/Hallo

aufrufe, kommt folgende Meldung, die mit dieser Zeile beginnt:

           Ihr Browser ist veraltet, daher kann es zu Einschr&#xE4;nkungen in der Funktionalit&#xE4;t kommen.</p><p><small>Die reine W&#xF6;rterbuchsuche wird im InternetExplorer in Version 8 und 9 noch unterst&#xFC;tzt (ohne Gew&#xE4;hr auf funktionierende Zusatzdienste wie Aussprache, Flexionstabellen etc.). Siehe dazu auch die offizielle Ank&#xFC;ndigung durch  <a href="https://www.microsoft.com/en-us/WindowsForBusiness/End-of-IE-support">Microsoft</a> zum Support-Ende der verschiedenen InternetExplorer-Versionen.</small></p></span></div></div><![endif]--><!--[if lte IE 7]><div id="browser-support-none" class=""><div title="" class="alert section  bg-red "><span><i role="img" class="icon icon_alert-octagon icon_size_24 white ">&#xA0;</i></span><span>Bitte aktualisieren Sie Ihren Browser - Ihr Browser wird nicht mehr unterst&#xFC;tzt.</span></div></div><![endif]--><noscript><div title="" class="alert m-bottom-medium  bg-blue "><span><i role="img" class="icon icon_information icon_size_24 darkgray ">Â </i></span><span>Aktivieren Sie JavaScript fÃ¼r mehr Features und hÃ¶here Geschwindigkeit beim Abfragen.

Nun ist meine Frage, wieso diese Meldung kommt und wie ich sie beheben kann. Meines Wissens nach ist der User-Agent der Neuste!?

Ich hoffe auf schnelle Antworten

Lg Moritz


----------



## Thallius (11. Feb 2018)

Sagmal Leute überlegt ihr eigentlich auch manchmal was ihr da macht?

*Urheberrecht*
Sämtliche Rechte an der im Rahmen dieses Online-Angebots entwickelten Software, den zugrunde liegenden Datenbanken und sonstigen Inhalten liegen bei der LEO GmbH, soweit nicht ausdrücklich ein anderer Urheber oder Rechtsinhaber genannt wird. Jedwede Verwendung der Software, Daten oder sonstigen Inhalte außer in der Form, wie sie unter leo.org angeboten und ermöglicht wird, ist nicht erlaubt. Es ist insbesondere nicht gestattet, jedwede Art von Inhalten per Script oder auf andere Weise automatisiert abzufragen.


----------



## AndyJ (12. Feb 2018)

Setz' doch einfach die Header eines aktuellen Browsers.

Cheers,
Andy


----------



## Meniskusschaden (12. Feb 2018)

Thallius hat gesagt.:


> *Urheberrecht* ...


Es gilt nicht das, was LEO sich wünscht, sondern das Urheberrecht. Dieser Absatz scheint aber nicht daraus zu zitieren, sondern ist eine LEO-eigene Formulierung aus deren Nutzungsbedingungen und dürfte somit belanglos sein, solange man denen nicht zustimmt. Nützlich ist er aufgrund des Phänomens des vorauseilenden Gerhorsams wahrscheinlich trotzdem. Aber zu dem Thema gab es hier ja neulich schon eine lange Diskussion.


----------



## Xyz1 (17. Feb 2018)

Man SOLLTE das nich. Und dass es nicht jeder macht, helfe ich dabei auch nich.[1] Aber eine Frage nebenher: Willst alle Wörter wissen? Das geht nich, denn, angenommen, 20 Zeichen, es gibt zu viele Kombinationsmöglichkeiten. Denn dann gibt es das Universum nicht mehr.

[1] Jetzt ist bestimmte auch zu erkennen, warum nicht, wenn das alle machen.

Sicher ist es so, dass wenn man sagt etwas nich zu tun dass es dann von allen erst recht machen. So wird wahrscheinlich jemand hierauf antworten.


----------



## Meniskusschaden (17. Feb 2018)

DerWissende hat gesagt.:


> Man SOLLTE das nich.


Dann sollte man diese Seite (und sicherheitshalber auch alle anderen) gar nicht aufrufen, denn der Webbrowser liest auch genau diese "verbotenen" Daten. Ich glaube nicht, dass z.B. Mozilla sich von sämtlichen aktuellen und zukünftigen Website-Betreibern die Genehmigungen holt, deren Seiten-Quelltexte lesen zu dürfen. Oder gibt es neuerdings eine gesetzliche Browser-Programmierung-Genehmigungs-Regulierung, die es Mozilla, Google etc gestattet und allen anderen verbietet?

Ich verstehe gar nicht, warum hier immer unlautere Absichten unterstellt werden, wenn jemand Seiten-Quelltext auslesen will. Das sind doch genau die Daten, die der Website-Betreiber verschickt, DAMIT man sie sich ansieht. Wenn sich alle an so seltsame Vorgaben halten würden, gäbe es noch keinen einzigen Web-Browser und es wäre sinnlos, Webseiten zu betreiben. Na ja, wäre vielleicht gar nicht schlecht gewesen, wenn uns der Internet Explorer erspart geblieben wäre.


----------



## Xyz1 (17. Feb 2018)

Ich habe nurmal schnell unter die Haube geschaut, es sieht nach POST aus...


ZTirom hat gesagt.:


> .getInputStream();



Daraus "zaubert" java GET aber...

@ZTirom : Packe doch bitte alles sehr gut leserlich in Java-Code-Tags! So mag dir bestimmt keiner helfen. 

@Meniskusschaden : Ja hast schon recht, aber wenn der Betreiber der das nunmal nicht möchte?

Also das ist ein normales RESTful POST was da erwartet wird, und ein normaler, imitierter, fingierter Browser!


----------



## Thallius (17. Feb 2018)

Meniskusschaden hat gesagt.:


> Dann sollte man diese Seite (und sicherheitshalber auch alle anderen) gar nicht aufrufen, denn der Webbrowser liest auch genau diese "verbotenen" Daten. Ich glaube nicht, dass z.B. Mozilla sich von sämtlichen aktuellen und zukünftigen Website-Betreibern die Genehmigungen holt, deren Seiten-Quelltexte lesen zu dürfen. Oder gibt es neuerdings eine gesetzliche Browser-Programmierung-Genehmigungs-Regulierung, die es Mozilla, Google etc gestattet und allen anderen verbietet?
> 
> Ich verstehe gar nicht, warum hier immer unlautere Absichten unterstellt werden, wenn jemand Seiten-Quelltext auslesen will. Das sind doch genau die Daten, die der Website-Betreiber verschickt, DAMIT man sie sich ansieht. Wenn sich alle an so seltsame Vorgaben halten würden, gäbe es noch keinen einzigen Web-Browser und es wäre sinnlos, Webseiten zu betreiben. Na ja, wäre vielleicht gar nicht schlecht gewesen, wenn uns der Internet Explorer erspart geblieben wäre.



Also mir rollen sich immer die Fußnägel auf wenn ich sowas lese.

Wenn du mit einem Browser auf eine Seite gehst, dann holt der Browser die Seite und nicht nur vereinzelte Daten daraus. Das beinhaltet nunmal auch die Werbung, das wovon ein kostenloser Webseitenbetreiber nunmal lebt und seine Server damit bezahlt. 
Wenn nun jeder hergeht und sich seine relevanten Daten per script von dieser Webseite zieht und damit 1) die Werbung umgeht und 2) noch viel mehr Serverlast erzeugt weil er ja viel schneller abfragen kann als jemand der per Maus klicken muss, dann hat der Betreiber bei Zeiten die Schnauze voll oder geht pleite. 
Damit ist der kostenlose Service dann weg.

Das scheint aber genau das zu sein, was Leute wie Du wollen oder? Oder bist du der Meinung "Gibt ja noch genug andere die die Seite regulär besuchen, da macht es nichts wenn ich es per Scirpt mache"? Dann denkst du wahrscheinlich auch es ist egal wenn Du im Laden etwas klaust, denn es gibt ja noch genug andere Kunden die bezahlen oder?

Hast du schon einmal Wiki mit einer Spende unterstützt oder StackOverflow? Oder meinst du auch hier "Lass mal die anderen machen, gibt ja genug Trottel die für mich bezahlen"

Könnt ihr nicht einfach mal ein wenig weiter denken als bis vor eure eigene Nasenspitze?

Claus


----------



## mrBrown (17. Feb 2018)

DerWissende hat gesagt.:


> Ich habe nurmal schnell unter die Haube geschaut, es sieht nach POST aus...
> 
> 
> Daraus "zaubert" java GET aber...
> ...


Kannst du nicht mal versuchen, verständlich zu schreiben?

Die Seite ist ganz normal mit GET abrufbar.



ZTirom hat gesagt.:


> Nun ist meine Frage, wieso diese Meldung kommt und wie ich sie beheben kann. Meines Wissens nach ist der User-Agent der Neuste!?


Die "Meldung" steht halt so im Quelltext der Seite, auch wenn du sie mit 'nem Browser abrufst.
Das ganze steht allerdings in einem Kommentar, und wird deshalb in üblichen Browsern ignoriert.


----------



## Meniskusschaden (17. Feb 2018)

DerWissende hat gesagt.:


> aber wenn der Betreiber der das nunmal nicht möchte?


Kommt darauf an, was er eigentlich nicht möchte. Viele mißbräuchliche Nutzungsmöglichkeiten werden bereits durch das Urheberrecht verboten sein, ohne dass er selbst etwas dafür tun muß. Für das, was er darüber hinaus untersagen will, sehe ich eigentlich nur die Möglichkeit, es mit dem Nutzer rechtswirksam zu vereinbaren. Dazu wird er aber sicher stellen müssen, dass der Nutzer dem zustimmt, bevor er die Inhalte sieht. Das macht die Nutzung natürlich unattraktiver, so daß der Anbieter abwägen muß, ob es das wert ist. Er kann natürlich auch Wünsche für den fairen Umgang miteinander äußern und hoffen, dass sich möglichst viele daran halten. Oder er blufft mit einem Pseudo-Verbot im Impressum.


@Thallius: Ich verstehe nicht, warum du die Diskussion auf so eine persönliche Ebene verlagerst. Ob meine Argumentation nun schlüssig ist oder nicht, kann doch nichts damit zu tun haben, wie ich persönlich damit umgehe. Es wirkt auf mich wie der Versuch, meine Person zu verunglimpfen, um meine Argumente nicht widerlegen zu müssen. Das ist schade, denn dein Posting enthält ja durchaus auch Sinnvolles, das so völlig in den Hintergrund tritt.
Ich finde es wichtig, dass sich nicht jeder sein eigenes Recht zimmern darf, sondern dass es Ergebnis der Gesetzgebung und somit indirekt zumindest annähernd ein Spiegelbild des gesellschaftlichen Konsens sein sollte. Ich kann deshalb auch nicht nachvollziehen, wie du zu der Meinung gelangst, dass ich ungesetzliches Handeln gutheissen würde, denn in diesem und anderen Threads habe ich doch immer gerade dahingehend argumentiert, nicht das als maßgeblich zu erachten, was irgend jemand schreibt oder behauptet, sondern eben die Gesetze.

Ebenso wie in der realen Welt gibt es auch im Internet zahlreiche Möglichkeiten, rechtmäßig oder mißbräuchlich zu handeln und das trifft auch auf die Nutzung der Hilfsmittel zu, die man dabei verwendet. Ich finde es zu kurz gedacht, zunächst die unrechtmäßige Nutzung zu unterstellen, um dann mit dieser Begründung deren Gebrauch zu untersagen. Das ist ein ziemlich gefährliches Prinzip und widerspricht meiner Vorstellung von freiheitlichen Grundwerten.



Thallius hat gesagt.:


> Hast du schon einmal Wiki mit einer Spende unterstützt oder StackOverflow? Oder meinst du auch hier "Lass mal die anderen machen, gibt ja genug Trottel die für mich bezahlen"


Ich lasse mal offen, wie ich mich da verhalte, denn das geht niemanden etwas an. Ich finde es aber grundsätzlich unanständig, Spenden einzufordern und anmaßend, das Spendenverhalten anderer Menschen zu be- oder verurteilen.
Wenn man eine Gegenleistung haben will, soll man das vorher sagen. Ansonsten kann man um Spenden bitten und niemand der nicht spendet muß deswegen ein schlechtes Gewissen haben. Das ist auch Bestandteil freiheitlicher Grundwerte.
Ganz nebenbei bemerkt ist es übrigens wirtschaftlich sinnvoller, eine große Spende zu leisten, als denselben Betrag auf mehrere kleine Spenden zu verteilen, denn dadurch werden Verwaltungskosten gespart, so daß insgesamt mehr Geld beim eigentlichen Empfänger ankommt. Wenn man dann nur die kostenlosen Angebote nutzen würde, für die man selbst spendet, würde man da ja wohl das Kind mit dem Bade ausschütten.


----------



## mrBrown (17. Feb 2018)

Thallius hat gesagt.:


> Also mir rollen sich immer die Fußnägel auf wenn ich sowas lese.


Mir rollen sie sich auch auf, wenn ich sowas lese.



Thallius hat gesagt.:


> Wenn du mit einem Browser auf eine Seite gehst, dann holt der Browser die Seite und nicht nur vereinzelte Daten daraus. Das beinhaltet nunmal auch die Werbung, das wovon ein kostenloser Webseitenbetreiber nunmal lebt und seine Server damit bezahlt.
> Wenn nun jeder hergeht und sich seine relevanten Daten per script von dieser Webseite zieht und damit 1) die Werbung umgeht und 2) noch viel mehr Serverlast erzeugt weil er ja viel schneller abfragen kann als jemand der per Maus klicken muss, dann hat der Betreiber bei Zeiten die Schnauze voll oder geht pleite.
> Damit ist der kostenlose Service dann weg.


Wenn man dagegen die Seite mit Java aufruft, dann halt sich das Programm die Seite und nicht nur vereinzelte Daten daraus. Das beinhaltet unter anderem auch Werbung (die in meinem Browser übrigens blockiert ist) und ist nicht zwingend schneller als ein Browser. Überraschung: Man kann sogar eigene Browser programmieren :O
Wenn der Seitenbetreiber nicht mit Last zurecht kommt, muss er sich drum kümmern. Oder wartest du zwischen allen Seitenaufrufen mit deinem Browser erst 30 Sekunden, damit du ja nicht zu viel Last erzeugst?



Thallius hat gesagt.:


> Dann denkst du wahrscheinlich auch es ist egal wenn Du im Laden etwas klaust, denn es gibt ja noch genug andere Kunden die bezahlen oder?


Dann denkst du wahrscheinlich auch, Messer sollten nur an Leute verkauft werden, die nachweislich als Koch arbeiten? Ich mein, man könnte ja Leute damit ausbauen oder gar umbringen. Oder bist du etwa für freien Messerverkauf und unterstützt damit Raub und Mord?



Thallius hat gesagt.:


> Hast du schon einmal Wiki mit einer Spende unterstützt oder StackOverflow? Oder meinst du auch hier "Lass mal die anderen machen, gibt ja genug Trottel die für mich bezahlen"


Überraschung: Ja, hab ich. Ich bin völlig bereit dazu, für Dinge die ich nutze zu zahlen. Ich bin aber auch der Meinung, dass ich Werbung von dritten Seiten nicht geladen haben möchte und auch selber entscheiden kann, womit ich die Daten abrufe, sei es Firefox, Lynx oder cURL.



Thallius hat gesagt.:


> Könnt ihr nicht einfach mal ein wenig weiter denken als bis vor eure eigene Nasenspitze?


"Alles ganz Böse!" klingt allerdings nicht allzu weit gedacht, zumindest nicht weiter als bis zum eigenen Portmonee.


----------



## Xyz1 (17. Feb 2018)

mrBrown hat gesagt.:


> Kannst du nicht mal versuchen, verständlich zu schreiben?


Kann ja nicht jeder so gut schreiben wie du.


----------



## AndyJ (18. Feb 2018)

Wir wissen nicht, ob der Autor dieses Posts was kriminelles machen moechte oder nicht. Ich gehe davon aus, dass alles seine Richtigkeit hat und das vermutlich nur eine Uebung ist. In diesem Forum geht's doch um Javaprogrammierung. Deshalb habe ich die Antwort gepostet: setze bei deiner Anfrage die Header, die der Server erwartet. Ich glaube, das ist etwas untergegangen und ich denke, das ist elementares Grundwissen.

Wenn aus dem Code ein Programm gebaut wird, das LEO Content automatisiert absaugen soll, dann gehe ich davon aus, dass das ebenso automatich vom Server unterbunden wird. Ich wuerde es jedenfalls so programmieren. Also, wo ist das Problem?

Cheers,
Andy


----------



## Barista (19. Feb 2018)

Eine Alternative zum Herunterladen von solchen Daten ist die Fernsteuerung eines Browsers mit Selenium.

Weiterhin gibt es freie Wörterbücher, bei denen man nichts illegales machen muss.


----------

