javax. net .ssl.SSLHandshakeException: не удалось выполнить рукопожатие на уровне API 28 и 29 с использованием okhttp3: ok http:4.2.2 - PullRequest
0 голосов
/ 03 февраля 2020

Привет, я пишу приложение android, которое использует okhttp для подключения к серверу, у меня все в порядке с уровнями API ниже 28 для подключения и получения данных с сервера, но в телефонах с android 28 и выше мне не удалось ошибка подключения к серверу. Мой первый код был:

private void getToken(){
    OkHttpClient client = new OkHttpClient();
    cons.phoneNumber = dbHelper.readUserMobile(api.getDatabase());
    Log.i("Log40","phone in OkHttp is: "+ cons.phoneNumber);
    Request request = api.loginRequest(cons.phoneNumber);
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NotNull Call call, @NotNull IOException e) {
            //my codes on failure
        }

        @Override
        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
           //my codes for response 
        }
    });

}

, а моя функция api.loginRequest (cons.phoneNumber) была:

public Request loginRequest(String phoneNumber){
    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = new FormBody.Builder()
            .add("Grant_Type","password")
            .add("username",phoneNumber)
            .build();
    //RequestBody body = RequestBody.create(mediaType, "Grant_Type=password&username="+phoneNumber);
    Request request = new Request.Builder()
            .url("http://"siteadress"/api/v1/User/Login")
            .post(body)
            .addHeader("Content-Type", "application/x-www-form-urlencoded")
            .addHeader("Accept", "application/json")
            .addHeader("User-Agent", "Pouya")
            .addHeader("Cache-Control", "no-cache")
            .addHeader("Host", "hostip:hostport")
            .addHeader("Accept-Encoding", "gzip, deflate")
            .addHeader("Content-Length", "40")
            .addHeader("Connection", "keep-alive")
            .addHeader("cache-control", "no-cache")
            .build();
    return request;
}

, но при этом мне не удалось подключиться к ошибке сервера: CLEARTEXT связь не включена для клиента

, поэтому я искал в Интернете и переполнении стека они сказали, что проблема была в пропущенном s после http проблема, поэтому я добавил s , но я получил новую ошибку, и ошибка:

Не удалось подключиться к серверу, javax. net .ssl.SSLHandshakeException: Сбой рукопожатия

Я снова прочитал поток стека и произвел поиск, и мой код изменился на:

private void getToken(){
    OkHttpClient client = new OkHttpClient.Builder()
            .connectionSpecs(Arrays.asList(ConnectionSpec.COMPATIBLE_TLS))
            .build();
    java.lang.System.setProperty("https.protocols", "TLSv1");
    cons.phoneNumber = dbHelper.readUserMobile(api.getDatabase());
    Log.i("Log40","phone in OkHttp is: "+ cons.phoneNumber);
    Request request = api.loginRequest(cons.phoneNumber);
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NotNull Call call, @NotNull IOException e) {
            //my codes on failure
        }

        @Override
        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
           //my codes for response 
        }
    });

}

и добавил s по адресу http в моей функции api.loginRequest (cons.phoneNumber), но я все еще получаю Не удалось подключиться к серверу, javax. net .ssl.SSLHandshakeException: Ошибка рукопожатия . кто-нибудь может помочь?

...