# simpler Proxy geht nicht



## alexpetri (28. Okt 2008)

Hi,

im sourcecode unten versuche ich einen simplen proxy aufzubauen der mir requests tunnelt
so möchte ich wenn ich im browser localhost:7070 eingebe
auf localhost:9999 verwiesen werden. Auf 9999 läuft ein httpserver.
Leider funktioniert es aber nicht so wie er soll:



> 28.10.2008 12:47:28 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
> INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
> 28.10.2008 12:47:28 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
> INFO: Retrying request
> ...



weiß jemand wo mein denkfehler liegt?


```
import java.net.Socket;

import org.apache.commons.httpclient.ConnectMethod;
import org.apache.commons.httpclient.ProxyClient;
import org.apache.commons.httpclient.ProxyClient.ConnectResponse;

public class ConnectMethodExampleForProxyClient
{

	public static void main(String args[])
	{

		ProxyClient client = new ProxyClient();
		client.getParams().setParameter("http.useragent", "Proxy Test Client");

		client.getHostConfiguration().setHost("127.0.0.1",9999);
		client.getHostConfiguration().setProxy("127.0.0.1", 7070);

		Socket socket = null;

		try
		{
			ConnectResponse response = client.connect();
			socket = response.getSocket();
			if (socket == null)
			{
				ConnectMethod method = response.getConnectMethod();
				System.err.println("Socket not created: "
						+ method.getStatusLine());
			}else{
				
				
			}
			// do something
		} catch (Exception e)
		{
			System.err.println(e);
		} finally
		{
			if (socket != null)
				try
				{
					socket.close();
				} catch (Exception fe)
				{
				}
		}
	}
}
```


----------



## HoaX (28. Okt 2008)

läuft denn auf 7070 überhaupt ein proxy? ich tippe mal auf nein ...


----------



## alexpetri (28. Okt 2008)

stimmt ... ich dachte dieser code macht genau das...
hmm dann muss ich eine andere lösung finden


----------



## HoaX (28. Okt 2008)

wieso sollte ein client einen server starten?!


----------



## alexpetri (28. Okt 2008)

hmm ich will eigentlich folgendes erreichen:
browseraufruf localhost:7070/irgendwas
soll die daten von localhost:9999/ irgendwas durchleiten..


----------



## tuxedo (28. Okt 2008)

Mach einen SocketServer der auf Port 7070 lauscht. 

Pro eingehende Verbindung wird eine Socketverbindung zu 9999 aufgebaut. 
Ein Thread wacht über eingehende Pakete an 7070 und schickt diese 1:1 an die an 9999 aufgebaut Verbindung weiter.
Ein zweiter Thread wacht an 9999 auf Daten und leitet diese an die bestehende eingehende Verbindung 7070 weiter.

Und fertig ist dein Port-Redirector ... Ein Proxy ist das jedoch nicht. Nur eine Statische "ich komme von" -> "ich gehe nach" Brücke ..

Da kannst du dann _alles_ drüber laufen lassen. Nicht nur HTTP ..
Setzt allerdings ein wenig Kennen, Können und Willen auf Socketbasis vorraus. Mit dem entsprechdnden Wissen sollte das in locker 1er Stunde fertig sein...

- Alex


----------



## Guest (29. Okt 2008)

Schau dir doch mal http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp.html an. Dort wird unter anderem beschrieben wie du einen Http Proxy in Java bauen kannst


----------



## alexpetri (30. Okt 2008)

hey danke das ist quasi ganau das was ich gesucht habe


----------

