Используйте httpclient для вызова URL-адреса https без сертификата и передачи потока байтов.
Скопируйте код кода следующим образом:
пакет com.paic.hmreport.metaQ;
импортировать java.io.BufferedInputStream;
импортировать java.io.BufferedReader;
импортировать java.io.ByteArrayInputStream;
импортировать java.io.FileOutputStream;
импортировать java.io.IOException;
импортировать java.io.InputStream;
импортировать java.io.InputStreamReader;
импортировать java.io.OutputStream;
импортировать java.net.URL;
импортировать java.security.KeyManagementException;
импортировать java.security.KeyStore;
импортировать java.security.NoSuchAlgorithmException;
импортировать javax.net.ssl.HostnameVerifier;
импортировать javax.net.ssl.HttpsURLConnection;
импортировать javax.net.ssl.KeyManagerFactory;
импортировать javax.net.ssl.SSLContext;
импортировать javax.net.ssl.SSLSession;
импортировать javax.net.ssl.TrustManagerFactory;
импортировать java.security.cert.CertificateException;
импортировать java.security.cert.X509Certificate;
импортировать javax.net.ssl.TrustManager;
импортировать javax.net.ssl.X509TrustManager;
импортировать org.apache.http.HttpEntity;
импортировать org.apache.http.HttpResponse;
импортировать org.apache.http.client.ClientProtocolException;
импортировать org.apache.http.client.methods.HttpPost;
импортировать org.apache.http.conn.scheme.Scheme;
импортировать org.apache.http.conn.ssl.SSLSocketFactory;
импортировать org.apache.http.entity.BufferedHttpEntity;
импортировать org.apache.http.entity.InputStreamEntity;
импортировать org.apache.http.entity.StringEntity;
импортировать org.apache.http.impl.client.DefaultHttpClient;
импортировать org.apache.commons.logging.Log;
импортировать org.apache.commons.logging.LogFactory;
общественный класс HttpsClient {
общедоступный статический журнал журнала = LogFactory.getLog(HttpsClient.class);
/* для окон */
/* для Linux */
/*
* частная статическая строка 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 аргументы
* @throwsIOException
* @throws ClientProtocolException
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
public static void main(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 сб = ноль;
пытаться {
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(ТС);
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HostnameVerifier hostnameVerifier = новый HostnameVerifier() {
общедоступная логическая проверка (String arg0, SSLSession arg1) {
вернуть истину;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// URL url = новый URL("https://172.40.1.83:8007");
URL-адрес URL = новый URL-адрес (urlString);
HttpsURLConnection urlCon = (HttpsURLConnection) URL-адрес
.openConnection();
urlCon.setDoOutput(истина);
urlCon.setDoInput(истина);
urlCon.setRequestMethod("POST");
urlCon.setRequestProperty("Тип контента",
"текст/xml;кодировка=GB18030");
urlCon.setSSLSocketFactory(sslContext.getSocketFactory());
OutputStream os = urlCon.getOutputStream();
InputStream fis = новый ByteArrayInputStream(requestData
.getBytes("GB18030"));
BufferedInputStream bis = новый BufferedInputStream (фис);
байт[] байт = новый байт[1024];
int len = -1;
while ((len = bis.read(bytes)) != -1) {
os.write(байты, 0, длина);
}
ОС.flush();
бис.закрыть();
фис.закрыть();
ОС.закрыть();
InputStream = urlCon.getInputStream();
BufferedReader br = новый BufferedReader (новый InputStreamReader (is,
"GB18030"));
// DataInputStream indata = новый DataInputStream(is);
// Строка ret = "";
// Строка str_return = "";
// while (ret != null) {
// ret = indata.readLine();
// if (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");
сб = новый StringBuffer();
Струнная линия;
while ((line = br.readLine()) != null) {
sb.append(строка);
}
System.out.println("sb:" + sb);
бр.закрыть();
есть.закрыть();
urlCon.disconnect();
} catch (Исключение е) {
е.fillInStackTrace();
log.info("Ошибка вызова клиента: " + e.getMessage());
throw new RuntimeException("Вызов https не выполнен!");
}
вернуть ноль;
}
public static void send (String requsetString, String requestData)
выдает NoSuchAlgorithmException, KeyManagementException,
ClientProtocolException, IOException {
// Сначала создадим доверительного менеджера, которому будет все равно.
X509TrustManagertrustManager = новый X509TrustManager() {
public void checkClientTrusted (цепочка X509Certificate [],
String authType) выдает исключение CertificateException {
// Ничего не делайте.
}
public void checkServerTrusted (цепочка X509Certificate [],
String authType) выдает исключение CertificateException {
// Ничего не делайте.
}
общественный X509Certificate [] getAcceptedIssuers () {
// Ничего не делайте.
вернуть ноль;
}
};
// Теперь поместим диспетчер доверия в SSLContext.
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, новый TrustManager[] {trustManager}, null);
// Используйте приведенный выше SSLContext для создания фабрики сокетов
// (Мне показалось, что попытка расширить фабрику немного сложна из-за
// вызов createSocket без аргументов, метод, который не
// существуют везде, где я могу найти, но эй-хо).
SSLSocketFactory sf = новый SSLSocketFactory (sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
DefaultHttpClient httpclient = новый DefaultHttpClient();
httpclient.getConnectionManager().getSchemeRegistry().register(
новая схема("https", sf, 443));
// String requset = "https://180.168.35.140/api/vm.list";
HttpPost httpPost = новый HttpPost (requsetString);
Строковый результат = "";
//Выполняем HTTP-запрос
httpPost.setHeader("Авторизация", "базовый"
+ "dGNsb3VkYWRtaW46dGNsb3VkMTIz");
httpPost.setHeader("Тип контента", "application/xml");
StringEntity reqEntity;
// Инкапсулируем параметры запроса в HttpEntity
reqEntity = новый StringEntity (requestData);
BufferedHttpEntity bhe = новый BufferedHttpEntity (reqEntity);
httpPost.setEntity(бхе);
Ответ HttpResponse = httpclient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
Читатель InputStreamReader = новый InputStreamReader(resEntity.getContent());
char[] buff = новый char[1024];
длина целого = 0;
while ((length = reader.read(buff)) != -1) {
результат += новая строка (бафф, 0, длина);
}
httpclient.getConnectionManager().shutdown();
System.out.println(">>>:" + результат);
}
публичный статический тест на недействительность () {
Строковые слова = "привет";
пытаться {
FileOutputStream out = новый FileOutputStream("D:/file.txt");
out.write(words.getBytes());
out.flush();
выход.закрыть();
} catch (Исключение е) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
}
}