我的Android应用正在尝试连接到此网址:
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 :(得分: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