Очень медленное соединение с доменом OkHttp с поддержкой IPv6 в Android Studio

У меня есть два домена, указывающие на один и тот же сервер: у одного включен ipv6, у другого нет.

4 сценария отправки запроса

  1. IPv6 включен, используется Wi-Fi, возврат примерно через 4 секунды.
  2. IPv6 включен, используются сотовые данные, возврат примерно через 36 секунд.
  3. IPv6 отключен, используется Wi-Fi, возврат примерно через 4 секунды
  4. ipv6 отключен, используются сотовые данные, возврат примерно через 6 секунд

Ниже приведен мой Java-код, надеюсь, кто-нибудь поможет мне с включенным ipv6, используя ситуацию с сотовыми данными.

          protected int executePost(String _url, byte[] _data) {
        OkHttpClient bootstrapClient = new OkHttpClient.Builder()
                .callTimeout(20, TimeUnit.SECONDS)
                .cache(new Cache(new File("/local/cacheDirectory"), 10 * 1024 * 1024))
                .retryOnConnectionFailure(false)
                .followRedirects(false)
                .followSslRedirects(false)
                .build();

        Dns dns = new DnsOverHttps.Builder().client(bootstrapClient)
                .url(HttpUrl.get("https://cloudflare-dns.com/dns-query"))
                .bootstrapDnsHosts(getByIp("1.1.1.1"), getByIp("1.0.0.1"))
                .includeIPv6(true)
                .post(true)
                .build();

        OkHttpClient client = bootstrapClient.newBuilder().dns(dns).build();

        final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody postBody = RequestBody.create(_data, JSON);
        Request post = new Request.Builder()
                .url(_url)
                .post(postBody)
                .addHeader("Content-Type", "application/json")
                .build();

        try (Response response = client.newCall(post).execute()) {
            m_httpStatus = response.code();
            m_httpBody = response.body().string();
        } catch(Exception e) {
            m_httpStatus = -1;
            m_httpError = e.getCause().toString();
        }

        return m_httpStatus;
    }

PS Я использую okhttp:5.0.0-alpha.11 и уверен, что на моем устройстве есть ipv6.

0 ответов

Другие вопросы по тегам