httpclient を使用して、証明書なしで https URL アドレスを呼び出し、バイト ストリームを送信します。
次のようにコードをコピーします。
パッケージ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 {
public static ログログ = LogFactory.getLog(HttpsClient.class);
/* Windows の場合 */
/* 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", "hello world", "123456",
// "kserver.jks", "123456", "tclient.jks");
送信(
「https://127.0.0.1/hmreport/messageChannel.ac?sign=TEZrSHZJdDNrRFNIb0M0QnJrc3VIdDBJWDRYTTVXZGJYZHlLUkpxQlp6anQyYUJITEpSVWQzOWh4b0RvOW96TGVvN2Z」 hWEJ3SkZvN0JIZVhhOFRuaWZLY3VwbDExSjg2cjZFMFFvNHV4YktJd3E0T2RvTmVhQzV6NV hNTzJLN1NaNWpoUUhTVTR0NTNEdWFOVHpuZjh1ajA0VUhqaFBWRTJvM0s2dnEyTFVnPQ===
"こんにちは世界!");
}
public static String 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() {
public boolean verify(String arg0, SSLSession arg1) {
true を返します。
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// URL url = 新しい 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);
byte[] バイト = 新しいバイト [1024];
int len = -1;
while ((len = bis.read(bytes)) != -1) {
os.write(バイト, 0, len);
}
os.flush();
bis.close();
fis.close();
os.close();
入力ストリームは = urlCon.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"GB18030"));
// DataInputStream indata = new 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"));
sb = 新しい StringBuffer();
文字列行;
while ((line = br.readLine()) != null) {
sb.append(行);
}
System.out.println("sb:" + sb);
br.close();
is.close();
urlCon.disconnect();
} catch (例外 e) {
e.fillInStackTrace();
log.info("クライアント呼び出しに失敗しました: " + e.getMessage());
throw new RuntimeException("https 呼び出しに失敗しました!");
}
null を返します。
}
public static void send(String requsetString, String requestData)
NoSuchAlgorithmException、KeyManagementException、をスローします。
ClientProtocolException、IOException {
// まず、気にしない信頼マネージャーを作成します。
X509TrustManager trustManager = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] チェーン,
String authType) が CertificateException をスローする {
// 何もしないでください。
}
public void checkServerTrusted(X509Certificate[] チェーン,
String authType) が CertificateException をスローする {
// 何もしないでください。
}
public X509Certificate[] getAcceptedIssuers() {
// 何もしないでください。
null を返します。
}
};
// 次に、信頼マネージャーを SSLContext に配置します。
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new 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));
// 文字列 requset = "https://180.168.35.140/api/vm.list";
HttpPost httpPost = 新しい HttpPost(requsetString);
文字列結果 = "";
//HTTPリクエストを実行する
httpPost.setHeader("認可", "基本"
+ "dGNsb3VkYWRtaW46dGNsb3VkMTIz");
httpPost.setHeader("コンテンツタイプ", "アプリケーション/xml");
StringEntity 要求エンティティ;
// リクエストパラメータを HttpEntity にカプセル化します
reqEntity = 新しい StringEntity(requestData);
BufferedHttpEntity bhe = new BufferedHttpEntity(reqEntity);
httpPost.setEntity(bhe);
HttpResponse 応答 = httpclient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
InputStreamReader リーダー = new InputStreamReader(resEntity.getContent());
char[] buff = 新しい char[1024];
整数の長さ = 0;
while ((length = Reader.read(buff)) != -1) {
結果 += 新しい文字列(buff, 0, length);
}
httpclient.getConnectionManager().shutdown();
System.out.println(">>>:" + 結果);
}
public static void test() {
文字列単語 = "こんにちは";
試す {
FileOutputStream out = new FileOutputStream("D:/file.txt");
out.write(words.getBytes());
out.flush();
out.close();
} catch (例外 e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}