2015-08-27 5 views
3

Я пытаюсь подключиться к серверу для создания новой учетной записи. Я собираю полный URL-адрес в строку для целей отладки, а затем устанавливаю URL-адрес этой строки и пытаюсь открыть это соединение. Когда я копирую и вставляю URL-адрес в свой браузер, я получаю ответ и правильное исполнение. Тем не менее, в моем приложении я не получаю ответа или даже мои уведомления о тостах появляются. Я делаю что-то неправильно?HttpUrlConnection не обращается к серверу

private void postAPI(String userName, String password, String emailAddres, String firstName, 
        String lastName, String phone, String officeName, String address, 
        String city, String state, String zip, String salesRep) { 
    final String tempAddress = ("https://www.exampleAddress.com/mobilenewacct.asp?u=" + 
      userName + "&p=" + password + "&email=" + emailAddres + "&fname=" + firstName + 
      "&lname=" + lastName + "&phone=" + phone + "&agoffice=" + officeName + 
      "&agaddress=" + address + "&agcity=" + city + "&agstate=" + state + 
      "&agzip=" + zip + "&repid=" + 1296).replace("@", "atsign"); 

    new AsyncTask<Void, Void, Boolean>(){ 
     @Override 
     protected Boolean doInBackground(Void... params){ 
      try { 
       url = new URL(tempAddress); 

       urlConnection = (HttpURLConnection) url.openConnection(); 

       Log.v("Connection Open", "Open"); 

       urlConnection.connect(); 

       Log.v("Connection Connected", "Connected"); 

      } catch (Exception e) { 
       //ERROR 
       e.printStackTrace(); 
      } finally { 
       try { 
        urlConnection.disconnect(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      return true; 
     } 
     @Override 
     public void onPostExecute(Boolean result){ 
      //Some message that indicates the connection was finished, or nothing. 
     } 
    }.execute(); 
} 

Logcat Выход

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
W/System.err﹕ at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:322) 
W/System.err﹕ at com.android.okhttp.Connection.upgradeToTls(Connection.java:201) 
W/System.err﹕ at com.android.okhttp.Connection.connect(Connection.java:155) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 
W/System.err﹕ at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25) 
W/System.err﹕ at com.octitle.ryann.octmobile.NewUserActivity$2.doInBackground(NewUserActivity.java:133) 
W/System.err﹕ at com.octitle.ryann.octmobile.NewUserActivity$2.doInBackground(NewUserActivity.java:123) 
W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:292) 
W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 
W/System.err﹕ Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
W/System.err﹕ at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:318) 
W/System.err﹕ at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:219) 
W/System.err﹕ at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:114) 
W/System.err﹕ at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:550) 
W/System.err﹕ at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
W/System.err﹕ at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318) 
W/System.err﹕ ... 16 more 
W/System.err﹕ Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
W/System.err﹕ ... 22 more 
+0

Вы можете отправить сообщение об ошибке logcat. так что кто-то может помочь –

+0

Я обновил вывод Logcat –

+0

Взгляните на этот вопрос: http://stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection – Mauker

ответ

1

Я в конечном итоге добавив в свой код, прежде чем я попытался открытие соединения, пока я не могу попросить разработчика, который разработал сервер о том или нет сертификат самозаверенный или не

SSLContext ctx = SSLContext.getInstance("TLS"); 
ctx.init(null, new TrustManager[] { 
new X509TrustManager() { 
    public void checkClientTrusted(X509Certificate[] chain, String authType) {} 
    public void checkServerTrusted(X509Certificate[] chain, String authType) {} 
    public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } 
    } 
}, null); 
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); 

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
    public boolean verify(String hostname, SSLSession session) { 
      return true; 
    } 
}); 

Найдено здесь

HTTPS GET (SSL) with Android and self-signed server certificate

Смежные вопросы