Https connection closed by peer in android 5.0 lollipop

我与影子孤独终老i 提交于 2019-12-06 14:17:59

问题


I am trying to implement an android application.Therefore, I've called a web-service HTTPS.However, I am not able to get the response data.It showing an error

" connection closed by peer "

Here is my code for HTTPS:

public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");

public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
    super(truststore);

    TrustManager tm = new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    };

    sslContext.init(null, new TrustManager[] { tm }, null);
}

@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
    return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
}

@Override
public Socket createSocket() throws IOException {
    return sslContext.getSocketFactory().createSocket();
}
}

Here's the code which I wrote for DefaultHttpClient:

public static DefaultHttpClient getClient() {
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore
                .getDefaultType());
        trustStore.load(null, null);

        SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory
                .getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(
                params, registry);

        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}

For getting response:

public static String getData(final HttpPost httpost) throws IOException,
        URISyntaxException {

    String inputLine = "Error";
    final StringBuffer buf = new StringBuffer();

    {

        InputStream ins = null;

        ins = HTTPHandler.getUrlData(httpost);

        final InputStreamReader isr = new InputStreamReader(ins);
        final BufferedReader in = new BufferedReader(isr);

        while ((inputLine = in.readLine()) != null) {
            buf.append(inputLine);
        }

        in.close();

    }

    return buf.toString();

}

I would like to ask you for any kind of help.

Thanks in advance.

来源:https://stackoverflow.com/questions/36872106/https-connection-closed-by-peer-in-android-5-0-lollipop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!