2016-12-11 6 views
0

Мой Android приложение пытается подключиться к этому URL:Get HTTPS Url Content (содержит 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 KEY).

Рабочий код, чтобы получить ответ в виде строки, будет отличным.

+0

Пожалуйста, проверьте вы можете скачать JSON с действительным принимал W/S, как показано ниже, и дайте мне знать. Кроме того, вы используете Android 6 OS? https://jsonplaceholder.typicode.com/posts –

+0

Да, когда я открываю URL с действующим ключом API, я получаю тот же ответ. И приложение использует Ice-Cream Sandwhich - Nougat –

+0

с использованием библиотеки org.json, [см. Этот ответ] (http://stackoverflow.com/a/4308662/3682535) для метода 'readFromUrl()' в 'main'. – 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)); 

Вы можете найти, как настроить OKHTTP ниже https://github.com/square/okhttp/wiki/HTTPS

+0

Я пробовал те с Volley и Http Client. Попытка с помощью OKHTTP. Можете ли вы предоставить несколько кодов. Как и что делать до и после этого кода. Очень ценю вашу помощь. –

+0

Привет Басу. По моему мнению, похоже, что конфигурация SSL на веб-сайте разрешает только TLS 1.1. Можете ли вы использовать другое Android-устройство под управлением 4.4 вверх, чтобы подтвердить, что ваш код работает над этим. Если это так, то мы определили проблему. –

+0

Я пробовал на Lolipop. Но код не работает. Показывает ту же ошибку. –

 Смежные вопросы

  • Нет связанных вопросов^_^