Pergunta

Estou tentando escrever um programa para fazer testes automatizados no meu WebApp. Para conseguir isso, abro uma conexão usando o httpurlconnection.

Uma das páginas que estou tentando testar executa um redirecionamento de 302. Meu código de teste se parece com o seguinte:

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
connection.connect();
system.out.println(connection.getURL().toString());

Então, digamos que o urltossend é http://www.foo.com/bar.jsp, e que esta página o redireciona para http://www.foo.com/quux.jsp. Minha declaração impressa deve imprimir http://www.foo.com/quux.jsp, certo?

ERRADO.

O redirecionamento nunca acontece e imprime o URL original. No entanto, se eu alterar a linha de conexão.Connect () com uma chamada para Connection.getResponsecode (), ele funciona magicamente.

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
//connection.connect();
connection.getResponseCode();
system.out.println(connection.getURL().toString());

Por que estou vendo esse comportamento? Estou fazendo algo errado?

Obrigado pela ajuda.

Foi útil?

Solução

o connect() O método apenas cria uma conexão. Você tem que confirmar o pedido (ligando getInputStream(), getResponseCode(), ou getResponseMessage()) para que a resposta seja devolvida e processada.

Outras dicas

o conectar() O método é implementado na classe de URLConnection e não é substituído pelo HttpurlConnection classe.

A classe URLConnection não está ciente do HTTP e, portanto, não deve seguir o redirecionamento HTTP, mesmo que estivesse criando uma conexão real.

Se você deseja o comportamento intrínseco ao protocolo HTTP, provavelmente deseja manter os métodos implementados na classe HttpurlConnection, como é o método getResponsecode ().

Adicione o seguinte em seu OnCreate

StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

Por que você não usa HttpClient de Apache.

Tentar setFollowDredirects, como pode ajudar. Na verdade, tente getFollowRedirects Para ver se é o problema, primeiro (improvável, pois é verdade por padrão).

Editar: Se esse não for o seu problema, eu tentaria ler algo da conexão (como você faz com getResponseCode Mas eu tentaria também getHeaderField Para ver se ler alguma coisa faz com que o redirecionamento seja respeitado).

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