استخدم httpclient للاتصال بعنوان URL https بدون شهادة وإرسال دفق البايت.
انسخ رمز الكود كما يلي:
الحزمة com.paic.hmreport.metaQ؛
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
استيراد java.io.InputStream؛
استيراد java.io.InputStreamReader؛
استيراد java.io.OutputStream؛
استيراد java.net.URL؛
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManagerFactory;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.Apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.InputStreamEntity;
import org.Apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
الطبقة العامة HttpsClient {
سجل السجل الثابت العام = LogFactory.getLog(HttpsClient.class);
/* للنوافذ */
/* لنظام التشغيل لينكس */
/*
* سلسلة ثابتة خاصة CLIENT_CERT_PWD = "123456"؛
* TRUST_CERT_PATH=
* "/wls/bis_emulator/apps/emulator/config/cert/BIS_FRONT_SERVER_STG_BY_ZXC.jks"
* سلسلة ثابتة خاصة TRUST_CERT_PWD = "123456"؛
*client_cert_path=
* "/wls/bis_emulator/apps/emulator/config/cert/EXV_GROUP_EAI_B2B_ZUCHE_100.jks"
* ;
*/
/**
* @param args
* @throwsIOException
* @throws ClientProtocolException
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
يرمي الفراغ الرئيسي العام (String[] args) KeyManagementException،
NoSuchAlgorithmException، ClientProtocolException، IOException {
// sendMsgOfCert("https://10.25.32.13:8007"، "مرحبًا بالعالم"، "123456"،
// "kserver.jks"، "123456"، "tclient.jks")؛
يرسل(
"https://127.0.0.1/hmreport/messageChannel.ac?sign=TEZrSHZJdDNrRFNIb0M0QnJrc3VIdDBJWDRYTTVXZGJYZHlLUkpxQlp6anQyYUJITEpSVWQzOWh4b0RvOW96TGVvN2Z hWEJ3SkZvN0JIZVhhOFRuaWZLY3VwbDExSjg2cjZFMFFvNHV4YktJd3E0T2RvTmVhQzV6NV hNTzJLN1NaNWpoUUhTVTR0NTNEdWFOVHpuZjh1ajA0VUhqaFBWRTJvM0s2dnEyTFVnPQ==",
"مرحبا بالعالم!")؛
}
سلسلة ثابتة عامة sendMsgOfCert (String urlString، String requestData،
سلسلة CLIENT_CERT_PWD، سلسلة CLIENT_CERT_PATH،
السلسلة TRUST_CERT_PWD، السلسلة TRUST_CERT_PATH) {
StringBuffer sb = null;
يحاول {
log.info("ابدأ في تهيئة عميل https!");
SSLContext sslContext = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory
.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(ClassLoader.getSystemResourceAsStream(CLIENT_CERT_PATH)،
CLIENT_CERT_PWD.toCharArray());
kmf.init(ks, CLIENT_CERT_PWD.toCharArray());
KeyStore tks = KeyStore.getInstance("JKS");
tks.load(ClassLoader.getSystemResourceAsStream(TRUST_CERT_PATH)،
TRUST_CERT_PWD.toCharArray());
tmf.init(tks);
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
التحقق المنطقي العام (String arg0، SSLSession arg1) {
عودة صحيحة؛
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// URL url = new URL("https://172.40.1.83:8007");
URL url = عنوان URL جديد(urlString);
HttpsURLConnection urlCon = (HttpsURLConnection) url
.openConnection();
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
urlCon.setRequestMethod("POST");
urlCon.setRequestProperty("نوع المحتوى"،
"text/xml;charset=GB18030");
urlCon.setSSLSocketFactory(sslContext.getSocketFactory());
OutputStream os = urlCon.getOutputStream();
InputStream fis = new ByteArrayInputStream(requestData
.getBytes("GB18030"));
BufferedInputStream bis = new BufferedInputStream(fis);
بايت[] بايت = بايت جديد[1024];
إنت لين = -1;
بينما ((len = bis.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
os.flush();
مكرر.إغلاق();
fis. Close();
os.Close();
InputStream هو = urlCon.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is،
"GB18030"))؛
// DataInputStream indata = new DataInputStream(is);
// سلسلة ret = "";
// سلسلة str_return = "";
// بينما (ريت!= فارغة) {
// ret = indata.readLine();
// إذا (ret != null && !ret.trim().equals("")) {
// str_return = str_return
// + new String(ret.getBytes("ISO-8859-1"), "GBK");
// }
// }
// System.out.println("str_return:" + str_return);
// System.out.println("br.readLine():"+new
// String(br.readLine().getBytes("GBK"), "GBK"));
sb = new StringBuffer();
خط السلسلة؛
بينما ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println("sb:" + sb);
br. Close();
قريب () ؛
urlCon.disconnect();
} قبض (الاستثناء ه) {
e.fillInStackTrace();
log.info("فشل استدعاء العميل:" + e.getMessage());
طرح RuntimeException الجديد ("فشل استدعاء https!")؛
}
عودة فارغة؛
}
إرسال الفراغ الثابت العام (سلسلة requsetString، سلسلة requestData)
يلقي NoSuchAlgorithmException، KeyManagementException،
ClientProtocolException، IOException {
// قم أولاً بإنشاء مدير ثقة لا يهتم.
X509TrustManager TrustManager = جديد X509TrustManager() {
التحقق من الفراغ العامClientTrusted(X509Certificate[] سلسلة،
سلسلة authType) تطرح استثناء الشهادة {
// لا تفعل أي شيء.
}
سلسلة checkServerTrusted باطلة عامة (X509Certificate[]،
سلسلة authType) تطرح استثناء الشهادة {
// لا تفعل أي شيء.
}
X509Certificate العامة[] getAcceptedIssuers() {
// لا تفعل أي شيء.
عودة فارغة؛
}
};
// الآن ضع مدير الثقة في SSLContext.
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new TrustManager[] { TrustManager }, null);
// استخدم نص SSLContext أعلاه لإنشاء مصنع المقبس الخاص بك
// (لقد وجدت أن محاولة توسيع المصنع صعبة بعض الشيء بسبب ملف
// استدعاء createSocket بدون وسيطات، وهي طريقة لا تفعل ذلك
// موجود في أي مكان يمكنني العثور عليه، ولكن مهلا).
SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getConnectionManager().getSchemeRegistry().register(
مخطط جديد ("https"، sf، 443))؛
// طلب السلسلة = "https://180.168.35.140/api/vm.list";
HttpPost httpPost = new HttpPost(requsetString);
نتيجة السلسلة = ""؛
// تنفيذ طلب HTTP
httpPost.setHeader("التفويض"، "أساسي"
+ "dGNsb3VkYWRtaW46dGNsb3VkMTIz");
httpPost.setHeader("نوع المحتوى"، "application/xml");
StringEntity reqEntity;
// قم بتغليف معلمات الطلب في HttpEntity
reqEntity = new StringEntity(requestData);
BufferedHttpEntity bhe = new BufferedHttpEntity(reqEntity);
httpPost.setEntity(bhe);
استجابة HttpResponse = httpclient.execute(httpPost);
HttpEntity resEntity = Response.getEntity();
قارئ InputStreamReader = new InputStreamReader(resEntity.getContent());
char[] برتقالي = جديد char[1024];
طول كثافة العمليات = 0؛
بينما ((الطول = Reader.read(برتقالي)) != -1) {
result += new String(buff, 0, length);
}
httpclient.getConnectionManager().shutdown();
System.out.println(">>>:" + result);
}
اختبار الفراغ الثابت العام () {
كلمات السلسلة = "مرحبا"؛
يحاول {
FileOutputStream out = new FileOutputStream("D:/file.txt");
out.write(words.getBytes());
out.flush();
out.Close();
} قبض (الاستثناء ه) {
// TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا
printStackTrace();
}
}
}