2016-12-11 110 views
0

我的Android應用程序試圖連接到這個網址:獲取HTTPS URL內容(包含JSON)

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

這個網址給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​​ KEY)。

以字符串形式獲取響應的工作代碼將非常棒。

+0

請檢查您可以從託管W/S,如下一個有效的下載JSON,讓我知道。另外,您是否使用Android 6操作系統? https://jsonplaceholder.typicode.com/posts –

+0

是的,當我打開一個有效的API密鑰的網址,我得到相同的迴應。和應用程序使用冰淇淋三明治 - 牛軋糖 –

+0

使用org.json庫,[見這個答案](http://stackoverflow.com/a/4308662/3682535)''readFromUrl()'方法在'main'方法。 – rupinderjeet

回答

0

您的服務器data.gov.in似乎只配置爲使用TLS 1.1。 當您使用OKHTTP時,請將設備設置爲使用TLS 1.1。

E.g:

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

你可以找到如何OKHTTP配置如下 https://github.com/square/okhttp/wiki/HTTPS

+0

我試過用排氣和Http客戶端。嘗試使用OKHTTP。你能提供更多的代碼嗎?就像這個代碼之前和之後要做的一樣。非常感謝您的幫助。 –

+0

嗨巴蘇。從我的理解看來,網站的SSL配置似乎只允許TLS 1.1。 您可以使用另一個運行4.4以上版本的Android設備來確認您的代碼適用於此。 如果是這樣,那麼我們已經確定了這個問題。 –

+0

我試過Lolipop。但是代碼不起作用。仍然顯示相同的錯誤。 –