Fazendo login em um site? (Jsoup)
O que é necessário para fazer login em um site usando Jsoup? Acredito que meu código esteja correto, mas nunca efetuei login em um site usando o Jsoup, por isso talvez esteja faltando alguma coisa. Aqui está o meu código:
try {
String url = ("http://quadrigacx.com/login");
Connection.Response loginForm = (Connection.Response)Jsoup.connect(url)
.method(Connection.Method.GET)
.execute();
Document loginDoc = loginForm.parse();
Elements loginElements = loginDoc.select("input:not([name=client_id]):not([name=password])");
int i = 0;
String v[] = new String[loginElements.size()];
for (Element element: loginElements){
v[i++] = element.attr("value");
}
int ii = 0;
String n[] = new String[loginElements.size()];
for (Element element: loginElements){
n[ii++] = element.attr("name");
}
Connection.Response loginFormLogin = (Connection.Response)Jsoup.connect(url)
.cookies(loginForm.cookies())
.data(n[0],v[0])
.data("client_id", "xxxxxxx")
.data("password", "xxxxxx")
.data(n[1],v[1])
.data(n[2],v[2])
.method(Connection.Method.POST)
.execute();
Document document2 = Jsoup.connect("http://quadrigacx.com/settings")
.cookies(loginFormLogin.cookies())
.get();
System.out.print(document2.toString());
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
document2
retorna uma página de login que mostra que não efetuou login com êxito. Há um valor de entrada chamadotime
, e acho que pode ser por isso que não funciona. É um valor que aumenta com o tempo; Corri o código duas vezes e as variáveis de tempo retornaram1511226860
e1511226876
. Meu código leva cerca de 10 segundos para imprimir o documento, então talvez otime
variável já mudou quando envia a solicitação de postagem? Não tenho certeza se esse é o problema. Talvez haja algo mais que não estou vendo? Obrigado.
Edit: Aqui está o código, eu publico a autenticação depois de já ter efetuado login com o ID do usuário e a senha.loginCookies
são os cookies do primeiro login.Connection.Response auth = Jsoup.connect("https://quadrigacx.com/authenticate") .userAgent("Mozilla") .method(Connection.Method.POST) .cookies(loginCookies) .data("google_code", googleCode.getText()) .data("email_code", emailCode.getText()) .data("authenticate", "Authenticate") .followRedirects(true) .execute();
Eu também tentei: byte[] gcText = googleCode.getText().getBytes(ISO_8859_1); String gcValue = new String(gcText, UTF_8); byte[] ecText = emailCode.getText().getBytes(ISO_8859_1); String ecValue = new String(ecText, UTF_8); Connection.Response auth = Jsoup.connect("https://quadrigacx.com/authenticate") .userAgent("Mozilla") .method(Connection.Method.POST) .cookies(loginCookies) .data("google_code", gcValue) .data("email_code", ecValue) .data("authenticate", "Authenticate") .followRedirects(true) .execute();