Efetuar Login em Sites com Java

Opa pessoal!

Estou com dificuldades em criar um método para efetuar login num site, mais precisamente:

Preciso conseguir efetuar o login para ter acesso as outras páginas e com isso capturar as notícias do mesmo.

Fiz Sniffing com o WireShark e apesar de no HTML ter como método POST, no WireShark não apareceu sequer uma única ocorrência de POST, apenas GET, inclusive achei um com meu login…

Conhecem alguma API que eu possa usar para esse uso, de preferência com documentação?

ps.: já procurei muito na internet sobre formas de como fazer isso, mas não consegui encontrar nenhuma… :frowning:

Grato!

Cara, já fiz isso usando HttpClient, segue um trecho do código, espero que ajude:

HttpClient client = new HttpClient();
		client.getParams().setParameter("http.useragent", "Test Client");
		BufferedReader br = null;

		PostMethod method = new PostMethod(URL + "pagina.asp");
		method.addParameter("email", "teste@teste.com");
		method.addParameter("senha", "123456");

		try {
			int returnCode = client.executeMethod(method);

			if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
				System.err.println("The Post method is not implemented by this URI");
				method.getResponseBodyAsString();
			} 
			else {
				try {
					br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
					String readLine = "";
					
					
					while(((readLine = br.readLine()) != null)) {
									
					}
					
	
				} catch (IndexOutOfBoundsException iobe) {
					iobe.printStackTrace();
				}
			}
		} catch (Exception e) {
			System.err.println(e);
		} finally {
			method.releaseConnection();
			if (br != null) try { br.close(); } catch (Exception fe) {}
		}

eu já usei o HttpUnit para fazer esse tipo de coisa.

flw

Veja se este post te ajuda http://guj.com.br/posts/list/89971.java#481498

Já tentou entrar em contato com os donos do site?

[quote]Copyright Folha Online. Todos os direitos reservados. É proibida a reprodução do conteúdo desta página
em qualquer meio de comunicação, eletrônico ou impresso, sem autorização escrita da Folha Online.[/quote]

Consegui fazer a autenticação dessa forma:


try {
	        String data = URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode("XXXX", "UTF-8");
	        data += "&" + URLEncoder.encode("pass", "UTF-8") + "=" + URLEncoder.encode("XXXX", "UTF-8");
	        
	        URL url = new URL("https://acesso.uol.com.br/login.html");
	        URLConnection conn = url.openConnection();
	        conn.setDoOutput(true);
	        conn.setDoInput(true);
	        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
	        wr.write(data);
	        wr.flush();
	        
	        String SessionID = conn.getHeaderField("Set-Cookie");
	        System.out.println("Session ID:" + SessionID);
	    
	        StringBuffer sb = new StringBuffer(50);
	        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
	        String line;
	        while ((line = rd.readLine()) != null) {
	        	sb.append(line + "\n");
				
	        }
	        
                System.out.println("Código: " + sb);
	        
	        wr.close();
	        rd.close();
	    } catch (Exception e) {
	    	e.printStackTrace();
	    }

	}

Minha dúvida agora é quanto a como manter essa sessão.
Dei uma lida aqui sobre Cookies, e estou tentando pegar o mesmo imaginando que este esteja no parâmetro “Set-Cookie”, dentro do Header. Isso é correto?

Caso seja, como eu faria para acessar a próxima página utilizando esse cookie?

Grato!

o HttpClient faz isso automético! :smiley:

Felipe Damiani, você poderia mostrar um trexo de código onde reaproveita as informações que conseguiu?

Fiz aqui o meu método de logar com o HttpClient, com o mesmo escolpo que você usou, mas logo depois, quando tento acessar um site e pegar o HTML com a notícia, ele me manda pra uma página com redirecionamento pra refazer o login.

Parte do código que você postou, com um novo acesso a outra página:


try {
					br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
					String readLine = "";
					StringBuffer sb = new StringBuffer(50);

					while (((readLine = br.readLine()) != null)) {
						sb.append(readLine + "\n");
					}
					
					System.out.println("Código: " + sb);
					
					URL url2 = new URL("http://www1.folha.uol.com.br/agora/ola/ol2506200801.htm");
					
					URLConnection conn2 = url2.openConnection();
					conn2.setRequestProperty("Request-Method",    "GET");
					
					conn2.setDoInput(true);
					conn2.setDoOutput(false);
					conn2.connect();
					

			        StringBuffer sb2 = new StringBuffer(50);
			        BufferedReader rd2 = new BufferedReader(new InputStreamReader(conn2.getInputStream()));
			        String line2;
			        while ((line2 = rd2.readLine()) != null) {
			        	sb2.append(line2 + "\n");
						
			        }
					
					System.out.println("Código 2: " + sb2);