المشكلة مع محاولة تسجيل الدخول إلى HTTPS آمن باستخدام Apache Commons HttpClient
-
16-09-2019 - |
سؤال
أنا أحاول تسجيل الدخول إلى موقع مضمون HTTPS باستخدام Apache Commons httpclient.
أنا لا أحصل على أي وسيلة لتمرير الشهادة جنبا إلى جنب مع بلدي httprequest، حيث لا يمكنني العثور على أي فئات من هذا القبيل في حزمة httpclient.
إذا كان بإمكان أي شخص أن يرشدني إلى أين أحتاج إلى إضافة شهادة الشهادة؟
أي حزمة للقيام بذلك؟
أنا منفتح على الأفكار، أي طريقة أخرى للقيام بذلك في جافا. يجب أن تكون المنصة جافا فقط ..
لقد نشرت التعليمات البرمجية أدناه.
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;
}
}
المحلول
حسنا، أخيرا فعلت بعض الحفر ووجدت الحل بنفسي،
أنا جعل رمز العمل لتسجيل الدخول إلى موقع HTTPS مدعوم SSL باستخدام عميل HTTP 3.1. تبحث عن أي ملاحظات، إذا كان هناك طريقة أفضل لهذا؟
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;
}
}
نصائح أخرى
أود أن أطلب منك إصدار جافا الذي كنت تستخدمه لأنه بناء على شيء ما حدث لي منذ وقت طويل: جافا لديه سيرت SSL الخاصة التي تأتي كجزء من المكتبة. بعد فترة من الوقت، تخرج هذه الدستور. كان الإصلاح للتحديث إلى إصدار أحدث من Java. مانع لك ذلك، كان هذا منذ وقت طويل، لكنني أعتقد أن هذا قد يكون مشكلتك.
أنظر أيضا. وبعد (مرة أخرى، تعتمد اعتمادا كبيرا على إصدارات جافا و httpclient)
في قسم المساهمة ل httpclient 3.0 * هناك مجموعة من مصانع بروتوكول SSL التي قد تجعل حياتك أسهل بكثير. انظر أيضا إلى العموم - SSL.