Desejo retornar false se a URL demorar mais de 5 segundos para conectar - como isso é possível usando Java? Aqui está o código que estou usando para verificar se o URL é válido
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
java.net.ConnectException: Connection timed out: connect
antes mesmo de 2 minutos acabar. Você sabe o que está causando o problema?setConnectTimeout
antes de qualquer um dos métodos que se conectam implicitamente (basicamente todos os métodos que lançam IllegalStateException, se já estiver conectado). Idealmente, faça do setConnectTimeout (readTimeout) os primeiros métodos chamados.con.setReadTimeout()
, funcionou como esperado.Você pode definir um tempo limite como este,
fonte
Se a conexão HTTP não atingir o tempo limite, você poderá implementar o verificador de tempo limite no próprio encadeamento em segundo plano (AsyncTask, Service, etc), a seguinte classe é um exemplo para Personalizar o AsyncTask, que excede o tempo limite após determinado período
Uma amostra para isso
fonte
onPreExecute()
. Além disso, se você cancelar a tarefa manualmente, também deverá cancelar a chamada agendada para evitar vazamentos.Eu poderia obter solução para um problema semelhante com a adição de uma linha simples
Meu requisito era conhecer o código de resposta e, para isso, basta obter as metainformações, em vez de obter o corpo de resposta completo.
O método de solicitação padrão é GET e demorava muito tempo para retornar, finalmente me lançando SocketTimeoutException. A resposta foi bem rápida quando defino o método de solicitação como HEAD.
fonte
HEAD
solicitação que não produzirá nenhum corpo de resposta..setRequestMethod("HEAD")
em seu código. Estranhamente, essa descrição era exatamente o que eu precisava para reduzir meu problema de "Muitos arquivos abertos". Então obrigado?