2016-11-21 8 views
0

WebサーバーからPOSTメソッドを使用するアンドロイドアプリケーションがあります。そして、3日前に、私のアプリケーションはそれぞれのアンドロイドデバイスで円滑に動いていました。今日私はhttpsのPOST呼び出しがアンドロイドデバイス6.0でのみ動作するという問題が発生しました。 verion。私はいくつかのデバイス(5.0と4.3.x)を持っており、同じアプリケーションは私のWEBサーバーとの通信を確立できません。私はWebサーバーを持っているホスティング会社と話をしていて、彼らは最後の3日間で何も変わっていないと私に言った。奇妙なことは、同じコードがapi 23で動作しますが、それより少ないapiでは動作しないことです(テストされた5.0と4.3.x)。だから私の質問は、私がアンドロイドからhttpsを呼び出すことで気付かなかったか、または何が最後の3日間に何か変わったのだろうか?Android POSTメソッドが動作しなくなった

httpsのアプリケーションは、一部のデバイスで正常に動作を停止し、一部ではないと私はそれがある理由を知りたいので、私は少し混乱しています

protected String doInBackground(Object... params) { 
    String param1="a"; 
    String param2 = "b"; 
    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("http", socketFactory, 80)); 
    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 = Config.url_login_async_task; 
    HttpPost httppost = new HttpPost(url); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("param1", param1)); 
     nameValuePairs.add(new BasicNameValuePair("param2", param2)); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     // Execute HTTP Post Request 
     response = httpclient.execute(httppost); 

    } catch (ClientProtocolException e) { 
    } catch (IOException e) { 
    } 
    try { 
     //Log.d("response", response.toString()); 
     odgovor = EntityUtils.toString(response.getEntity()); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return odgovor; 
} 

(AsyncTask)以下であるアンドロイドから呼び出す作るための私のコード。

EDIT:追加したプロジェクトのGradleの

buildscript { 
repositories { 
    jcenter() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:1.3.0' 

    // NOTE: Do not place your application dependencies here; they belong 
    // in the individual module build.gradle files 
    } 
} 

allprojects { 
repositories { 
    jcenter() 
} 
} 

モジュールのGradle

apply plugin: 'com.android.application' 

android { 

    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 
    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES.txt' 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/dependencies.txt' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/license.txt' 
     exclude 'META-INF/LGPL2.1' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/notice.txt' 
    } 
    defaultConfig { 
     applicationId "com.x.y.z" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 
dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.google.android.gms:play-services:7.8.0' 
} 

EDIT 2:

android {}useLibrary 'org.apache.http.legacy'、他のすべてのsolutiを追加しようとしました他のリンクからオンであり、まだ成功したものはありません。私はこの "廃止された" apacheライブラリについて読んで、奇妙なことに、API 22よりも低いデバイスでは私のアプリケーションがクラッシュする(それは動作するはずなので、うまくいくはずです)、API 23では機能しませんAPI 23の上には非推奨です

EDIT 3:新しいエラー

エラーを見つけようとして過ごし近いデバッグや時間後に私は私のログに次のエラーが出て

がEGL_SWAP_BEHAVIORの設定に失敗しましたサーフェス0xa379c740、エラー= EGL_SUCCESS javax.net.ssl.SSLPeerUnverifiedException:ピアがありません証明書 at com.android.org.conscrypt.SSLNullSession.getPeerCertificates(SSLNullSession.java:104) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:98) at org.apache.http .conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:393) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:170) at org.apache.http.impl.conn.AbstractPoolEntry .open(AbstractPoolEntry.java:169) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java :365) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)org.apache.http.impl.client.AbstractHttpClient.executeでorg.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492) で(AbstractHttpClient.java:470)

誰かがこのエラーが発生した証明書を持つサーバーで何が起こったのか説明しようとしますか?HTTPSに基づいて

+0

おそらくhttp://stackoverflow.com/質問/ 29294479/android-deprecated-apache-module-httpclient-httpresponse-etc – TWL

+0

コードが変更されずにアプリが動作を停止した理由を説明できますか? – KuKeC

+1

推奨されなくなる可能性があるためです。 Volley、Retrofit、OkHttpなどのネットワーキングライブラリをチェックすることをお勧めします – Chisko

答えて

1

この問題:SecurityExceptionが、サーバーでは、一度そうuが使用されます、uは適切な応答を取得する、ドメインをホストに以下のコードをあなたのSSLを更新

HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; 
DefaultHttpClient httpClient = new DefaultHttpClient(); 
SchemeRegistry registry = new SchemeRegistry(); 
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); 
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); 
registry.register(new Scheme("https", socketFactory, 443)); 
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
SingleClientConnManager mgr = new SingleClientConnManager(httpClient.getParams(), registry); 
DefaultHttpClient client = new DefaultHttpClient(mgr, httpClient.getParams()); 

// Set verifier 
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); 

DefaultHttpClient client=new DefaultHttpClient(); 
HttpPost request = new HttpPost(url); 
request.setEntity(new StringEntity(jobject.toString())); 
request.setHeader("Content-type", "application/json"); 
HttpResponse response = client.execute(request); 
HttpEntity resEntity = response.getEntity(); 
String json = EntityUtils.toString(resEntity); 
+0

いいえ、cpanelでsslを再インストールする方法を教えてください。 – KuKeC

+0

このリンクを参照してくださいhttps://www.namecheap.com/support/knowledgebase/article.aspx/9418/0/cpanel –

関連する問題