# Erstellung eines Proxy



## TR_Watto (1. Nov 2005)

Hallo,

es geht darum einen Proxy in Java zu erstellen der aus einer Webseite die Bilder herausfiltert. Der Browser soll so konfiguriert werden das der Proxy verwendet wird.

Mein Problem ist nun das ich die Aufgabenstellung garnicht so richtig verstehe. Hab zwar schon realtiv viel Erfahrung mit Java, was Netzwerkprogrammierung angeht hab ich allerdings noch garnichts gemacht. Es wäre super wenn ich mir sagen könntet was genau mit dieser Aufgabenstellung gemeint ist, welchen Sinn sie hat und wenn möglich auch wie die Lösung ungefähr aussehen könnte.

vorab schonmal vielen Dank

Gruss Watto


----------



## Mag1c (1. Nov 2005)

Hi,

so ungefähr müsste dein Proxy arbeiten:

0. lausche auf ein festgelegten Port
1. warte auf Anfragen vom Browser
2. nehme HTTP-Request vom Browser entgegen
3. falls der Request ein Bild anfordert (Dateiendung .gif oder .jpg oder .png) schicke als Antwort einen Fehler oder ein Dummy-Bild an den Browser zurück (zurück zu 1.)
4. ermittle das Ziel aus der angeforderten URL
5. kontaktiere den eigentlichen Web-Server und schicke ihm die URL
6. nehme die Daten vom Web-Server in Empfang
7. schicke die empfangenen Daten an den Web-Browser
8. und zurück zu 1.

Gruß
Mag1c


----------



## Nick H. (1. Nov 2005)

warum das denn?

ein Proxy muss einfach den Request zB vom Browser weiterleiten, ie antwort abwarten und zurück zum Browser schicken

warum sollte man denn die Bilder aufhalten
das ergibt doch keinen Sinn
das würde das ganz ja nichtmal leichter machen, sondern schwerer, da die Bilder dann ne extra behandlung brauchen


----------



## Mag1c (1. Nov 2005)

Weil das oben so in der Aufgabenstellung steht.

Gruß
Mag1c


----------



## Nick H. (1. Nov 2005)

oh sorry nicht richtig gelesen
dann wärs aber einfacher das nicht nach der Dateiendung
sondern nach dem Typ den der Server mitschickt zu machen
also zB
image/gif
image/jpg usw.

dann brauchste nur die mit image vorne wegmachen
und hast gleich alle Bilder weg


----------



## TR_Watto (1. Nov 2005)

Hallo,

könnt ihr mir irgend eine Quelle nennen wo der Kram im Detail erklärt ist. Am besten wäre natürlich Quellcode.


----------



## Bleiglanz (2. Nov 2005)

> es geht darum einen Proxy in Java zu erstellen der aus einer Webseite die Bilder herausfiltert.


du solltest mal genau schauen was die Aufgabenstellung ist

Variante A:
ein Proxy unterdrückt einfach ALLE Anfragen nach Bildern, der ganze restliche Traffic wird einfach durchgereicht
(relativ - aber nur relativ - einfach)
im browser dann kleine rote kreuze, plus langes warten usw.

Variante B:
=Variante A UND:
der Proxy fängt html Dateien ab und entfert alle img Tags aus den Webseiten bevor er sie an den Aufrufer durchgibt??


aber am besten einfach mal mit der Netzwerkprogrammierung anfangen, die Aufgabe ist nicht ohne gute Vorkenntnisse zu lösen

http://www.galileocomputing.de/open...sel16_006.htm#Rxx747java16006040006391F036100


----------



## slash (5. Nov 2005)

hi das sind doch Hausaufgaben im Webtech?
oder?

hab das gleiche Problemm
Also du must ein Url Objekt bilden und da draus UrlConnection.
URLConnection hat eine Methode die heist getContentType();
mit ihr kannst prüfen was angefordert wurde und wennn das image/gif sind dann kannst du reagrieren.


----------



## Nick H. (5. Nov 2005)

genau das meinte ich ja
das Problem an der ganzen Sache ist nur das von bleiglanz
die Ladezeit wird sehr verzögert und alles voller roter kreuze
man kann natürlich stattdessen einfach ein Fakebild nehmen
immer wenn der ContentType ein Image ist nachgucken wie groß es ist
und ein Fakebild mit gleicher größe mitgeben

das sollte aufjedenfall leichter sein als die img Tags rauszufiltern
vorrallem da Bilder ja auch so übertragen werden können


----------



## TR_Watto (8. Nov 2005)

Hallo könnt ihr mir varraten warum die Bilder so nicht angezeigt werden?



```
import java.net.*;
import java.io.*;


public class SocketServer
{	
	public static void main(String [] ags)
	{
		try 
		{
			// Server Socket für Port 80 wird erzeugt
			ServerSocket serverSocket = new ServerSocket(80);		
			
			for(;;) 
			{
			 	System.out.println("Warte auf Verbindung auf Port 80");
			 	Socket clientSocket = serverSocket.accept();		
			 	System.out.println("Verbindung hergestellt");
			 		 	
			 	 	
			 	URL myURL = new URL("...");
				URLConnection uc = myURL.openConnection();
				uc.connect();
					
				// Ausgabe der Schlüssel mit entsprechendem Header Feld
				int n = 1;
				String key;
				while ((key = uc.getHeaderFieldKey(n)) != null)
				{
					String value = uc.getHeaderField(n);
					System.out.println(key + ": " + value); 
					n++;
				}
	
				
				String line;
				BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
				OutputStreamWriter out = new OutputStreamWriter(clientSocket.getOutputStream());	
				
				while ((line = in.readLine()) != null)
				{
					out.write(line);
				}
				
				out.flush();				
				out.close();				
			 	clientSocket.close();  		
			 }
		}
		catch (IOException e)
		{
			System.err.println(e);
		}
	}
}
```


----------



## Bleiglanz (8. Nov 2005)

weil ein reader binärdaten im allgemeinen kaputtmacht?!


----------



## Nick H. (8. Nov 2005)

du musst Buffered Streams nehmen
die sind für sowas am besten geeignet
also BufferedInputStream und BufferedOutputStream

das mit dem Reader kannst du dir wie ein Texterkennungsprogramm vorstellen
wenn du dem nen Bild zeigst kann das Prog nix damit anfangen


----------

