-1

Stackoverflow で多くの投稿を見つけましたが、ソリューションを機能させることができませんでした:

Androidでhttps接続を作成するには?

コードは次のとおりです。

            HttpParams httpParameters = new BasicHttpParams();
    ConnManagerParams.setMaxTotalConnections(httpParameters, 25);
    int timeoutConnection = 10000;
    HttpConnectionParams.setConnectionTimeout(httpParameters,
            timeoutConnection);
    int timeoutSocket = 10000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

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

    ClientConnectionManager cm = new ThreadSafeClientConnManager(
            httpParameters, schemeRegistry);
    httpClient = new DefaultHttpClient(cm, httpParameters);

任意のヘルプをいただければ幸いです。

4

2 に答える 2

4
HttpClient httpclient = getNewHttpClient();  

HttpGet httpget = new HttpGet(URL);
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

public HttpClient getNewHttpClient() {
        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();
        }
    }

MySSLSocketFactory.java

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();
}

}
于 2013-04-08T12:25:27.257 に答える
0

サーバーとの https 通信を行う場合、いくつかの作業を行う必要があります。

  1. Bouncy Castle を使用して OpenSSL ツールを使用して証明書を作成します。

  2. 証明書をコードにロードし、それを使用するようにコードに教えます。

  3. 最後に URL にアクセスして、HttpResponse クラスを使用して応答を取得します。

それがどのように機能するかをステップバイステップガイドで定義する良い例は、このリンクで説明されています http://www.compiletimeerror.com/2013/01/login-application-for-android-android.html#.VSE1ftyUfTB

于 2015-04-05T14:35:24.660 に答える