HTTP-Request

Status
Nicht offen für weitere Antworten.

Alien

Mitglied
Hallo,

und zwar habe ich eine (freiwillige)-Hausaufgabe aufbekommen einen HTTP-Request zu programmieren.

wenn ich das ganze über die cmd mache, sieht es wie folgt aus:
- telnet website.org 80 (befehl domain port)
- get programmieren/java.html (befehl "pfad zur htmldatei")
Nun bekomme ich den Quelltext von java.html übermittelt, welcher in der cmd angezeigt wird.

Javaprogrammablauf:
- Bitte geben sie die Domain ein: "Usereingabe"
- Bitte geben sie den Port ein: "Usereingabe"
- Bitte geben sie den Pfad zur Html-Datei an: "Usereingabe"
- Ausgabe des Quellcodes

Wie man einliest weiß ich. Ich weiß nur nicht, was ich importieren muss und wie ich es dann verwende.
Würde mich freuen, wenn ihr mir dabei helfen könntet.

MfG
Michael
 

Alien

Mitglied
hallo,

danke soweit.

Code:
import java.io.*;
import java.net.*;
public class HttpRequest
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
		String userinput = "";
		String read = "";
		URL url;
		URLConnection uc;
		
		System.out.print("http://");
		userinput = "http://"+br0.readLine(); //System.out.println("Userinput: "+url);
		url = new URL(userinput);
		uc = url.openConnection();
		
		BufferedReader br1 = new BufferedReader(new InputStreamReader(uc.getStreamInput()));
   }
}

Bei mir taucht jetzt folgender Fehler auf:
HttpRequest.java:18: cannot find symbol
symbol : method getStreamInput()
location: class java.net.URLConnection

Was habe ich da falsch gemacht? Bin ich überhaupt auf dem richtigem Weg?

MfG
Michael
 

Alien

Mitglied
Hallo,

der Code ist fast fertig.

Code:
import java.io.*;
import java.net.*;
public class HttpRequest
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
		String userinput = "";
		String read = "";
		URL url;
		
		System.out.print("http://");
		userinput = "http://"+br0.readLine(); //System.out.println("Userinput: "+url);
		url = new URL(userinput);
		
		BufferedReader br1 = new BufferedReader(new InputStreamReader(url.openStream()));
		
		read = br1.readLine();
		System.out.println(read);     
   }
}

Ich habe jetzt das Problem, dass ich nur die erste Zeile ausgeben kann. Gibt es einen alternativen Befehl zu readLine()? Ich will keine Zeile haben, sondern den ganzen Quellcode. Sprich: alle Zeilen.

MfG
Michael
 

masta // thomas

Bekanntes Mitglied
Pack das Lesen in eine Schleife. Dabei kannst du überprüfen, ob dir readLine() null zurückliefert.
btw findest du hier im Forum ganz viele Lösungen zu deiner Frage ;)
 

Alien

Mitglied
Hallo,

Code:
import java.io.*;
import java.net.*;
public class HttpRequest
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
		String userinput = "";
		String read = "";
		URL url;
		
		System.out.print("\thttp://");
		userinput = "http://"+br0.readLine(); //System.out.println("Userinput: "+url);
		url = new URL(userinput);
		
		BufferedReader br1 = new BufferedReader(new InputStreamReader(url.openStream()));
		
		System.out.println("");
		while((read = br1.readLine()) != null)
		{
			read = br1.readLine();
			if(read!=null)
				System.out.println(read);
		}     
   }
}

Alles klar! Das Programm funktioniert! Danke Triebi und Thomas! :D

Eine Frage habe ich jetzt aber noch. Wie funktioniert readLine() genau? Ich lese eine Zeile ein. Befinde ich mich da in Zeile 0 oder 1? Normalerweise 1?! Ich gehe bei meinem Beispiel einfach mal von 1 aus. Spielt das Überhaupt eine Rolle?

Nehmen wir an eine Website hat nur 10 Zeilen Code. Ich benutze br1.readLine(), wie es bei mir im Code zu sehen ist. Ich habe dann die erste Zeile eingelesen. Möchte ich eine weitere Zeile, schreibe ich erneut br1.readLine(). Möchte ich die dritte Zeile einlesen, benutze ich wieder br1.readLine(). Springt readLine() direkt nach dem einlesen in die nächste Zeile?
Was wäre, wenn ich eine for-Schleife verwende, um die ersten 5 Zeilen einzulesen und direkt wieder auszugeben. Nach dem ich die 5 Zeilen eingelesen habe, möchte ich nochmals die Zeilen 2 und 3 einlesen. Wie kann ich dem readLine() sagen, dass er net in Zeile6 lesen soll, sondern in Zeile 2?
Ich könnte Zeile 2 und 3 vorher auch schon in einem String(array) speichern. Das ist mir bewusst! Ich sehe hier nur als Problem, wenn man in bestimmte Zeilen springen / einlesen will, dass man bei readLine() nirgends eine Zeilennummer angeben kann.

MfG
Michael
 

Alien

Mitglied
Hallo,

Code:
import java.io.*;
import java.net.*;
public class HttpRequest
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
		String userinput = "";
		String read = "";
		URL url;
		
		System.out.print("\thttp://");
		userinput = "http://"+br0.readLine(); //System.out.println("Userinput: "+url);
		url = new URL(userinput);
		
		BufferedReader br1 = new BufferedReader(new InputStreamReader(url.openStream()));
		
		System.out.println("");
		while((read = br1.readLine()) != null)
		{
			read = br1.readLine();
			if(read!=null)
				System.out.println(read);
		}     
   }
}

Alles klar! Das Programm funktioniert! Danke Triebi und Thomas! :D

Eine Frage habe ich jetzt aber noch. Wie funktioniert readLine() genau? Ich lese eine Zeile ein. Befinde ich mich da in Zeile 0 oder 1? Normalerweise 1?! Ich gehe bei meinem Beispiel einfach mal von 1 aus. Spielt das Überhaupt eine Rolle?

Nehmen wir an eine Website hat nur 10 Zeilen Code. Ich benutze br1.readLine(), wie es bei mir im Code zu sehen ist. Ich habe dann die erste Zeile eingelesen. Möchte ich eine weitere Zeile, schreibe ich erneut br1.readLine(). Möchte ich die dritte Zeile einlesen, benutze ich wieder br1.readLine(). Springt readLine() direkt nach dem einlesen in die nächste Zeile?
Was wäre, wenn ich eine for-Schleife verwende, um die ersten 5 Zeilen einzulesen und direkt wieder auszugeben. Nach dem ich die 5 Zeilen eingelesen habe, möchte ich nochmals die Zeilen 2 und 3 einlesen. Wie kann ich dem readLine() sagen, dass er net in Zeile6 lesen soll, sondern in Zeile 2?
Ich könnte Zeile 2 und 3 vorher auch schon in einem String(array) speichern. Das ist mir bewusst! Ich sehe hier nur als Problem, wenn man in bestimmte Zeilen springen / einlesen will, dass man bei readLine() nirgends eine Zeilennummer angeben kann.

MfG
Michael
 
G

Gast

Gast
Dann musst du das Ergebnis zwischenspeichern oder die Seite neuladen.
 

Triebi

Aktives Mitglied
Alien hat gesagt.:
Code:
while((read = br1.readLine()) != null)
{
	read = br1.readLine();
	if(read!=null)
		System.out.println(read);
}
Schau' mal genau hin, ob die Ausgabe auch wirklich vollständig ist. Ich habe ein bisschen das Gefühl, dass nur jede zweite Zeile angezeigt wird.
 

Alien

Mitglied
hallo,

stimmt, ist mir gar net aufgefallen. Triebi, weisst du, wie man den Fehler beheben kann. Wenn ja, kannst du mir die Lösung posten. Danke.

MfG
Michael
 

Alien

Mitglied
Code:
import java.io.*;
import java.net.*;
public class HttpRequest
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
		String userinput = "";
		String read = "";
		URL url;
		int i = 0;
		
		System.out.print("\thttp://");
		userinput = "http://"+br0.readLine(); //System.out.println("Userinput: "+url);
		url = new URL(userinput);
		
		BufferedReader br1 = new BufferedReader(new InputStreamReader(url.openStream()));
		
		System.out.println("");
		while((read = br1.readLine()) != null)
		{
			read = br1.readLine();
			i++;
			if(read!=null)
				System.out.println(i+"\t| "+read);
		}
   }
}

Ich habe den Code mal so abgeändert, dass er auch Zeilennummern mit ausgibt. Die schwangt bei mir immer.

Ich habe allerdings nicht verstanden, was das mit dem HashMap auf sich hat! Wie soll das genau funktionieren?

MfG
Michael
 
G

Guest

Gast
Alien hat gesagt.:
hallo,

stimmt, ist mir gar net aufgefallen. Triebi, weisst du, wie man den Fehler beheben kann. Wenn ja, kannst du mir die Lösung posten. Danke.

MfG
Michael

Code:
while((read = br1.readLine()) != null) //read enthält die Zeile
      {
         read = br1.readLine(); //du überschreibst read mit der nächsten Zeile
         i++;
         if(read!=null)
            System.out.println(i+"\t| "+read);
      }

du rufst readLine also zweimal auf bevor du irgendwas mit der Zeile machst
 
G

Gast

Gast
zudem ist der test auf null auch unsinn weil das auch schon im schleifenkopf gemacht wird.

Merke, keinen Code kopieren den man nicht versteht ;)
 

Alien

Mitglied
Gast hat gesagt.:
zudem ist der test auf null auch unsinn weil das auch schon im schleifenkopf gemacht wird.

Merke, keinen Code kopieren den man nicht versteht ;)

nein, da muss ich dir widersprechen! In der while-Schleife wird geguckt, ob read null entspricht. Trifft das nicht zu, so gehts in die while-Schleife. Read bekommt anschließend die nächste Zeile ausgegeben. In dem Moment, kann read der Wert null zugewiesen werden. Deswegen muss noch die if-Bedingung vor dem S.o.p oder willst du mit null ausgeben? ;-)

Habe den Code lediglich zu schnell überflogen. War mir irgendwie plausibel. Deswegen der Leichtsinnfehler. ;-) Den restlichen Code habe ich ja selber geschrieben und den letzten Part habe ich einfach nur schnell abgeändert und so war ich dann der Meinung, dass es funktioniert. Naja.. aus Fehlern lernt man ;-)

MfG
Michael


Edit1:
Sorry, jetzt hab ich mist erzählt! :roll:
Nehme alles zurück Gast!!!! Hast recht!

MfG
Michael

Edit2:

aso.. hier noch der fertige 100%ig funktionierende Code! ;-)
Code:
import java.io.*;
import java.net.*;
public class HttpRequest
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
		String userinput = "";
		String read = "";
		URL url;
		int i = 0;
		
		System.out.print("\thttp://");
		userinput = "http://"+br0.readLine(); //System.out.println("Userinput: "+url);
		url = new URL(userinput);
		
		BufferedReader br1 = new BufferedReader(new InputStreamReader(url.openStream()));
		
		System.out.println("");
		while((read = br1.readLine()) != null)
		{
			i++;
			System.out.println(i+"\t| "+read);
		}
   }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J HTTP Request auf eine PHP Session Java Basics - Anfänger-Themen 1
C HTTP POST-Request Java Basics - Anfänger-Themen 3
S HTTP Request Umlaut Problem Java Basics - Anfänger-Themen 3
N Http-Request : Google Suche Java Basics - Anfänger-Themen 6
G http-Request auf Apache Tomcat Java Basics - Anfänger-Themen 13
J Mehrdimensionales Array im Http-Request Java Basics - Anfänger-Themen 5
J HTTP Request Auslösen Java Basics - Anfänger-Themen 2
P HTTP-Request Parameter übergeben Java Basics - Anfänger-Themen 8
M Rest- Api mit HTTP BASIC Authentication Java Basics - Anfänger-Themen 16
L Webseite aufrufen (HTTP) Java Basics - Anfänger-Themen 8
P Maven-Dependencies (package org.apache.http.nio does not exist) Java Basics - Anfänger-Themen 6
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
P Http Header, Http Proxy Java Basics - Anfänger-Themen 19
W HTTP-Stream auf Ajax umbauen Java Basics - Anfänger-Themen 7
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
K URL ohne http:// Java Basics - Anfänger-Themen 8
F HTTP Get Queue Java Basics - Anfänger-Themen 7
E HTTP Client - Login durchführen? Java Basics - Anfänger-Themen 4
T Input/Output HTTP 403 aber im Browser gehts Java Basics - Anfänger-Themen 2
G Kraken HTTP Sniffer: ExceptionInInitializerError (Nutzt JNI) Java Basics - Anfänger-Themen 2
O get HTTP Headers Java Basics - Anfänger-Themen 5
L Methodenzerlegung HTTP Java Basics - Anfänger-Themen 4
S HTTP Adresse von offenem Browserfenset einlesen Java Basics - Anfänger-Themen 6
G http-Port beim Apache Tomcat ändern Java Basics - Anfänger-Themen 1
G HTTP Server Java Basics - Anfänger-Themen 2
G HTTP Body? Java Basics - Anfänger-Themen 4
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
M Http Redirect Java Basics - Anfänger-Themen 5
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
T mit einem string der form"[url]http://www.*.*/*"[/url] datei Java Basics - Anfänger-Themen 3
G http client Java Basics - Anfänger-Themen 4
Avalon Request direkt aus Eclipse wie bei Postman Java Basics - Anfänger-Themen 3
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
B Dropbox Anbindung, Hilfe bei Authentification -> HttpServletRequest request Java Basics - Anfänger-Themen 3
G Fake Request an AppServer Java Basics - Anfänger-Themen 8
B Input/Output HttpURLConnection ( java.net ) Post request Java Basics - Anfänger-Themen 8
N ArrayList: Das zweite Element wird zur Liste nicht eingefügt nach dem zweiten request. Java Basics - Anfänger-Themen 3
J Html zugriff - POST Request/Response Java Basics - Anfänger-Themen 4
J Java.Util.Properties wrapper class (Review Request) Java Basics - Anfänger-Themen 2
G vordefinierte Methoden der Variable "request" in J Java Basics - Anfänger-Themen 7
G in JSP auf request-Parameter zugreifen Java Basics - Anfänger-Themen 3
G String str = request.getParameter(String s) ? Java Basics - Anfänger-Themen 2
D mit request.getParameter("x") rechnen Java Basics - Anfänger-Themen 3
K request.getParameterMap() Java Basics - Anfänger-Themen 9
T Bei Struts Beans updaten ohne ein Request zu verarbeiten Java Basics - Anfänger-Themen 4
G Servlet gibt über request nur null zurück Java Basics - Anfänger-Themen 3
R Beiß mir die Zähne aus an der Request-Parameter-Übergabe! Java Basics - Anfänger-Themen 10
H Überprüfen ob Request mit enctype=multipart/form-data Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben