0

我的 Android 应用正在尝试连接到此 URL:

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

将响应作为字符串获取的工作代码会很棒。

4

1 回答 1

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

于 2016-12-11T18:08:06.127 回答