Validação de Cpf Direto da Receita

6 respostas
java
J

Olá estou querendo validar o cpf diretamente pelo site da receita federal https://servicos.receita.fazenda.gov.br/Servicos/CPF/ConsultaSituacao/ConsultaPublica.asp

É possível fazer esta validação passando os parâmetros pelo Java.
Pois não sei como fazer isto,se alguém puder me explicar como faço
Se alguém puder me ajudar ficarei muito grato

6 Respostas

I

Tem uma discussão muito interessante aqui: Groups Google - Consulta cpf na receita federal.

J

pode me ajudar neste erro:

cookieCaptcha=mCM65vkqmC9Xo2b3Z4G+NE3EY5/Bf2GpY0W6waOS4I4=
{Accept-Charset=[ISO-8859-1,utf-8;q=0.7,*;q=0.7], Cookie=[cookieCaptcha=mCM65vkqmC9Xo2b3Z4G+NE3EY5/Bf2GpY0W6waOS4I4=], Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8], Referer=[https://servicos.receita.fazenda.gov.br/Servicos/CPF/ConsultaSituacao/ConsultaPublicaSonoro.asp], User-Agent=[Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0], Accept-Language=[pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3], Accept-Encoding=[gzip, deflate], DNT=[1]}
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl
CONSTRUÍDO COM SUCESSO (tempo total: 2 minutos 50 segundos)

Estou usando o Netbeans para isso e não sei como implemento o Https, esse é o código que consegui achar na net

package web;

import java.awt.BorderLayout;
import java.awt.Image;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class ValidarCpf {
public static void main(String[] args) {
    URL url;
    HttpURLConnection conn;
	try {
		//ativarProxy();
		//url do captcha
		
		url = new URL("http://www.receita.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image&v=" + new Date().getTime());
		conn = (HttpURLConnection) url.openConnection();
		       
        Image image = ImageIO.read(conn.getInputStream());	        

        //Exibir o captcha
        JFrame frame = new JFrame();
        JLabel label = new JLabel(new ImageIcon(image));
        frame.getContentPane().add(label, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        //entrada do texto do captcha
         
        String idLetras = JOptionPane.showInputDialog("Digite o captcha");
        String headerName;
        String cookie = "";
        frame.dispose();
        
        //capturar o cookie
        for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) {
        	if (headerName.equals("Set-Cookie"))                  
        		cookie = conn.getHeaderField(i);          
        }
        
        cookie = cookie.split(";")[0];
        System.out.println(cookie);
        
        //url da consulta
        url = new URL("https://servicos.receita.fazenda.gov.br/Servicos/CPF/ConsultaSituacao/ConsultaPublicaSonoro.asp");
        //url = new URL("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp");
     	        
        conn = (HttpURLConnection) url.openConnection();
        //cria os parametros	        
        String parametros = URLEncoder.encode("txtCPF", "UTF-8") + "=" + URLEncoder.encode("[telefone removido]", "UTF-8");
        parametros += "&" + URLEncoder.encode("idLetra", "UTF-8") + "=" + URLEncoder.encode(idLetras, "UTF-8");            
        //parametros += "&" + URLEncoder.encode("idSom", "UTF-8") + "=";            
        parametros += "&" + URLEncoder.encode("Enviar", "UTF-8") + "=" + URLEncoder.encode("Consultar", "UTF-8");            
        
        conn.setDoOutput(true);
        conn.setDoInput(true);    
        conn.setInstanceFollowRedirects(false);
        conn.setRequestMethod("POST");
        
        //cookie = "cookieCaptcha=NTB/MXdqZAiFZsfiE5ZRQDJ7h564PBjvwIHdN9cbEog=";
        
        //seta as propriedades de request
        conn.setRequestProperty("Host", "www.receita.fazenda.gov.br");
        //conn.setRequestProperty("Cookie", URLEncoder.encode(cookie, "UTF-8"));
        conn.setRequestProperty("Cookie", cookie);
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0");
        conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        conn.setRequestProperty("DNT", "1");
        conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
        conn.setRequestProperty("Accept-Language", "pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3");
        conn.setRequestProperty("Referer", "https://servicos.receita.fazenda.gov.br/Servicos/CPF/ConsultaSituacao/ConsultaPublicaSonoro.asp");
        
        System.out.println(conn.getRequestProperties());
        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
        wr.writeBytes(parametros);
        wr.flush();           
        
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String s = "";
        String parametroTotal = "";
        
        while (null != ((s = rd.readLine()))) {  
        	System.out.println("0"+s);
        	if(s.contains("Login")){
        		parametroTotal = s;
        	}
        } 
                               
       for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) {
        	System.out.println(headerName + ": " + conn.getHeaderField(i));
        	if(headerName.equals("Set-Cookie"))
        		cookie = conn.getHeaderField(i).split(";")[0] +"; "+ cookie;
       }

       wr.close();
       rd.close();
        
       String login = parametroTotal.split("Login=")[1].split("&")[0];
       String senha = parametroTotal.split("Senha=")[1].split("\"")[0];
       
       System.out.println(login);
       System.out.println(senha);
       
       //começa novo redirecionamento
       ///
       /////
       
       url = new URL("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp");
        //url = new URL("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp");
        conn = (HttpURLConnection) url.openConnection();
     	             	        
        //cria os parametros	        
       parametros = URLEncoder.encode("CPF", "UTF-8") + "=" + URLEncoder.encode("[telefone removido]", "UTF-8");
       parametros += "&" + URLEncoder.encode("Login", "UTF-8") + "=" + URLEncoder.encode(login, "UTF-8");            
       parametros += "&" + URLEncoder.encode("Senha", "UTF-8") + "=" + URLEncoder.encode(senha, "UTF-8");            
       parametros += "&" + URLEncoder.encode("idLetra", "UTF-8") + "=" + URLEncoder.encode(idLetras, "UTF-8");            

       conn.setDoOutput(true);
       conn.setDoInput(true);    
       conn.setInstanceFollowRedirects(false);
       conn.setRequestMethod("GET");
       
       //seta as propriedades de request
       conn.setRequestProperty("Host", "www.receita.fazenda.gov.br");
       //conn.setRequestProperty("Cookie", URLEncoder.encode(cookie, "UTF-8"));
       conn.setRequestProperty("Cookie", cookie);
       conn.setRequestProperty("User-Agent", "Chrome");
       conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
       conn.setRequestProperty("DNT", "1");
       conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
       conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
       conn.setRequestProperty("Accept-Language", "pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3");
       conn.setRequestProperty("Referer", "http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublica.asp");
       
       
       System.out.println(conn.getRequestProperties());
       
       OutputStreamWriter wr2 = new OutputStreamWriter(conn.getOutputStream());
       wr2.write(parametros);
       wr2.flush();           
       
       rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
       
       while (null != ((s = rd.readLine()))) {  
    	   System.out.println(s);
       } 
       
     for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) {
        	System.out.println(headerName + ": " + conn.getHeaderField(i));   
       }

	} catch (Exception e) {
		e.printStackTrace();
	}  
}
}

O que faço agora @Iohannes

I

Como assim implementar o HTTPS (Hypertext Transfer Protocol Secure)? Creio, pela exceção que o acesso está exigindo validação por certificado digital. Tu tem um? Dê olhada aqui: HTTPS - Como Funciona?

J

Não posso usar o da receita mesmo? Pra este caso.

Pois o certificado ele criptografa as requisições feitas

G

Voce consegue validar sem digitar captcha ?

J

não tenho que digitar o captcha,pois senão da erro

Criado 12 de dezembro de 2019
Ultima resposta 13 de dez. de 2019
Respostas 6
Participantes 3