Java okhttp3无法找到可接受的协议

Java okhttp3无法找到可接受的协议,java,intellij-idea,glassfish,okhttp,Java,Intellij Idea,Glassfish,Okhttp,我使用以下设置InteliiJ+java8+Webservice+OkHTTP(3.12.12)+Glassfish(4.1.1)来调用restapi,但在连接到它时遇到一些问题 java.net.UnknownServiceException:找不到可接受的协议。 isFallback=false, 模式=[ConnectionSpec(密码套件=[TLS\U AES\U 128\U GCM\U SHA256, TLS_AES_256_GCM_SHA384,TLS_CHACHA20_Poly

我使用以下设置InteliiJ+java8+Webservice+OkHTTP(3.12.12)+Glassfish(4.1.1)来调用restapi,但在连接到它时遇到一些问题

java.net.UnknownServiceException:找不到可接受的协议。 isFallback=false, 模式=[ConnectionSpec(密码套件=[TLS\U AES\U 128\U GCM\U SHA256, TLS_AES_256_GCM_SHA384,TLS_CHACHA20_Poly 1305_SHA256, TLS_AES_128_CCM_SHA256,TLS_AES_256_CCM_8_SHA256, TLS_ECDHE_ECDSA_与_AES_128_GCM_SHA256, TLS_ECDHE_RSA_与_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_与_AES_256_GCM_SHA384, TLS_ECDHE_RSA_与_AES_256_GCM_SHA384, 与CHACHA20和POLY1305和SHA256, TLS_ECDHE_RSA_与_CHACHA20_poly 1305_SHA256, TLS_ECDHE_RSA_与_AES_128_CBC_SHA, TLS_ECDHE_RSA_与AES_256_CBC_SHA,TLS_RSA_与AES_128_GCM_SHA256, TLS_RSA_带AES_256_GCM_SHA384,TLS_RSA_带AES_128_CBC_SHA, TLS_RSA_与_AES_256_CBC_SHA,SSL_RSA_与_3DES_EDE_CBC_SHA], TLS版本=[TLS_1_3,TLS_1_2,TLS_1_1,TLS_1_0], supportsTlsExtensions=true),ConnectionSpec()],受支持 协议=[TLSv1.2,TLSv1.1,TLSv1]

我怀疑这可能是TLS版本的问题,也就是说,我通过OkHTTP以较低的TLS呼叫。但是JDK 8默认使用TLS 1.2。我还将TLS设置为TLS 1.2,代码仍然没有结果。现在我想知道还有什么其他设置会导致此问题。很抱歉,这是我第一次使用java构建Web服务。如果有其他设置我需要做,请告诉我

下面是我的代码

 ConnectionSpec requireTLS12 = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
               .tlsVersions(TlsVersion.TLS_1_2)
               .build();

        OkHttpClient client = new OkHttpClient.Builder()
                .connectionSpecs(Arrays.asList(requireTLS12))
                .build();     
                
        Request request = new Request.Builder()
                .url("https://restcountries-v1.p.rapidapi.com/all")
                .get()
                .addHeader("x-rapidapi-host", "restcountries-v1.p.rapidapi.com")
                .addHeader("x-rapidapi-key", "key_key_key")
                .build();

        try (Response response = client.newCall(request).execute()) {
            ResponseLah = response.body().string();
            // ... do something with response
            return ResponseLah;
        } catch (IOException e) {
            e.printStackTrace();
        }
        

这有用吗?客户端和服务器之间可能没有任何交集。我很抱歉@JesseWilson我不明白这是否意味着它显示错误的原因是因为“没有媒体可以与之交谈”,即像可信证书一样?您的服务器和客户端需要支持足够的协议,以确保存在交叉点。这有帮助吗?客户端和服务器之间可能没有任何交集。我很抱歉@JesseWilson我不明白这是否意味着它显示错误的原因是因为“没有媒体可以与之交谈”,即像可信证书一样?您的服务器和客户端需要支持足够的协议,以确保存在交叉点。