我正在研究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
这是什么原因?
答案 0 :(得分:18)
网址使用正斜杠(/),而不是向后斜杠(作为窗口)。尝试:
serverURLS = "https://abc.my.domain.com:55555/update";
您收到错误的原因是URL类无法解析字符串的主机部分,因此host
为null
。
答案 1 :(得分:3)
这段代码似乎完全没必要:
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
,因为您只是在前面的语句中为变量分配了值,所以您将值赋给serverURL
。 if (serverURLS != null)
无法评估为false
!serverURLS
。你可以用以下方式替换所有这些:
serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");
答案 2 :(得分:0)
可能会对其他人有所帮助-我来这里是因为我错过了在http:之后加上两个//。这就是我所拥有的:
http:/abc.my.domain.com:55555 / update