Pergunta

Eu sou novo no Apache HttpClient, usei o seguinte código para obter o tempo limite da conexão HTTP (desconectada) após determinado intervalo de tempo:

PostMethod method = new PostMethod(authURL);
HttpClient client = new HttpClient();
HttpClientParams params= new HttpClientParams();
params.setParameter(params.CONNECTION_MANAGER_TIMEOUT, 10); //10 Nano second
client.executeMethod(method);

mas espera mais de um minuto sem qualquer esperança de atingir o tempo limite/desconectar?Onde pode estar o problema?

Foi útil?

Solução

Existem 2 tempos limites envolvidos no httpclient, tente definir ambos,

  client.getHttpConnectionManager().
        getParams().setConnectionTimeout(5000);
  client.getHttpConnectionManager().
        getParams().setSoTimeout(5000);

No entanto, os valores serão ignorados se a conexão estiver presa em uma chamada de soquete nativa. Portanto, você pode precisar executar a solicitação em um tópico diferente para que você possa cronometrar. Veja minha resposta para esta pergunta sobre como fazer isso,

Tempo limite do processo nativo de Java

Outras dicas

O tempo limite do Connection Manager aciona quando o ato de tentar obter uma conexão do seu Gerenciador de conexão demora muito. Não é o mesmo que o tempo limite para a própria conexão HTTP. Use httpclientparams.setTimeout () em vez disso.

http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/params/httpmethodparams.html#setsotimeout%28int%29

Você já olhou para a configuração SO_TIMEOUT ?

Define o tempo limite do soquete (SO_TIMEOUT) em milissegundos a serem usados ​​ao executar o método.Um valor de tempo limite de zero é interpretado como um tempo limite infinito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top