Duvida sobre acessos a um link/url?

Bom estou desenvolvendo um programa, e ele precisa checar alguns URLS/links e minha duvida é:

Qual é o método mais eficiente/mais rápido para ler a URL?

Existem varias coisas, e estou meio perdido como:

  • HTTPUrlConnection
  • URLConnection
  • URL

e realizei alguns testes, e quando acesso uma URL usando https:// demora muito mais que o http:// (5-9 segundos a mais) e etc…

Essas URLs que você vai checar retorna HTML e você precisa manipular esse HTML? Ou apenas retornam conteúdo JSON? Ou você quer apenas checar se dá pra conectar com essa URL? Quero aproveitar também pra perguntar qual a versão do Java porque se for o Java 11 tem um HttpClient bem fácil de usar.

o retorno vem em JSON, uso Scanner para ler tudo, depois obtenho oque preciso. Uso java 8.
tenho muitas duvidas de como fazer conectar mais rapido, pq pra ler, é mt rápido.

Você não podia dar exemplos de código com o que você tá fazendo?

Um exemplo de código buscando dados de uma API:

class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://uma_api_qualquer_que_retorna_json.com");
        HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
        conexao.setRequestMethod("GET");

        String conteudoRetornado = new BufferedReader(new InputStreamReader(conexao.getInputStream()))
                .lines()
                .collect(Collectors.joining("\n"));

        System.out.println(conteudoRetornado);
    }
}

Usar o BufferedReader melhora o performance na leitura do Stream.

Utilizo este código abaixo:

Scanner checker = new Scanner(new URL("umaapi").openStream());
StringBuilder entirePage = new StringBuilder();
while (checker.hasNextLine()) {
	entirePage.append(ProxyChecker.nextLine());
}
checker.close();

Conexão com a URL feita em -> 16486ms (utilizando https)
Conexão com a URL feita em -> 125 (http:)

e utilizando este código, não precisa “fechar” o BufferedReader? sei la… e nem a conexao?
conexao.disconnect(); <-

Que estranho ter tanta diferença assim. Eu testei usando Scanner e não demorou tanto. E o que é o ProxyChecker no seu código?

E, sim, precisa fechar o recurso, mas apenas do BufferedReader. Todos os outros recursos encapsulado pelo BufferedReader é fechado automaticamente ao invocar close() no objeto BufferedReader.

Pode testar esse código e vê se continua demorando muito?

class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://ENDEREÇO_DA_SUA_API_AQUI");
        HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
        conexao.setRequestMethod("GET");

        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conexao.getInputStream()))) {
            String todoConteudoRetornado = bufferedReader
                    .lines()
                    .collect(Collectors.joining("\n"));

            System.out.println(todoConteudoRetornado);
        } // todos os recursos estão devidamente fechados quando chega aqui
    }
}

Utilizando http:

Conexão com a URL feita em -> 156ms
Conexão com a URL feita em -> 117ms

https:
Conexão com a URL feita em -> 6966

o BufferedReader ja está fechado msm?

Sim, usando o try-with-resources os recursos declarados dentro do try são fechados automaticamente.

https:
Conexão com a URL feita em -> 6966

Isso é usando o código de exemplo que te passei? Então, testa com outras URL qualquer como “https://google.com” ou “https://g1.globo.com” e vê se demora do mesmo jeito. Se só a URL da sua API que demora, então o problema não é o código. Se qualquer URL demora, talvez (apenas, talvez) o problema seja a sua conexão ou rede, pois é estranho o mesmo código ter tanta diferença.

aah, entendi, valeu pelo suporte mano, acho que é sim minha internet ou meu computador mesmo, sei la. porém, sempre ‘http:’ vai muito mais rápido.

Mas outras URL como “https://google.com” também foram bem lentas, então?

sim