Apache Commons httpclient 클래스를 사용하여 HTTPS 보안에 로그인하는 문제

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

  •  16-09-2019
  •  | 
  •  

문제

IAM은 Apache Commons httpclient를 사용하여 HTTPS 보안 사이트에 로그인하려고합니다.

httpclient 패키지에서 그러한 클래스를 찾을 수 없기 때문에 httprequest와 함께 인증서를 전달할 방법이 없습니다.

누구든지 인증서 처리를 추가 해야하는 곳에 저를 안내 할 수있는 경우?

그것을 할 패키지가 있습니까?

아이디어에 열려 있습니다. 그러나 플랫폼은 자바 일만해야합니다 ..

아래에 코드를 게시했습니다.

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;
}

}
도움이 되었습니까?

해결책

OK 마침내 나는 약간 파고 솔루션을 직접 찾았습니다.

HTTP 클라이언트 3.1을 사용하여 SSL 전원 HTTPS 사이트에 로그인하기 위해 작업 코드를 붙여 넣고 있습니다. 더 좋은 방법이 있다면 피드백을 찾고 있습니까 ??

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;


}

}

다른 팁

오래 전에 나에게 일어난 일을 기반으로했기 때문에 어떤 버전의 Java 버전을 사용했는지 물어볼 것입니다. Java는 라이브러리의 일부로 제공되는 자체 SSL Cert를 가지고 있습니다. 잠시 후,이 인증서는 구식입니다. 수정은 이후 버전의 Java로 업데이트하는 것이 었습니다. 당신은 당신을 염두에 두십시오. 이것은 오래 전 이었지만, 이것이 당신의 문제 일 수 있다고 생각합니다.

또한보십시오. (다시, Java 및 Httpclient의 버전에 크게 의존 함)

Httpclient 3.0의 Contrib 섹션에는 인생을 훨씬 쉽게 만들 수있는 SSL 프로토콜 공장 세트가 있습니다. 또한보십시오 Commons-SSL

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top