You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Richard Jose <ri...@rediffmail.com> on 2011/03/30 03:44:06 UTC

Establishing a session with REST API using httpclient 4.1

Hello everyone, 

Below is a simple code I am trying to run to consume a REST service with
Apache's httpclient 4.1. I was of the opinion authscope would take care of
the sessions but I was obviously wrong Can someone please point out what I
am missing. Kind of stuck. Session keeps getting expired bbetween REST
requests. 


//Main Class

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


/**
 * A simple example that uses HttpClient to execute an HTTP request against
 * a target site that requires user authentication.
 */
public class ClientAuthentication {

    public static void main(String[] args) throws Exception {
          	
    	DefaultHttpClient httpclient =
HttpClientIgnoreInvalidSSLCertificate.createClient();
    	//DefaultHttpClient httpclient = new DefaultHttpClient();
        
    	try {
            	
        	    httpclient.getCredentialsProvider().setCredentials(
                    new AuthScope("dam-vchg01.land.virtual", 443),
                    new UsernamePasswordCredentials("rjose", "rjose6345"));

            HttpGet httpget = new
HttpGet("https://dam-vchg01.land.virtual/vCenter-CB/api/costModels/");

            System.out.println("executing request" +
httpget.getRequestLine());
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            if (entity != null) {
                System.out.println("Response content length: " +
entity.getContentLength());
                
                try {

                    BufferedReader reader = new BufferedReader(
                            new
InputStreamReader(response.getEntity().getContent()));
                    String line = "";
                    
                    System.out.println("\nHere's the response:\n");
                    while ((line=reader.readLine())!= null)
                    {
                          	System.out.println(line);
                    }

                } catch (IOException ex) {

                    ex.printStackTrace();
                	throw ex;

                } catch (RuntimeException ex) {
       
                    httpget.abort();
                    throw ex;

                } finally {

                    //Nothing
                    
                }
                
            }
            EntityUtils.consume(entity);
        } finally {
           
            httpclient.getConnectionManager().shutdown();
        }
    }
}



//Another Helper Class


import org.apache.http.impl.client.DefaultHttpClient;

import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
 

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;


import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
//import org.apache.http.conn.ssl.X509HostnameVerifier;


public class HttpClientIgnoreInvalidSSLCertificate { 

    
	public static DefaultHttpClient createClient() { 
        try { 
        DefaultHttpClient base = new DefaultHttpClient(); 
            SSLContext ctx = SSLContext.getInstance("TLS"); 
            X509TrustManager tm = new X509TrustManager() { 

                public void checkClientTrusted(X509Certificate[] xcs, 
String string) throws CertificateException { 
                } 

                public void checkServerTrusted(X509Certificate[] xcs, 
String string) throws CertificateException { 
                } 

                public X509Certificate[] getAcceptedIssuers() { 
                    return null; 
                } 
            }; 
            ctx.init(null, new TrustManager[]{tm}, null); 
           
//ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            SSLSocketFactory ssf = new
SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER ); 
            ClientConnectionManager ccm = base.getConnectionManager(); 
            SchemeRegistry sr = ccm.getSchemeRegistry(); 
            sr.register(new Scheme("https", 443, ssf)); 
            return new DefaultHttpClient(ccm, base.getParams()); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
            return null; 
        } 
    } 
} 



Console Output:
executing requestGET
https://dam-vchg01.land.virtual/vCenter-CB/api/costModels/ HTTP/1.1
----------------------------------------
HTTP/1.1 200 OK
Response content length: 318

Here's the response:

<?xml version="1.0" encoding="UTF-8"?>

  


Someone please help me or atleast point me in the right direction as to how
I can access this REST service without having to provide the authentication
details over and over and without getting session expired error.

Note: Actually the REST response should be an xml.


Thanks,
Richard
-- 
View this message in context: http://old.nabble.com/Establishing-a-session-with-REST-API-using-httpclient-4.1-tp31273172p31273172.html
Sent from the HttpClient-User mailing list archive at Nabble.com.