Quelltext Webseite schlägt noch immer fehl

Diskutiere Quelltext Webseite schlägt noch immer fehl im Netzwerkprogrammierung Bereich.
C

cheat.008

Folgender Code verweigert mir bei einer bestimmten Webseite noch immer das Holen des Quelltextes.
Wie kann ich weiter dahinter kommen als den HTTP Fehler 403 woran das liegen kann?
Noch jemand Vorschläge für die Fehlersuche?

Code:
public class QuelltextReader
{
   public static void main(String[] args) throws Exception
   {
       URL url = new URL("meineWebseite");
       URLConnection connection = url.openConnection();
       connection.addRequestProperty("User-Agent",   "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0");
       connection.connect();
       BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

       String input;
       while ((input = in.readLine()) != null)
           System.out.println(input);
       in.close();
   }
}
Code:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: www.meineWebseite.de
   at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
   at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
   at privat.HeaderReader.main(QuelltextReader.java:16)
 
Robat

Robat

403 steht idR für "Fehlende Zugriffsberechtigung". Um was für eine URL handelt es sich denn?
 
truesoul

truesoul

Es ist nicht "www.meinewebsite.de". Es ist einfach eine https Website.

Die Frage ist, gibt es eine Möglichkeit näheres rauszufinden zu dem Grund, warum der Webserver die Anfrage ablehnt (aufgrund fehlender Berechtigung ist ja sehr "breit").
Diese Information wäre anfangs vielleicht auch ganz gut gewesen ;)

Ist ein Login notwendig? Oder greifst du evtl. nur auf der Landingpage zu?

Mehr Infos wären gut :)
 
C

cheat.008

Sorry. Ja Login ist tatsächlich notwendig. Gute Idee!
Weißt du wie man sich einloggen kann mit Java?
 
C

cheat.008

Hast du denn über einen Browser Zugriff auf die Website?
Ja über den Browser logge ich mich ein und kopiere diesen Link dann in mein Javaprogramm.

Wie Robat aber schon richtig hingewiesen hat, müsste ich dennoch wohl den Login implementieren.
Wisst ihr wie man das programmiert?
 
Robat

Robat

Vielleicht klappt es ja über den Authenticator.
Java:
Authenticator.setDefault (new Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
       return new PasswordAuthentication ("username", "password".toCharArray());
   }
});
 
truesoul

truesoul

Ja.
Aber ich kann dir übers Handy kein Code schicken. Jetzt weißt du schon wo das Problem ist. Vielleicht weiß Google wie es geht
 
C

cheat.008

Vielleicht klappt es ja über den Authenticator.
Java:
Authenticator.setDefault (new Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
       return new PasswordAuthentication ("username", "password".toCharArray());
   }
});
Leider nein. Selbige Exceptionausgabe.
Werde mal in die Richtung Login recherchieren. Dürft mir aber gerne noch Tipps geben ;-)
 
mrBrown

mrBrown

Ziemlich sicher dürfte das ein Login sein, der die Session in'nem Cookie speichert.
Du müsstest sowohl den Login (also Request mit Name, Passwort etc) als auch die entsprechende Behandlung von Cookies abbilden.
 
C

cheat.008

Danke für den Tipp. Und weißt du zufällig wie man sowas angeht?
 
mihe7

mihe7

Der Web-Entwickler hat verschiedene Möglichkeiten, Login und Session zu realisieren. Klassisch wären Session-Cookie und ein HTML-Formular, mit dem Benutzername und Passwort via POST-Request an den Server gesendet werden.

Für die Cookies:
https://docs.oracle.com/javase/8/docs/api/java/net/CookieHandler.html
https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html

Vor den Requests sollte also folgendes genügen:
Java:
CookieHandler.setDefault(new CookieManager());
Für den Login sendest Du, wenn wir von einem HTML-Formular ausgehen, einfach einen POST-Request, wobei die Formularfelder URL-kodiert (Content-Type "application/x-www-form-urlencoded") übermittelt werden. Stichworte sind HttpURLConnection und URLEncoder. Das sollte jetzt nicht allzu schwierig sein.
 
C

cheat.008

Ok danke für den Ansatz.
Das sind einige neue Dinge für mich, die ich die Tage mal recherchieren und testen werde.

Also den Login als Fehlerquelle kann ich derzeit ausschließen, da selbst das holen von Daten vor dem Login mit genanntem 403 Fehler fehlschlägt. Daher werde ich bei zukünftigen Verbindungsversuchen zunächst eine Seite vor dem Login zu holen versuchen.


Ich melde mich wieder wenn es Neuigkeiten oder Probleme gibt.
 
C

cheat.008

Also den Login als Fehlerquelle kann ich derzeit ausschließen, da selbst das holen von Daten vor dem Login mit genanntem 403 Fehler fehlschlägt. Daher werde ich bei zukünftigen Verbindungsversuchen zunächst eine Seite vor dem Login zu holen versuchen.
Natürlich Quatsch, sorry.
Das Holen der Quelltextdaten VOR dem Login funktioniert.


Habe nun zum Thema POST Request in der Insel nachgelesen:
http://openbook.rheinwerk-verlag.de...21_004.htm#mj09ddf4c4d29f03c1fa3ffe5344c0875d

Der Code sieht nun folgendermaßen aus.
Ergebnis noch immer der gleiche 403 Fehler. Scheint also noch immer
am Login zu scheitern.

Code:
...
   public static void main(String[] args) throws Exception
   {
       String body = "param1=" + URLEncoder.encode("<username>", "UTF-8") + "&" + "param2="
               + URLEncoder.encode("<passwort>", "UTF-8");

       CookieHandler.setDefault(new CookieManager());
       URL url = new URL("<website>");
       HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

       connection.setRequestMethod("POST");
       connection.setDoInput(true);
       connection.setDoOutput(true);
       connection.setUseCaches(false);
       connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
       connection.setRequestProperty("Content-Length", String.valueOf(body.length()));
       connection.addRequestProperty("User-Agent",
               "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0");
       connection.connect();

       BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

       String input;
       while ((input = in.readLine()) != null)
           System.out.println(input);
       in.close();
   }
}
 

Anhänge

Zuletzt bearbeitet:
mihe7

mihe7

1. Heißen die Form-Elemente auf der Webseite wirklich param1 und param2?
2. Du musst den body schon über den OutputStream der connection rausschreiben.
 
Thema: 

Quelltext Webseite schlägt noch immer fehl

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben