SSLクライアントサーバープログラムに取り組んでおり、次の方法を再利用する必要があります。
private boolean postMessage(String message){
try{
String serverURLS = getRecipientURL(message);
serverURLS = "https:\\\\abc.my.domain.com:55555\\update";
if (serverURLS != null){
serverURL = new URL(serverURLS);
}
HttpsURLConnection conn = (HttpsURLConnection)serverURL.openConnection();
conn.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
OutputStreamWriter wr = new OutputStreamWriter(os);
wr.write(message);
wr.flush();
if (conn.getResponseCode() != HttpsURLConnection.HTTP_OK)
return false;
else
return true;
}
ここでServerURLは次のように初期化されます
private URL serverURL = null;
このメソッドを実行しようとすると、Lineで例外が発生します。
OutputStream os = conn.getOutputStream();
例外は
Java.lang.IllegalArgumentException: protocol = https Host = null
これの理由は何ですか?
URLは、(ウィンドウとして)後方スラッシュではなく、前方スラッシュ(/)を使用します。試してください:
serverURLS = "https://abc.my.domain.com:55555/update";
エラーが発生する理由は、URLクラスが文字列のホスト部分を解析できないため、Host
はnull
であるためです。
このコードは完全に不要のようです。
_String serverURLS = getRecipientURL(message);
serverURLS = "https:\\\\abc.my.domain.com:55555\\update";
if (serverURLS != null){
serverURL = new URL(serverURLS);
}
_
serverURLS
にはgetRecipientURL(message)
の結果が割り当てられますserverURLS
の値を上書きして、前のステートメントを dead store にします。if (serverURLS != null)
はtrue
と評価されるため、justが前のステートメントで変数に値を割り当てたため、 serverURL
に値を割り当てます。 if (serverURLS != null)
がfalse
に評価することは不可能です!serverURLS
を実際に使用することはありません。これらすべてを次のものに置き換えることができます。
_serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");
_