2016-12-11 7 views
0

私のAndroidアプリがこのURLに接続しようとしている:取得HTTPS URLコンテンツ(JSONが含まれています)

https://data.gov.in/api/datastore/resource.json?resource_id=e16c75b6-7ee6-4ade-8e1f-2cd3043ff4c9&api-key=APIKEY 

このURLはJSONデータを与えます。プロトコルはhttpsなので、通常のhttpコールは機能しません。私は、このサーバーへの呼び出しを行うためにしようとするたびに、それは言う:私は多くのコードを試みたが、すべてが同じエラーを与えているようだ

javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x65f1e9f8: I/O error during system call, Connection reset by peer 
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:406) 
    at com.android.okhttp.Connection.upgradeToTls(Connection.java:146) 

。 上記のURLを呼び出してJSONデータを取得するにはどうすればよいですか。私はサーバーの情報を持っていない、URLは私が持っているものだけです(APIキーで)。

レスポンスを文字列として取得する作業コードは素晴らしいものです。

+0

次のようにOKHTTP構成する方法を見つけることができますが、以下のように有効なホストされたW/SからJSONをダウンロードして、私に知らせることができます確認してください。また、あなたはAndroid 6 OSを使用していますか? https://jsonplaceholder.typicode.com/posts –

+0

有効なAPIキーを使用してURLを開くと、同じ応答が返されます。また、このアプリは、 'main'メソッドの' readFromUrl() 'メソッドについては、Ice-Cream Sandwhich - Nougat –

+0

をorg.jsonライブラリを使用しています(この回答を参照)(http://stackoverflow.com/a/4308662/3682535)。 – rupinderjeet

答えて

0

サーバーdata.gov.inは、TLS 1.1を使用するようにのみ設定されているようです。 OKHTTPを使用しているときは、TLS 1.1を使用するようにデバイスを設定します。

例えば:

client.setConnectionSpecs(Collections.singletonList(spec));ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) 
    .tlsVersions(TlsVersion.TLS_1_1) 
    .cipherSuites(
     CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 
     CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
     CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, 
     CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 
     CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 
     CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
     CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 
     CipherSuite.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 
     CipherSuite.TLS_ECDHE_RSA_WITH_RC4_128_SHA, 
     CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 
     CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, 
     CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 
    .build(); 
client.setConnectionSpecs(Collections.singletonList(spec)); 

あなたは https://github.com/square/okhttp/wiki/HTTPS

+0

私はVolleyとHttp Clientで試してみました。 OKHTTPで試してみてください。あなたはいくつかのコードを提供できますか?このコードの前後で何をするのが好きです。本当に助けに感謝します。 –

+0

こんにちはBasu。私の理解から、ウェブサイトのSSL設定ではTLS 1.1しか許可されていないようです。 あなたのコードが4.4で動作することを確認するために、4.4以上の別のAndroidデバイスを使用してください。 その場合は、問題を特定しました。 –

+0

私はLolipopを試しました。しかし、コードは動作しません。それでも同じエラーが表示されます。 –

関連する問題