4

Iamは、Apachecommonshttpclientを使用してhttpsで保護されたサイトにログインしようとしています。

HttpClientパッケージにそのようなクラスが見つからないため、httprequestと一緒に証明書を渡す方法がありません。

誰かが私に証明書処理を追加する必要がある場所を教えてくれる場合はどうすればよいですか?

それを行うためのパッケージはありますか?

Javaでこれを行う他の方法など、アイデアを受け入れることができます。ただし、プラットフォームはJavaのみである必要があります。

以下にコードを投稿しました。

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

}
4

3 に答える 3

1

HttpClient 3.0* の contrib セクションには、作業をより簡単にする一連の SSL プロトコル ファクトリがあります。commons-sslも見てください

于 2009-04-26T12:14:09.063 に答える
1

ずっと前に私に起こったことに基づいているため、使用していたJavaのバージョンをお尋ねします.Javaには、ライブラリの一部として独自のSSL証明書があります。しばらくすると、この証明書は期限切れになります。修正は、Java の新しいバージョンに更新することでした。これはずっと前のことですが、これはあなたの問題かもしれません。

も参照してください。(ここでも、Java と httpclient のバージョンに大きく依存します)

于 2009-04-26T02:52:25.450 に答える