Login em site via POST (Java)

05/09/2016

0

Olá pessoal, estou com problemas em relação a efetuar um código que faça login em meu site automaticamente pelo Java, quero efetuar uma automação desse login no caso.
Preciso mandar os meus dados para o servidor e receber uma resposta de retorno, seja ela o título da página ou outro método de autenticação para saber a diferenciação entre a página de login e a página de acesso restrito, para verificar se deu certo.
O código que estou usando é o seguinte:

package http;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Consts;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class NavegadorSite {

private final DefaultHttpClient client = new DefaultHttpClient();


public boolean login(final String url, final String user, final String password) throws UnsupportedEncodingException, IOException {

/* Método POST */
final HttpPost post = new HttpPost(url);
boolean result = false;

/* Configura os parâmetros do POST */
final List<NameValuePair> nameValuePairs =
new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("txtUser", user));
nameValuePairs.add(new BasicNameValuePair("txtPass", password));


/*
* Codifica os parametros.
*
* Antes do encoder: fulano@email.com
* Depois do enconder: fulano%40email.com
*/
post.setEntity(new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8));

/* Define navegador */
post.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0");

/* Efetua o POST */
HttpResponse response = client.execute(post);

/* Resposta HTTP: Sempre imprimirá “HTTP/1.1 302 Object moved” (no caso da devmedia) */
System.out.println("Login form get: " + response.getStatusLine());

/*
* Consome o conteúdo retornado pelo servidor
* Necessário esvaziar o response antes de usar o httpClient novamente
*/
EntityUtils.consume(response.getEntity());

/*
* Testar se o login funcionou.
*
* Estratégia: acessar uma página que só está disponível quando se está logado
* Em caso de erro, o servidor irá redirecionar para a página de login
* A pagina de login contem uma string: "Faça o login"
* Se esta String estiver presente, significa que o login não foi efetuado com sucesso
*
*/
final HttpGet get = new HttpGet("http://www.meusite.com.br/area_restrita.php");
response = client.execute(get);

/*
* Verifica se a String: "Faça Login" está presente
*/
if (checkSuccess(response)) {
System.out.println("Conexao Estabelecida!");
result = true;
} else {
System.out.println("Login não-efetuado!");
}

return result;
}

/**
* Abre página
* @param url - Página a acessar
* @throws IOException
*/
public void openPage(final String url) throws IOException {
final HttpGet get = new HttpGet(url);
final HttpResponse response = client.execute(get);
saveHTLM(response);
}

/**
* Encerra conexão
*/
public void close() {
client.getConnectionManager().shutdown();
}

/**
* Busca por String que indica se o usuário está logado ou não
* @param response
* @return true - Não achou String | false - Achou String
* @throws IOException
*/
private boolean checkSuccess(final HttpResponse response) throws IOException {
final BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line;
boolean found = false;
/* Deixa correr todo o laco, mesmo achando a String, para consumir o content */
while ((line = rd.readLine()) != null) {
if(line.contains("Faça o login")) {
found = true;
}
}
return !found;
}

/**
* Salva a página
* @param response
* @throws IOException
*/
private void saveHTLM(final HttpResponse response) throws IOException {
final BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line;
File arquivo = new File("c:\\\\arquivo.html");
PrintWriter writer = new PrintWriter(arquivo);
while ((line = rd.readLine()) != null) {
System.out.println(line);
writer.println(line);
}
writer.flush();
writer.close();
}

/**
* Roda aplicação
* @param args
*/
public static void main(String[] args) {

NavegadorSite navegador = new NavegadorSite();

try {
// Tenta efetuar login
boolean ok = navegador.login("http://www.meusite.com.br", "meu_usuario", "minha_senha");
if (ok) {
// Acessa página restrita
navegador.openPage("http://meusite.com.br");
}
navegador.close();
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}


Esse código está dando o seguinte erro:
run:
Login form get: HTTP/1.1 200 OK
java.net.UnknownHostException: www.portal.bilac.com.br
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
at java.net.InetAddress.getAllByName(InetAddress.java:1192)
at java.net.InetAddress.getAllByName(InetAddress.java:1126)
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:262)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:161)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:328)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at http.NavegadorSite.login(NavegadorSite.java:76)
at http.NavegadorSite.main(NavegadorSite.java:158)
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Desde já agradecido, abraço
Bryann

Bryann

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar