Android:httpsサイトにjsonを印刷することはできません

callmebaby69

このスクリプトは通常のサーバーで機能しますが、httpsサーバーで試したところ、作成したjsonデータが返されませんでした

DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());

        HttpPost httpPost = null;

        try {
            httpPost = new HttpPost("https://xxxxxxxx.xx");
            httpPost.setEntity(new UrlEncodedFormEntity(params));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        httpPost.setHeader("Content-type", "application/json");

        InputStream inputStream = null;

        try{

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            inputStream = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;

            while ((line = reader.readLine()) != null){
                sb.append(line + "\n");
            }

            json = sb.toString();

            jObj = new JSONObject(json);

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return jObj;
Shripad Jadhav

SSL証明書を追加する必要があります。

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

この関数をコピーして、DefaultHttpClientオブジェクトをとして作成します。

DefaultHttpClient httpClient = getNewHttpClient();

残りのコードは同じままです...

以下は私のMySSLSocketFactoryクラスです

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ssl.SSLSocketFactory;

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

}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AndroidサポートBottomSheetBehaviorを動的にすることはできませんか?

分類Dev

https:// URLのないサイトにリンクすることはできません

分類Dev

Django Projectは、GoogleAppengineにhttpsへのリダイレクトを強制することはできません

分類Dev

Django Projectは、GoogleAppengineにhttpsへのリダイレクトを強制することはできません

分類Dev

クライアントサーバーPython:受信したメッセージを個別に印刷することはできません

分類Dev

https、特にphantomjsのsalesforceサイトを開くことができません

分類Dev

中央値と平均値を同時に印刷することはできません

分類Dev

Ghostscriptを使用して印刷することはできません

分類Dev

Ghostscriptを使用して印刷することはできません

分類Dev

複数部を印刷することはできません

分類Dev

Android Studioにサポートリポジトリをインストールしてプロジェクトを同期することはできません

分類Dev

Android Studioにサポートリポジトリをインストールしてプロジェクトを同期することはできません

分類Dev

Android Studioにサポートリポジトリをインストールしてプロジェクトを同期することはできません

分類Dev

jsonをxmlに変換することはできません

分類Dev

GoogleアプリをGoogleサイトに表示することはできません

分類Dev

stderrは画面にのみ印刷できますが、パイプすることはできません

分類Dev

Python Seleniumは、Webサイトにあるときにhrefを見つけることができません

分類Dev

Android KotlinfindViewByIdをnullにすることはできません

分類Dev

データをリストに設定してから印刷することはできません。

分類Dev

ウェブサイト上のHTTPSコンテンツをAndroidアプリに呼び出すことができません

分類Dev

process.stdoutを印刷するときに、Popenによって作成されたサブプロセスを強制終了することはできません。

分類Dev

Androidの外部ストレージにファイルを作成することはできません

分類Dev

ScipyをJupyterNotebookにインポートすることはできません

分類Dev

post()レストエンドポイントをテストしようとすると、jsonをnullまたは空にすることはできません。

分類Dev

PythonにサイトからJSONを解析させることができません

分類Dev

Firebaseがホストするサイトに「このサイトは安全な接続を提供できません」と表示されます

分類Dev

Androidサービスに複数のセンサーを登録することはできません

分類Dev

異なるサイズのタイプ間でBitCastを迅速にunsafeBitCastすることはできません

分類Dev

Googleの棒グラフでフォントサイズを大きくすることはできません

Related 関連記事

  1. 1

    AndroidサポートBottomSheetBehaviorを動的にすることはできませんか?

  2. 2

    https:// URLのないサイトにリンクすることはできません

  3. 3

    Django Projectは、GoogleAppengineにhttpsへのリダイレクトを強制することはできません

  4. 4

    Django Projectは、GoogleAppengineにhttpsへのリダイレクトを強制することはできません

  5. 5

    クライアントサーバーPython:受信したメッセージを個別に印刷することはできません

  6. 6

    https、特にphantomjsのsalesforceサイトを開くことができません

  7. 7

    中央値と平均値を同時に印刷することはできません

  8. 8

    Ghostscriptを使用して印刷することはできません

  9. 9

    Ghostscriptを使用して印刷することはできません

  10. 10

    複数部を印刷することはできません

  11. 11

    Android Studioにサポートリポジトリをインストールしてプロジェクトを同期することはできません

  12. 12

    Android Studioにサポートリポジトリをインストールしてプロジェクトを同期することはできません

  13. 13

    Android Studioにサポートリポジトリをインストールしてプロジェクトを同期することはできません

  14. 14

    jsonをxmlに変換することはできません

  15. 15

    GoogleアプリをGoogleサイトに表示することはできません

  16. 16

    stderrは画面にのみ印刷できますが、パイプすることはできません

  17. 17

    Python Seleniumは、Webサイトにあるときにhrefを見つけることができません

  18. 18

    Android KotlinfindViewByIdをnullにすることはできません

  19. 19

    データをリストに設定してから印刷することはできません。

  20. 20

    ウェブサイト上のHTTPSコンテンツをAndroidアプリに呼び出すことができません

  21. 21

    process.stdoutを印刷するときに、Popenによって作成されたサブプロセスを強制終了することはできません。

  22. 22

    Androidの外部ストレージにファイルを作成することはできません

  23. 23

    ScipyをJupyterNotebookにインポートすることはできません

  24. 24

    post()レストエンドポイントをテストしようとすると、jsonをnullまたは空にすることはできません。

  25. 25

    PythonにサイトからJSONを解析させることができません

  26. 26

    Firebaseがホストするサイトに「このサイトは安全な接続を提供できません」と表示されます

  27. 27

    Androidサービスに複数のセンサーを登録することはできません

  28. 28

    異なるサイズのタイプ間でBitCastを迅速にunsafeBitCastすることはできません

  29. 29

    Googleの棒グラフでフォントサイズを大きくすることはできません

ホットタグ

アーカイブ