# Verbindung über Proxy// Problem mit Outputstream bei URLConn



## madmufflon (22. Jan 2009)

hey,
//edit: das problem hat sich geändert, 2 posts weiter unten
ich habe ein programm, das einen http request abschickt. die antwort kommt auch ordnungsgemäß zurück (is zwar die falsche, aber das ist ein adneres problem). Das problem ist nur, dass das ganze über einen proxy laufen soll. 
hab also squid installiert, firefox läuft da auch wunderbar drüber, nur mein javaprogramm nicht. 
habs bereits auf mehrere weisen versucht:

```
System.setProperty("http.proxySet", "true");
        
        System.setProperty("http.proxyHost", proxy);
        System.setProperty("http.proxyPort", String.valueOf(proxyport) );
```
hat nicht gewirkt, das  hier leider auch nicht, der request wird zwar abgesendet, aber er taucht nicht im squid log auf und läuft auch bei falschen proxy daten, die spielen also garkeine rolle. iich hab keine ahnung woran es liegt und wäre für jede hilfe dankbar.
der http request erfolgt über eine normale socket verbindung.
gruß
martin

edit: titel geändert


----------



## Gelöschtes Mitglied 5909 (22. Jan 2009)

probier das mal aus:



```
import java.io.IOException;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.Socket;

public class Connection {

    private final static int DEFAULT_TIMEOUT = 500;

    private String           host;
    private int              port;

    private boolean          proxyEnabled    = false;

    private Proxy            proxy           = Proxy.NO_PROXY;

    public Connection( String host, int port ) {
        this.host = host;
        this.port = port;
    }

    public boolean isReachable() {
        Socket socket = null;
        try {
            socket = new Socket(proxy);
            socket.setKeepAlive(false);
            socket.setSoTimeout(DEFAULT_TIMEOUT);
            socket.connect(new InetSocketAddress(host, port));
            return true;
        } catch ( IllegalArgumentException e ) {
            setProxy(null, -1);
            return false;
        } catch ( IOException e ) {
            return false;
        } finally {
            if ( socket != null ) try {
                socket.close();
            } catch ( IOException e ) {}
        }
    }

    public boolean isProxyEnabled() {
        return proxyEnabled;
    }

    public void setProxyEnabled( boolean proxyEnabled ) {
        this.proxyEnabled = proxyEnabled;
    }

    public void setProxy( String inetAddress, int port ) {
        if ( inetAddress != null ) {
            proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(inetAddress, port));
            setProxyEnabled(true);
        }
        else {
            proxy = Proxy.NO_PROXY;
            setProxyEnabled(false);
            Authenticator.setDefault(null);
        }
    }

    public void setProxyAuthentication( String user, String pass ) {
        if ( user != null ) {
            Authenticator.setDefault(new ProxyAuthenticator(user, pass));
        }
        else {
            Authenticator.setDefault(null);
        }
    }

    private class ProxyAuthenticator extends Authenticator {

        private PasswordAuthentication pwdAuth;

        public ProxyAuthenticator( String user, String pass ) {
            pwdAuth = new PasswordAuthentication(user, pass.toCharArray());
        }

        protected PasswordAuthentication getPasswordAuthentication() {
            return pwdAuth;
        }
    }

}
```


----------



## madmufflon (25. Jan 2009)

hey, 
nachdem ich mit dem Socket nicht ganz klar gekommen bin hab ich jetzt doch auf URLConnection gewechselt. Dabei hab ich jetzt folgendes Problem. Ich will Daten an den Server schicken und es klappt einfach nicht. ich verwende folgenden code:

```
urlconnection = getUrl();
		
		this.setHeaderAndFooter();
                         
                DataOutputStream out = new DataOutputStream(urlconnection.getOutputStream());
                out.writeBytes("string=hallowelt");
                out.close();
                               
                BufferedReader URLinput = new BufferedReader(
                new InputStreamReader(urlconnection.getInputStream()));
                
                URLinput.close();

               
                System.exit(0);

private void setHeaderAndFooter() throws IOException{

                urlconnection.addRequestProperty("Host", url.getHost());

                urlconnection.addRequestProperty("User-Agent","Mozilla/5.0 (Java/UploadVertretungsplan;)");
                urlconnection.addRequestProperty("Accept","text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
                urlconnection.addRequestProperty("Accept-Language","en-us,en;q=0.5");
                urlconnection.addRequestProperty("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
                urlconnection.addRequestProperty("Connection", "close");
                urlconnection.addRequestProperty("Content-Type","multipart/form-data; boundary=" + boundary);
        }

private URLConnection getUrl() throws IOException, UnknownHostException{
                        
                        //Das ganze läuft immer noch über einen proxy
                        URLConnection urlc;
                        Proxy pr;
                        int port = main.getProxyPort();
                        if(port < 1) {
                            port = 80;
                        }
                        InetAddress ip = Inet4Address.getByName(main.getProxy());
                        InetSocketAddress sa = new InetSocketAddress(ip,port);
                                    
                        pr = new Proxy(Proxy.Type.HTTP, sa);
                        urlc = url.openConnection(pr);
                        
                        urlc.setDoOutput(true);
            
                        return urlc;
	}
```

Der Request wird auch abgeschickt, nur leider kommt beim server folgender request an:

```
POST /test/javaUpload.php HTTP/1.0
Host:localhost
User-Agent:Mozilla/5.0 (Java/UploadVertretungsplan;)
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language:en-us,en;q=0.5
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type:multipart/form-data; boundary=wyqyygmppuujegjkifhzwlgrcqeugwwepzwyrhqz
Content-Length:16
Via:1.1 martin%3a3128 (squid/2.7.STABLE3)
X-Forwarded-For:127.0.0.1
Cache-Control:max-age=259200
Connection:keep-alive
```

Ich versteh einfach nicht, warum der body des requests nicht mitgeschickt wird.
grüße
martin


----------



## Gelöschtes Mitglied 5909 (25. Jan 2009)

Für GET/POST fürde ich dir den Apache HTTPClient empfehlen, sich mit dem Zeug selber rumschlagen wäre mir zu umständlich

http://hc.apache.org/httpclient-3.x/


----------



## madmufflon (26. Jan 2009)

hab ich auch schon probiert, hat nicht funktioniert, aber wenn hier keiner ne idee hat, dann probier ich das auch nochmal


----------



## Guest (29. Jan 2009)

versuche es mal alternativ mit xLightweb (http://xlightweb.sourceforge.net/)


----------

