Gunakan httpclient untuk memanggil alamat URL https tanpa sertifikat dan mengirimkan aliran byte.
Copy kode kodenya sebagai berikut:
paket com.paic.hmreport.metaQ;
impor java.io.BufferedInputStream;
impor java.io.BufferedReader;
impor java.io.ByteArrayInputStream;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor java.io.InputStream;
impor java.io.InputStreamReader;
impor java.io.OutputStream;
impor java.net.URL;
impor java.keamanan.KeyManagementException;
impor java.keamanan.KeyStore;
impor java.security.NoSuchAlgorithmException;
impor javax.net.ssl.HostnameVerifier;
impor javax.net.ssl.HttpsURLConnection;
impor javax.net.ssl.KeyManagerFactory;
impor javax.net.ssl.SSLContext;
impor javax.net.ssl.SSLSession;
impor javax.net.ssl.TrustManagerFactory;
impor java.security.cert.CertificateException;
impor java.security.cert.X509Certificate;
impor javax.net.ssl.TrustManager;
impor 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;
kelas publik HttpsClient {
Log log statis publik = LogFactory.getLog(HttpsClient.class);
/* untuk windows */
/* untuk linux */
/*
* String statis pribadi CLIENT_CERT_PWD="123456";
* TRUST_CERT_PATH=
* "/wls/bis_emulator/apps/emulator/config/cert/BIS_FRONT_SERVER_STG_BY_ZXC.jks"
* ; String statis pribadi TRUST_CERT_PWD="123456";
* klien_cert_path=
* "/wls/bis_emulator/apps/emulator/config/cert/EXV_GROUP_EAI_B2B_ZUCHE_100.jks"
* ;
*/
/**
* @param argumen
* @throwsIOException
* @melempar ClientProtocolException
* @melempar NoSuchAlgorithmException
* @melempar KeyManagementException
*/
public static void main(String[] args) melempar KeyManagementException,
NoSuchAlgorithmException, ClientProtocolException, IOException {
// sendMsgOfCert("https://10.25.32.13:8007", "halo dunia", "123456",
// "kserver.jks", "123456", "tclient.jks");
mengirim(
"https://127.0.0.1/hmreport/messageChannel.ac?sign=TEZrSHZJdDNrRFNIb0M0QnJrc3VIdDBJWDRYTTVXZGJYZHlLUkpxQlp6anQyYUJITEpSVWQzOWh4b0RvOW96TGVvN2Z hWEJ3SkZvN0JIZVhhOFRuaWZLY3VwbDExSjg2cjZFMFFvNHV4YktJd3E0T2RvTmVhQzV6NV hNTzJLN1NaNWpoUUhTVTR0NTNEdWFOVHpuZjh1ajA0VUhqaFBWRTJvM0s2dnEyTFVnPQ==",
"Halo dunia!");
}
String statis publik sendMsgOfCert(String urlString, String requestData,
Tali CLIENT_CERT_PWD, Tali CLIENT_CERT_PATH,
Tali TRUST_CERT_PWD, Tali TRUST_CERT_PATH) {
StringBuffer sb = nol;
mencoba {
log.info("Mulai inisialisasi klien https!");
SSLContext sslContext = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory
.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
ks.beban(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 = baru HostnameVerifier() {
verifikasi boolean publik(String arg0, SSLSession arg1) {
kembali benar;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// URL url = URL baru("https://172.40.1.83:8007");
URL url = URL baru(urlString);
HttpsURLConnection urlCon = (HttpsURLConnection) url
.openConnection();
urlCon.setDoOutput(benar);
urlCon.setDoInput(benar);
urlCon.setRequestMethod("POST");
urlCon.setRequestProperty("Jenis Konten",
"teks/xml;set karakter=GB18030");
urlCon.setSSLSocketFactory(sslContext.getSocketFactory());
OutputStream os = urlCon.getOutputStream();
InputStream fis = ByteArrayInputStream baru(requestData
.getBytes("GB18030"));
BufferedInputStream bis = BufferedInputStream baru(fis);
byte[] byte = byte baru[1024];
int len = -1;
while ((len = bis.read(byte)) != -1) {
os.write(byte, 0, len);
}
os.flush();
bis.close();
fis.close();
os.close();
InputStream adalah = urlCon.getInputStream();
BufferedReader br = BufferedReader baru(InputStreamReader baru(adalah,
"GB18030"));
// DataInputStream indata = DataInputStream baru(adalah);
// String ret = "";
// String str_return = "";
// sementara (ret != null) {
// ret = indata.readLine();
// if (ret != null && !ret.trim().equals("")) {
// str_return = str_return
// + String baru(ret.getBytes("ISO-8859-1"), "GBK");
// }
// }
// Sistem.keluar.println("str_return:" + str_return);
// System.out.println("br.readLine():"+baru
// String(br.readLine().getBytes("GBK"), "GBK"));
sb = StringBuffer baru();
garis senar;
while ((baris = br.readLine()) != null) {
sb.tambahkan(baris);
}
System.out.println("sb:" + sb);
br.close();
adalah.close();
urlCon.putuskan();
} tangkapan (Pengecualian e) {
e.fillInStackTrace();
log.info("Panggilan klien gagal: " + e.getMessage());
throw new RuntimeException("Panggilan https gagal!");
}
kembalikan nol;
}
pengiriman kekosongan statis publik (String requsetString, String requestData)
melempar NoSuchAlgorithmException, KeyManagementException,
ClientProtocolException, IOException {
// Pertama-tama buatlah pengelola kepercayaan yang tidak akan peduli.
X509TrustManager trustManager = baru X509TrustManager() {
public void checkClientTrusted(rantai X509Certificate[],
String authType) menampilkan CertificateException {
// Jangan lakukan apa pun.
}
public void checkServerTrusted(rantai X509Certificate[],
String authType) menampilkan CertificateException {
// Jangan lakukan apa pun.
}
publik X509Certificate[] getAcceptedIssuers() {
// Jangan lakukan apa pun.
kembalikan nol;
}
};
// Sekarang masukkan pengelola kepercayaan ke dalam SSLContext.
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, TrustManager baru[] { trustManager }, null);
// Gunakan SSLContext di atas untuk membuat pabrik soket Anda
// (Saya merasa mencoba memperluas pabrik agak sulit karena a
// panggil ke createSocket tanpa argumen, metode yang tidak
// ada dimana saja yang bisa kutemukan, tapi hei-ho).
SSLSocketFactory sf = SSLSocketFactory baru(sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
DefaultHttpClient httpclient = baru DefaultHttpClient();
httpklien.getConnectionManager().getSchemeRegistry().register(
Skema baru("https", sf, 443));
// String requset = "https://180.168.35.140/api/vm.list";
HttpPost httpPost = HttpPost baru(requsetString);
Hasil string = "";
//Jalankan permintaan HTTP
httpPost.setHeader("Otorisasi", "dasar"
+ "dGNsb3VkYWRtaW46dGNsb3VkMTIz");
httpPost.setHeader("Jenis konten", "aplikasi/xml");
Persyaratan StringEntity;
// Enkapsulasi parameter permintaan ke dalam HttpEntity
reqEntity = StringEntity baru(data permintaan);
BufferedHttpEntity bhe = BufferedHttpEntity baru(reqEntity);
httpPost.setEntity(bhe);
Respons HttpResponse = httpclient.execute(httpPost);
HttpEntity resEntity = respon.getEntity();
Pembaca InputStreamReader = InputStreamReader baru(resEntity.getContent());
char[] buff = karakter baru[1024];
int panjang = 0;
while ((panjang = pembaca.baca(buff)) != -1) {
hasil += String baru(buff, 0, panjang);
}
httpklien.getConnectionManager().shutdown();
System.out.println(">>>:" + hasil);
}
tes kekosongan statis publik() {
String kata = "halo";
mencoba {
FileOutputStream keluar = FileOutputStream baru("D:/file.txt");
keluar.menulis(kata-kata.getBytes());
keluar.flush();
keluar.tutup();
} tangkapan (Pengecualian e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
}
}