S
Stefan_86
Hallo, folgendes Beispiel habe ich aus einem Buch entnommen. Es handelt sich dabei um einen Proxy Server, in Java geschrieben:
Ich habe das ganze auchmal ausprobiert und es funktioniert auch soweit.
Jetzt aber mein Problem: Ich möchte aus dem HTML-Code einer Webseite, die Bilder filtern, also löschen. Dazu müsste ich ja irgendwie die Zeilen, die mit <img beginnen im code suchen und dann löschen irgendwie.
Oder anders gefragt: Ich müsste ja dann den Outputstream to_client irgendwie abfangen und "filtern"?
Code:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ProxyServer {
public static void main (String[] args) throws IOException {
try {
String host="www.eurotours.at";
int remoteport=80;
int localport=8012;
System.out.println("Starting proxy for "+host+":"+remoteport+" on port"+localport);
runServer(host,remoteport,localport);
}
catch (Exception e) {
System.err.println(e);
System.err.println("Usage: java SimpleProxyServer " +"<host> <remoteport> <localport>");
}
}
public static void runServer(String host, int remoteport, int localport) throws IOException {
ServerSocket ss = new ServerSocket(localport);
final byte[] request = new byte[1024];
byte[] reply = new byte[4096];
while(true) {
Socket client = null, server = null;
try {
client = ss.accept();
final InputStream from_client = client.getInputStream();
final OutputStream to_client= client.getOutputStream();
try { server = new Socket(host, remoteport); }
catch (IOException e) {
PrintWriter out = new PrintWriter(new OutputStreamWriter(to_client));
out.println("Proxy server cannot connect to " + host + ":" +
remoteport + ":\n" + e);
out.flush();
client.close();
continue;
}
// Get server streams.
final InputStream from_server = server.getInputStream();
final OutputStream to_server = server.getOutputStream();
Thread t = new Thread() {
public void run() {
int bytes_read;
try {
while((bytes_read = from_client.read(request)) != -1) {
to_server.write(request, 0, bytes_read);
to_server.flush();
}
}
catch (IOException e) {}
try {to_server.close();} catch (IOException e) {}
}
};
// Start the client-to-server request thread running
t.start();
int bytes_read;
try {
while((bytes_read = from_server.read(reply)) != -1) {
to_client.write(reply, 0, bytes_read);
to_client.flush();
}
}
catch(IOException e) {}
// The server closed its connection to us, so close our
// connection to our client. This will make the other thread exit.
to_client.close();
}
catch (IOException e) { System.err.println(e); }
// Close the sockets no matter what happens each time through the loop.
finally {
try {
if (server != null) server.close();
if (client != null) client.close();
}
catch(IOException e) {}
}
}
}
}
Jetzt aber mein Problem: Ich möchte aus dem HTML-Code einer Webseite, die Bilder filtern, also löschen. Dazu müsste ich ja irgendwie die Zeilen, die mit <img beginnen im code suchen und dann löschen irgendwie.
Oder anders gefragt: Ich müsste ja dann den Outputstream to_client irgendwie abfangen und "filtern"?