Hallo!
Ich hoffe jemand kann mir bei meinem "Problem" helfen.
Ich soll mittels HTTP/1.0 - also die Anfrage eines Browsers an einen Proxy weiterleiten, der dann die angeforderte Website liest und an den Browser zurückgibt.
Nun besteht mein Problem darin, dass ich quasi 2 Abfragen habe, die einerseits überpfrüfen auf HTML/Text oder ob es sich z.B. um ein Bild handelt.
Ich habe irgendwo gelesen, dass man dies in einem Schritt machen kann - also nur ein InputStream bzw. OutputStream....
Ich habe zwar schon eine Variante die funktioniert, aber vielleicht weiss jemand von euch wie man diese Methode effizienter gestaltet. (ist eben mit 2 In- und 2 OutputStreams)
mfg
Ich hoffe jemand kann mir bei meinem "Problem" helfen.
Ich soll mittels HTTP/1.0 - also die Anfrage eines Browsers an einen Proxy weiterleiten, der dann die angeforderte Website liest und an den Browser zurückgibt.
Nun besteht mein Problem darin, dass ich quasi 2 Abfragen habe, die einerseits überpfrüfen auf HTML/Text oder ob es sich z.B. um ein Bild handelt.
Ich habe irgendwo gelesen, dass man dies in einem Schritt machen kann - also nur ein InputStream bzw. OutputStream....
Ich habe zwar schon eine Variante die funktioniert, aber vielleicht weiss jemand von euch wie man diese Methode effizienter gestaltet. (ist eben mit 2 In- und 2 OutputStreams)
Code:
/**
* Diese Methode liefert die eigentliche Website. Man muss zwischen 2 Verbindungen
* unterscheiden. In dieser Methode wird ein Input für HTML und ein Input für Daten
* erzeugt.
*/
private void getWebsiteContent() {
// Quelle:
// http://www.galileocomputing.de/openbook/javainsel4/javainsel_16_002.htm#Rxx365java160020400062E1F028114
try {
URL connectionToWeb = new URL(this.path);
URLConnection connection = null;
try {
connection = connectionToWeb.openConnection();
}
catch (IOException ex1) {
System.out.println("Verbindung zu Webserver konnte nicht aufgebaut werden.");
}
try {
// Leser für normale html Seiten.
BufferedReader readNormalWebsite = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
// schreibt zum Clienten
OutputStream writeWebsite = socket.getOutputStream();
// InputStream für Dateien.
InputStream readDataWebsite = connectionToWeb.openStream();
// ####################################################
clientOut.println( "HTTP/1.0 200 OK" );
clientOut.println( "Date : " + new Date(connection.getDate()) );
clientOut.println( "Last Modified : " + new Date(connection.getLastModified()) );
clientOut.println( "Content encoding: " + connection.getContentEncoding() );
// clientOut.println( "Content type : " + connection.getContentType() );
// clientOut.println( "Content length : " + connection.getContentLength() );
clientOut.println();
// ####################################################
// wenn es sich um eine "NORMAL" Seite handelt.
if (connection.getContentType().equals("text/html"))
{
webserverResponse = "";
String line = "";
while ( (line = readNormalWebsite.readLine()) != null) {
webserverResponse = webserverResponse + line;
}
clientOut.println(webserverResponse);
}
// wenn es sich um eine Datei handelt - Bilder etc.
else
{
byte data[] = new byte[connection.getContentLength()];
int number=0, end=0;
for(int start=0; start<connection.getContentLength();)
{
end=connection.getContentLength()-start;
number = readDataWebsite.read(data, start, end);
start = start + number;
}
writeWebsite.write(data, 0, connection.getContentLength());
writeWebsite.flush();
}
readNormalWebsite.close(); // InputStream schließen
writeWebsite.close(); // OutputStream schließen
readDataWebsite.close(); // InputStream schließen
}
catch (IOException ex) {
ex.printStackTrace();
System.out.println("FEHLER");
}
}
catch(MalformedURLException e) {
e.printStackTrace();
System.out.println("Zur angegeben URL konnte nicht verbunden werden !");
}
}
mfg