2013-10-03 95 views
1

我正在使用ksoap庫調用webservice。在某些情況下,服務運行正常,但在一個案例中,主機名稱未經驗證 下面是我的代碼調用webservice主機名未驗證ANDROID

HttpTransportSE httpTransport = new HttpTransportSE(URL, MessageConstant.TIMEOUT_TIME); 
      httpTransport.debug = true; // this is optional, use it if you don't want to use a packet sniffer to check what the sent message was (httpTransport.requestDump) 
      httpTransport.call(SOAP_ACTION, envelope); // send request 

這裏是我的同

java.io.IOException: Hostname 'XXX.XX.XXX.XXX' was not verified 
at libcore.net.http.HttpConnection.verifySecureSocketHostname(HttpConnection.java:223) 
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:446) 
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 
at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:76) 
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:152) 
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95) 

回答

1

此鏈接日誌貓有幾個可能的原因;沒有任何反應的被標記爲 「接受」:

你也應該看看這裏:

一個原因發生這種情況是由於服務器配置錯誤。 服務器配置有證書,該證書沒有主題 或使用替代名稱字段與您嘗試訪問的服務器 相匹配。可以將多個不同的服務器與一個證書一起使用。

例如,尋找與openssl s_client -connect google.com:443 | openssl x509 -text google.com的 證書,你可以看到,支持主題* .google.com但 還受到替代名稱* .youtube.com,* .android.com和 其他。只有當您連接的服務器名稱 未被證書列爲可接受時纔會出現此錯誤。

0

驗證您的主機

HttpsURLConnection.setDefaultHostnameVerifier(new HostVerifier()); 


public class HostVerifier implements HostnameVerifier { 

@Override 
public boolean verify(String hostname, SSLSession session) { 
    Log.i(TAG, "HOST NAME " + hostname); 
    if (hostname.contentEquals("XXX.XX.XXX.XXX")) { 
     Log.i(TAG, "Approving certificate for host " + hostname); 
     return true; 
    } 
    return false; 
} 
}