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に基づいて
おそらくhttp://stackoverflow.com/質問/ 29294479/android-deprecated-apache-module-httpclient-httpresponse-etc – TWL
コードが変更されずにアプリが動作を停止した理由を説明できますか? – KuKeC
推奨されなくなる可能性があるためです。 Volley、Retrofit、OkHttpなどのネットワーキングライブラリをチェックすることをお勧めします – Chisko