On Thu, 2006-04-20 at 19:19 +0200, Thierry Sechao wrote:
> ok, there is it.
> 

Now that I have spotted the problem it actually looks plain dead simple.

> The main metod just call this method. I get the IOException
> 
> java.io.IOException: Connection through proxy could not be opened
>       at test.KeepCLient.connect2(KeepCLient.java:254)
>       at test.KeepCLient.main(KeepCLient.java:100)
> 
> 
> private void connect2() throws IOException
> {
>       ProxyClient proxyClient = new ProxyClient();
>       proxyClient.getParams().setAuthenticationPreemptive(true) ;
>               
>       HostConfiguration hostConfiguration = 
> proxyClient.getHostConfiguration();
> 
>       //hostConfiguration.setHost("myhost", 443, "https");
>       hostConfiguration.setHost("myhost", 443, new Protocol("https", new 
> SSLProtocolSocketFactory(), 443));

You are not supposed to use a secure socket factory here, because the
job of ProxyClient is to set up a plain text connection with the proxy,
which can be used to tunnel any _arbitrary_ protocol, not just SSL.

Here's what you are supposed to do

(1) Request a plain connection to the target host via the proxy

hostConfiguration.setHost("myhost", 443);

(2) Establish a connection to the proxy

ProxyClient.ConnectResponse response = proxyClient.connect();
if (response.getSocket() != null) {
 // tunnel SSL via the resultant socket
 SSLProtocolSocketFactory sslSocketFactory = 
   new SSLProtocolSocketFactory();
 Socket sslsocket = sslSocketFactory.createSocket(
   response.getSocket(), 
   "myhost", 443, true);
} else {
 // say oopsie
}

(3) You are done

Oleg


>       //hostConfiguration.setHost("myhost", 443);
> 
>       hostConfiguration.setProxy("myproxy", 8080) ;
>               
>       Credentials userCredential = new UsernamePasswordCredentials("mylogin", 
> "mypassword") ;
>       proxyClient.getState().setProxyCredentials(new AuthScope("myproxy", 
> 8080, AuthScope.ANY_REALM), userCredential) ; 
>       //proxyClient.getState().setProxyCredentials(new AuthScope("myproxy", 
> 8080, "MYREALM"), userCredential) ;   
> 
>       ProxyClient.ConnectResponse response = proxyClient.connect();
>       if (response.getSocket() == null) {
>               throw new IOException("Connection through proxy could not be 
> opened");
>       }
>               
>       String EOF = "\r\n" ;
>       Socket socket = response.getSocket() ;  
>       String request= "GET / HTTP/1.1" + EOF + EOF ;
> 
>       PrintWriter out = new PrintWriter( new BufferedWriter(
>                                                        new 
> OutputStreamWriter(socket.getOutputStream())));
>                       
>          out.println(request);
>          out.println();
>          out.flush();
> 
>       BufferedReader din = new BufferedReader(new 
> InputStreamReader(socket.getInputStream()));
>       String text = din.readLine() ;
>       int i = 0 ;
>       while(text != null){
>               System.out.println(text);
>               text = din.readLine() ;
>          }
>               
>       System.out.println("fin.");
> }
> 
> 
> 
> Oleg Kalnichevski wrote:
> > On Thu, 2006-04-20 at 16:48 +0200, Thierry Sechao wrote:
> > 
> >>Oleg,
> >>
> >>Thanks for your reply,
> >>
> >>when I execute the test which works fine, that is I just change the ligne
> >>
> >>hostConfiguration.setHost("myhost", 443, new Protocol("https", new 
> >>SSLProtocolSocketFactory(), 443));
> >>
> >>by
> >>
> >>hostConfiguration.setHost("myhost", 443);
> >>
> >>I have some log (see below) which looks similar "Required credentials 
> >>not available for BASIC <any realm>@myhost:443 ...",  but it works!
> > 
> > 
> > BASIC <any realm>@myhost:443
> > 
> > This has nothing to do with proxy authentication.
> > 
> > 
> > 
> >>I notice that this time, the mode preemptive works too. the 
> >>Proxy-Authorization header is submitted at the first request whereas in 
> >>the failed test, it is never submitted.
> >>
> >>I also try to set the REALM without success.
> >>
> >>proxyClient.getState().setProxyCredentials(new AuthScope("myproxy", 
> >>8080, "MYREALM"), userCredential) ; 
> >>
> >>thanks again.
> >>
> > 
> > 
> > Post the *complete* source code of your test app
> > 
> > Oleg
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to