Problema con tratar de acceder a un seguro HTTPS utilizando apache commons httpclient clase

StackOverflow https://stackoverflow.com/questions/790004

  •  16-09-2019
  •  | 
  •  

Pregunta

Iam tratando de iniciar sesión en un sitio seguro https utilizando Apache Commons httpclient.

Iam no obtener ninguna manera de pasar el certificado junto con mi HttpRequest, ya que no puedo encontrar ningún tipo de clases en HttpClient paquete.

Si alguien me puede orientar sobre dónde necesito añadir la gestión de certificados?

Cualquier paquete hacerlo?

Am abierto a las ideas, cualquier otra forma de hacer esto en Java. La plataforma debe ser única java sin embargo ..

He publicado mi código de abajo.

import java.net.MalformedURLException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;


public class TestHttpClient {
public static String formPostUrl ="https://login.findmespot.com/faces/welcome.jsp" ;
public static String LOGON_SITE = "login.findmespot.com";
static final int    LOGON_PORT = 443;
public static void main(String[] args ) throws MalformedURLException
{
   // AuthSSLProtocolSocketFactory ar= new AuthSSLProtocolSocketFactory(uRL, formPostUrl, uRL0, formPostUrl)
     //Protocol authhttps = new  Protocol("https", new AuthSSLProtocolSocketFactory(new URL("D:\key\my.keystore"), "4cKR!Z%p",new URL("D:\key\my.truststore"), "4cKR!Z%p"), 443);



    HttpClient client = new HttpClient();

    client.getHostConfiguration().setHost("login.findmespot.com",443,authhttps);
    HttpMethod authGetmethod = new GetMethod("/index.jsp");
        authGetmethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9");
        authGetmethod.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        authGetmethod.setRequestHeader("Accept-Language","en-us,en;q=0.5");
        authGetmethod.setRequestHeader("Accept-Encoding","gzip,deflate");
        authGetmethod.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        authGetmethod.setRequestHeader("Keep-Alive","300");
        authGetmethod.setRequestHeader("Connection","keep-alive");
        authGetmethod.setRequestHeader("Referer","https://login.findmespot.com/faces/welcome.jsp");

    client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);



    try
    {
    //send first request to capture cookie information
    int status = client.executeMethod(authGetmethod);


    BufferedReader br   = new  BufferedReader(new InputStreamReader(authGetmethod.getResponseBodyAsStream()));

      String str ="";
      String resultJsessionid="";
             while((str=br.readLine())!=null )
               {
                 if(str.indexOf("jsessionid=")!=-1)
                 {
                     //capture Session ID
                     resultJsessionid=getJsessionid(str);
                  break;
                 }
               }

      //release connection for final login request
      authGetmethod.releaseConnection();

      //Process the Initial Set of Cookies

      CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
        Cookie[] initcookies = cookiespec.match(
            LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());
        System.out.println("Initial set of cookies:");
        if (initcookies.length == 0) {
            System.out.println("None");
        } else {
            for (int i = 0; i < initcookies.length; i++) {
                System.out.println("- " + initcookies[i].toString());
            }
        }

        //try to login to the form

        PostMethod authpost = new PostMethod("/faces/welcome.jsp?jessionid="+resultJsessionid );
        // Set Headers

        authpost.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9");
        authpost.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        authpost.setRequestHeader("Accept-Language","en-us,en;q=0.5");
        authpost.setRequestHeader("Accept-Encoding","gzip,deflate");
        authpost.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        authpost.setRequestHeader("Keep-Alive","300");
        authpost.setRequestHeader("Connection","keep-alive");
        authpost.setRequestHeader("Referer","https://login.findmespot.com/faces/welcome.jsp");




        // Prepare login parameters
        NameValuePair inputtext1      = new NameValuePair("inputText1","TANGOFOUR");
        NameValuePair inputtext5   = new NameValuePair("inputText5", "4cKR%21Z%25p");
        NameValuePair oafF = new NameValuePair("oracle.adf.faces.FORM", "form11");
        NameValuePair source      = new NameValuePair("source","commandButton1");
        NameValuePair event   = new NameValuePair("event", "update");
        NameValuePair partialTarget = new NameValuePair("partialTarget", "");
        NameValuePair partial = new NameValuePair("partial", "true");





        authpost.setRequestBody(
          new NameValuePair[] {inputtext1,inputtext5,oafF,source,event,partialTarget,partial});

        client.executeMethod(authpost);
        System.out.println("Login form post: " + authpost.getStatusLine().toString());
        // release any connection resources used by the method
        authpost.releaseConnection();
        // See if we got any cookies
        // The only way of telling whether logon succeeded is
        // by finding a session cookie
        Cookie[] logoncookies = cookiespec.match(
            LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());
        System.out.println("Logon cookies:");
        if (logoncookies.length == 0) {
            System.out.println("None");
        } else {
            for (int i = 0; i < logoncookies.length; i++) {
                System.out.println("- " + logoncookies[i].toString());
            }
        }








    System.out.println(resultJsessionid);
    }
    catch(Exception ex)
    {
        System.out.println(ex.getMessage());
    }


}
public static String getJsessionid(String responseText)
{

    String jsession="";
    int start_index= responseText.indexOf("jsessionid=");
    if(start_index!=-1)
    {
       jsession= responseText.substring(start_index+11);
    }
    int last_index=jsession.indexOf("\"");
    if(last_index!=-1)
    jsession=jsession.substring(0,last_index);
 return jsession;
}

}
¿Fue útil?

Solución

Ok finalmente hizo algo de investigación y descubrió la solución a mí mismo,

Estoy pegando el código de trabajo para iniciar sesión en un sitio https potencia utilizando SSL cliente HTTP 3.1. En busca de cualquier regeneración, si hay una forma mejor de esto ??

import java.net.MalformedURLException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;



import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.URL;


public class TestHttpClient {
public static String formPostUrl ="https://login.findmespot.com/faces/welcome.jsp" ;
public static String LOGON_SITE = "login.findmespot.com";
static final int    LOGON_PORT = 443;
public static void main(String[] args ) throws MalformedURLException
{
        String nextHref="";
        HttpClient client = new HttpClient();

        HttpMethod authGetmethod = new GetMethod("https://login.findmespot.com/index.jsp");
        authGetmethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9");
        authGetmethod.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        authGetmethod.setRequestHeader("Accept-Language","en-us,en;q=0.5");
        authGetmethod.setRequestHeader("Accept-Encoding","gzip,deflate");
        authGetmethod.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        authGetmethod.setRequestHeader("Keep-Alive","300");
        authGetmethod.setRequestHeader("Connection","keep-alive");

        //authGetmethod.setRequestHeader("Referer","https://login.findmespot.com/faces/welcome.jsp");

    try
    {
        //send first request to capture cookie information
       int status = client.executeMethod(authGetmethod);


      BufferedReader br   = new  BufferedReader(new InputStreamReader(authGetmethod.getResponseBodyAsStream()));

       String str ="";
       String resultJsessionid="";
             while((str=br.readLine())!=null )
               {
                 if(str.indexOf("jsessionid=")!=-1)
                 {
                     //capture Session ID
                     resultJsessionid=getJsessionid(str);
                  break;
                 }
               }

           //release connection for final login request
      authGetmethod.releaseConnection();

           client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);

       Cookie[] cookies = client.getState().getCookies();
      for (int i = 0; i < cookies.length; i++) {
        Cookie cookie = cookies[i];
        System.err.println(
          "Cookie: " + cookie.getName() +
          ", Value: " + cookie.getValue() +
          ", IsPersistent?: " + cookie.isPersistent() +
          ", Expiry Date: " + cookie.getExpiryDate() +
          ", Comment: " + cookie.getComment());


        //PostMethod authpost = new PostMethod("https://login.findmespot.com/faces/welcome.jsp?jessionid="+resultJsessionid );
        PostMethod authpost = new PostMethod("https://login.findmespot.com/faces/welcome.jsp");
        // Set Headers
        authpost.setRequestHeader("http.Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9");
        authpost.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        authpost.setRequestHeader("Accept-Language","en-us,en;q=0.5");
        authpost.setRequestHeader("Accept-Encoding","gzip,deflate");
        authpost.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        authpost.setRequestHeader("Keep-Alive","300");
        authpost.setRequestHeader("Connection","keep-alive");
        authpost.setRequestHeader("Referer","https://login.findmespot.com/faces/index.jsp");



        // Prepare login parameters
        NameValuePair inputtext1      = new NameValuePair("inputText1","TANGOFOUR");
        NameValuePair inputtext5   = new NameValuePair("inputText5", "~CcxpqFR");
        NameValuePair oafF = new NameValuePair("oracle.adf.faces.FORM", "form11");
        NameValuePair source      = new NameValuePair("source","commandButton1");
        NameValuePair event   = new NameValuePair("event", "update");
        NameValuePair partialTarget = new NameValuePair("partialTarget", "");
        NameValuePair partial = new NameValuePair("partial", "true");

        authpost.setRequestBody(
          new NameValuePair[] {inputtext1,inputtext5,oafF,source,event,partialTarget,partial});

        client.executeMethod(authpost);
        System.out.println("Login form post: " + authpost.getStatusLine().toString());
        // release any connection resources used by the method


        String readLine;

          br = new BufferedReader(new InputStreamReader(authpost.getResponseBodyAsStream()));
             while(((readLine = br.readLine()) != null)) {
              System.out.println(readLine);
              nextHref=getNexthref(readLine);
          }

          authpost.releaseConnection();


         Cookie[] cookies1 = client.getState().getCookies();
            for (int i1 = 0; i < cookies1.length; i++) {
        Cookie cookie1 = cookies1[i1];
        System.err.println(
          "Cookie: " + cookie1.getName() +
          ", Value: " + cookie1.getValue() +
          ", IsPersistent?: " + cookie1.isPersistent() +
          ", Expiry Date: " + cookie1.getExpiryDate() +
          ", Comment: " + cookie1.getComment());



       HttpMethod authGetmethodNext = new GetMethod("https://login.findmespot.com"+nextHref);
        authGetmethodNext.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9");
        authGetmethodNext.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        authGetmethodNext.setRequestHeader("Accept-Language","en-us,en;q=0.5");
        authGetmethodNext.setRequestHeader("Accept-Encoding","gzip,deflate");
        authGetmethodNext.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        authGetmethodNext.setRequestHeader("Keep-Alive","300");
        authGetmethodNext.setRequestHeader("Connection","keep-alive");
        authGetmethodNext.setRequestHeader("Referer","https://login.findmespot.com/faces/welcome.jsp");


        client.executeMethod(authGetmethodNext);
         System.out.println("Login form post: " + authGetmethodNext.getStatusLine().toString());

        PostMethod authpost1 = new PostMethod("https://login.findmespot.com/faces/history.jsp");
        // Set Headers
        authpost1.setRequestHeader("http.Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9");
        authpost1.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        authpost1.setRequestHeader("Accept-Language","en-us,en;q=0.5");
        authpost1.setRequestHeader("Accept-Encoding","gzip,deflate");
        authpost1.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        authpost1.setRequestHeader("Keep-Alive","300");
        authpost1.setRequestHeader("Connection","keep-alive");
        authpost1.setRequestHeader("Referer","Referer: https://login.findmespot.com/faces/trackerunit.jsp");


               client.executeMethod(authpost1);

           br = new BufferedReader(new InputStreamReader(authpost1.getResponseBodyAsStream()));
             while(((readLine = br.readLine()) != null))
             {
              System.out.println(readLine);
              }

      }
      }
    }
  catch(Exception ex)
   {
        System.out.println(ex.getMessage());
    }


}
public static String getJsessionid(String responseText) /// retu
{

    String jsession="";
    int start_index= responseText.indexOf("jsessionid=");
    if(start_index!=-1)
    {
       jsession= responseText.substring(start_index+11);
    }
    int last_index=jsession.indexOf("\"");
    if(last_index!=-1)
    jsession=jsession.substring(0,last_index);
 return jsession;
}

public static String getNexthref(String inputhref)
{
   String result_href="";
   int start_index=inputhref.indexOf("href='");
     if(start_index!=-1)
   {
       result_href=inputhref.substring(start_index+6);
   }
     int last_index=result_href.indexOf("'");
   if(last_index!=-1)
       result_href=result_href.substring(0,last_index);

   return result_href;


}

}

Otros consejos

Me preguntará qué versión de Java que estaba utilizando porque se basa en algo que me pasó hace mucho tiempo: Java tiene su propio certificado SSL que viene como parte de la biblioteca. Después de un tiempo, este certificado se va fuera de fecha. La solución fue actualizar a una versión posterior de Java. Eso sí, esto fue hace mucho tiempo, pero creo que esto podría ser su problema.

Ver también . (De nuevo, altamente dependiente de versiones de java y httpclient)

En la sección contrib para HttpClient 3.0 * hay un conjunto de fábricas de protocolo SSL que podrían hacer su vida mucho más fácil. También mire Commons-ssl

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top