PDA

View Full Version : نمایش ندادن آدرس url از نوع https



kamal70
چهارشنبه 04 بهمن 1396, 19:13 عصر
سلام آدرس url volley دراندروید از نوع https هست وقتی روی گوشی اندروید ۴٫۲ اجرا می کنم این خطا رو میده com.android.volley.NoConnectionError: javax.net.ssl.SSLException: Connection closed by peer چیکار کنم تا اندروید ۴ هم https قبول کنه؟ .

mz6488
پنج شنبه 05 بهمن 1396, 11:51 صبح
سلام.یه کلاس درست کن و کدهای زیر رو داخلش قرار بده بعد متد allowAllSSL رو تو اکتیویتی اصلی فراخونیش کن.میتونی این متد رو قبل از ارسال درخواست هم استفاده کنی.

package mylib;


import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;


import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;


public class HttpsTrustManager implements X509TrustManager {


private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};


@Override
public void checkClientTrusted(
X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {


}


@Override
public void checkServerTrusted(
X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {


}


public boolean isClientTrusted(X509Certificate[] chain) {
return true;
}


public boolean isServerTrusted(X509Certificate[] chain) {
return true;
}


@Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
}


public static void allowAllSSL() {




HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {


@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}


});


SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[]{new HttpsTrustManager()};
}


try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}


HttpsURLConnection.setDefaultSSLSocketFactory(cont ext
.getSocketFactory());
}


}

kamal70
پنج شنبه 05 بهمن 1396, 17:40 عصر
روش شما رو هم اجرا کردم فرقی نکرد همون ارور قبلی رو میده

mz6488
پنج شنبه 05 بهمن 1396, 19:04 عصر
سمت سرورت رو با چی نوشتی؟تو اندروید دیگه هم همین خطا رو میده؟

kamal70
پنج شنبه 05 بهمن 1396, 20:36 عصر
سمت سرور با پی اچ پی نوشتم
اندروید پنج و شش https قبول می کنه
با اندروید چهار https قبول نمی کنه ولی http قبول می کنه

mz6488
پنج شنبه 05 بهمن 1396, 21:16 عصر
خودم از همون کدی که فرستادم نتیجه گرفتم.ssl رو سرور معتبره؟یعنی تو مرورگر ارور نمیده؟

kamal70
پنج شنبه 05 بهمن 1396, 21:25 عصر
تو مرورگر مشکلی نداره
ssl من رایگانه می تونه به خاطر رایگان بودنش باشه؟

mz6488
جمعه 06 بهمن 1396, 17:35 عصر
فکر نکنم رایگان بودنش ربطی به این قضیه داشته باشه.فقط موقعی که تو مرورگر واردش میکنی نباید خطای نامعتبر بودن بده.کتابخونه زیر رو نصب کن ببین بازم خطا میده یا نه.هر چند کتابخونه ش منقضی شده ولی به شخص تا حالا تو ورژن های مختلف اندروید مشکلی ازش ندیدم
'com.mcxiaoke.volley:library-aar:1.0.0'

kamal70
جمعه 06 بهمن 1396, 23:29 عصر
ممنون ولی درست نشد