У меня проблема с вызовом https с Android. Может ли кто-нибудь, пожалуйста, помогите с шагами для подключения к серверу https.
Я попытался подключиться к Google с помощью https, и он работает нормально, но когда я пытаюсь подключиться к локальному серверу, у меня возникают проблемы.
- хотите подключить веб-сервис RESTful с https
хотите подключить веб-сервис на основе SOAP, разработанный с использованием JAX-WS, с https.
Код для связи с RESTFul
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// Example send http request
//final String url = "https://encrypted.google.com/";
final String url = "https://ipaddress:8181/RESTTest/cars";
HttpPost httpPost = new HttpPost(url);
try{
HttpResponse response = httpClient.execute(httpPost);
System.out.println(response);
}catch(Exception e){
e.printStackTrace();
}
он отлично работает для Google, но не работает для моего сервера, и он дает
javax.net.ssl.SSLException: недоверенный сертификат сервера
Код для соединения с SOAP:
public String getString(final String methodName, Map<String, Object> params) throws Exception {
HttpTransportSE httpsTransportSE = new HttpTransportSE("https://ipaddress:8181/BankingWS/banking?wsdl");
try {
SoapObject request = new SoapObject("https://test/",
methodName);
if(params != null && params.size() > 0){
Set<String> keys = params.keySet();
Iterator<String> iterator = keys.iterator();
while(iterator.hasNext()){
String key = iterator.next();
request.addProperty(key, params.get(key));
key = null;
}
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
TrustManagerManipulator.allowAllSSL();
httpsTransportSE.call(methodName, envelope);
SoapPrimitive sp = (SoapPrimitive) envelope.getResponse();
return sp.toString();
} catch (Exception exception) {
System.out.println(exception.toString());
throw exception;
}
}
В приведенном выше коде используется TrustManagerManipulator по следующей ссылке:
http://abhinavasblog.blogspot.com/2011/07/allow-untrusted-certificate-for-https.html
Это также не работает, и когда я проверяю код ответа, он дает
SoapFault - faultcode: 'S:Client' faultstring: 'Cannot find dispatch method for {test.WSEndPointPort}authenticate' faultactor: 'null' detail: null
Пожалуйста, помогите решить эту проблему, так как я не могу позвонить по протоколу https с Android: (
Большое спасибо за ваше время и усилия.
Спасибо,
Ishan