Consulta cpf na receita federal

2,399 views
Skip to first unread message

J04QU1M 50RR14

unread,
Dec 15, 2014, 3:13:26 PM12/15/14
to jav...@googlegroups.com
Boa tarde, Galera!!!

Me deparei com um missão quase impossivél pelo menos pra mim que sou iniciante em java, é logo ganhei está bomba de tarefa, tenho que desenvolver um serviço para o projeto que participo e  que seria um modo de interagir com o site da receita como se fosse um webservice e acessar o site da receita, pegar a imagem do captcha, gerar um formulário com a imagem do captcha e os campos cpf e digitos do captcha, validar o cpf, pra depois fazer a consulta no site da receita e exibir o resultado. 

A principio eu consigo obter a imagen captha do site, mas não consigo ir mas adiante me sinto de mãos atadas, alguém ja teve que fazer esse tipo de consulta, podem me ajudar ou até mesmo me instruir.


Grato,



Joaquim de castro


Analista de Sistemas jr
Indra Company

Ricardo Johannsen

unread,
Dec 15, 2014, 5:57:52 PM12/15/14
to jav...@googlegroups.com
Olá Joaquim, me deram uma tarefa parecida, fazer um web service pra conversar com o infoconv da receita federal(consulta de CPF e CNPJ), o problema nem é tanto desenvolver o web service,mas sim configurar o certificado digital no glassfish, nunca trabalhei com certificado digital. Você conseguiu se autenticar utilizando o certificado digital fornecido pela SERPRO? caso positivo, qual? o servidor que utilizou? quais os procedimentos foram necessarios pra instalar e configurar o certificado digital?
eu consegui o acesso a  url do wsdl deles, mas tá dando erro de autenticação no  certificado

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/4c231c0c-d020-47a4-bcb9-94c2d01b7d13%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Rodolpho Sbaraglini Couto

unread,
Dec 15, 2014, 8:01:53 PM12/15/14
to jav...@googlegroups.com
Joaquim,

Acredito que sua tarefa é desenvolver um robô para manipular o html, certo? Se sim, recomendo fortemente o HtmlUnit.
Recentemente desenvolvi um projeto para consultar NF-e e CT-e no site da Sefaz e converter para o layout XML. No meu caso, precisei decodificar a imagem do captcha em base 64, algo mais ou menos assim:

public InputStream requestCaptcha() {
    
    HtmlImage htmlImage = (HtmlImage) htmlPageConsulta.getElementById("ContentPlaceHolder1_imgCaptcha");    
    String captcha = htmlImage.getSrcAttribute().replace("data:image/png;base64,", "");
    return new ByteArrayInputStream(Base64.decodeBase64(captcha));
}

A partir daí você só precisa renderizar a imagem para o usuário e quando ele submeter o formulário, setar os valores nos inputs do site. Fica mais ou menos assim:

((HtmlTextInput) htmlPageConsulta.getElementById("ContentPlaceHolder1_txtCaptcha")).setValueAttribute(captcha);

Depois é só submeter o formulário:

// retornará a página redirecionada pelo submit
((HtmlSubmitInput) htmlPageConsulta.getElementById("ContentPlaceHolder1_btnConsultar")).click();

Faz sentido pra você?

J04QU1M 50RR14

unread,
Dec 16, 2014, 12:03:01 PM12/16/14
to jav...@googlegroups.com
Rodolpho,


Faz sentido sim, vou tentar aqui mas vejo que é bem complicado mas se conseguir e post toda a aplicação aqui.






Em segunda-feira, 15 de dezembro de 2014 18h13min26s UTC-2, J04QU1M 50RR14 escreveu:

Douglas

unread,
Dec 18, 2014, 4:37:47 AM12/18/14
to jav...@googlegroups.com
Oi..
Eu ontem a noite comecei fazer uns testes(é um projeto didático então não posso dedicar tempo durante o expediente para ele), me deparei com uma situação, quando está carregando a página:

Quanto está executando:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
final HtmlPage page = webClient.getPage("http://www.receita.fazenda.gov.br/aplicacoes/ATCTA/cpf/ConsultaPublica.asp");

Estoura a execption:
Advertência:   CSS warning: 'http://www.receita.fazenda.gov.br/aplicacoes/ATCTA/cpf/ConsultaPublica.asp' [1:3069] Ignoring the whole rule.
Advertência:   #{wrapperCPF.requestCaptcha()}: com.gargoylesoftware.htmlunit.ScriptException: type property can't be changed (http://www.receita.fazenda.gov.br/js/jquery/jquery.js#12)
javax.faces.FacesException: #{wrapperCPF.requestCaptcha()}: com.gargoylesoftware.htmlunit.ScriptException: type property can't be changed (http://www.receita.fazenda.gov.br/js/jquery/jquery.js#12)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

Dei uma procurada, mas não consegui encontrar solução para isso, se alguém souber.. já ajuda no caminho :D

Obrigado.

Douglas

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.

Rodolpho Sbaraglini Couto

unread,
Dec 18, 2014, 5:26:48 AM12/18/14
to jav...@googlegroups.com
Douglas,

Ignore as exceções de js:

webClient.getOptions().setThrowExceptionOnScriptError(false);

E desabilite o css e o js para a request ser mais rápida:

webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);

Eduardo Nobre

unread,
Dec 19, 2014, 8:01:49 AM12/19/14
to jav...@googlegroups.com
webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
page = webClient.getPage(URL);






Para mais opções, acesse https://groups.google.com/d/optout.


--
Eduardo Nobre
(85) 8605 0000 (OI)
"I'd rather regret the things I've done than regret the things I haven't done"

Vagner Araujo

unread,
Dec 21, 2014, 5:40:53 AM12/21/14
to jav...@googlegroups.com
Então,

para realizar uma consulta pública não precisa pagar nada, como mencionado anteriormente. Vendo a necessidade do pessoal conseguir ter autorização lá na empresa para desenvolver um projeto piloto que funcione como webservice, depois de estudar o site da receita, vi que não era tão difícil implementar o webservice, implementei o de consulta ao CPF, funcionou lindamente, infelizmente não posso postar o código por causa da empresa, mas na segunda ou terça pretendo conseguir autorização para fazer o deploy para os servidores e quem sabe talvez conseguir autorização para liberar um link para mostrar a versão piloto em ação... A parte trabalhosa que não implementei foi o de quebrar o captcha, pois tem que tratar a imagem e só depois usar um ocr, mas isso deve violar a política de uso, então fiz para não quebrar e muito menos violar nenhuma regra... Acredito que talvez eu consiga liberar o link para quem quiser usar o webservice e, possivelmente receba autorização para implementar outros. hihihhihhiihihhihihihi... ^_^

luxu

unread,
Dec 22, 2014, 2:07:28 PM12/22/14
to jav...@googlegroups.com
[OFF-TOPIC] essa consulta é para ver se o nome está sujo? pois paguei 30 dilmas pro uma consulta numa papelaria daki...


Em segunda-feira, 15 de dezembro de 2014 18h13min26s UTC-2, J04QU1M 50RR14 escreveu:

Vagner Araujo

unread,
Dec 22, 2014, 5:44:51 PM12/22/14
to jav...@googlegroups.com
Então,

não é para isso não, é para saber se o cpf informado existe e se o nome informado é o mesmo que o do CPF, tudo isso obtido da base da receita.

Vagner Araujo

unread,
Dec 23, 2014, 4:02:06 AM12/23/14
to jav...@googlegroups.com
Pessoal,

acabei de publicar a versão piloto que do webservice de consulta ao cpf via site da receita.... Esse pequeno piloto foi desenvolvido apenas para validar o webservice, portanto não fiz nenhuma validação nos campos, se for informado um cpf inválido ou um cpf válido que não existe na base da receita, será informando uma mensagem de cpf não encontrado, caso o cpf seja localizado, é informado o nome, o número e a situação do CPF, além também de ser informado o protocolo gerado pela receita.... Quem tiver interesse em usar o webservice pode entrar em contato comigo... estou terminando de lapidar a infra do webservice, mas acredito que a empresa libere o acesso de forma gratuita para fazer testes... pelo menos por enquanto... em seguida teremos outros webservices implementados... acredito que termino de implementar essas missões até antes do ano novo.... hhihihhihhihihihihhihihihihi..... ^_^

O link para acessar o pilot é http://ws.pilot.cpf.jdukes.com/

Douglas

unread,
Dec 25, 2014, 4:59:42 PM12/25/14
to jav...@googlegroups.com
Vagner...

Mesmo sem postar o projeto, pode dizer como fez? Quais os componentes usou para "manipular o site"?

Testei como o Rodolpho falou, mas não rola igual.. Se desabilita o javascript, não carrega o captcha, e se deixa ativo, dá o erro que postei antes...

Obrigado

Douglas


--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.

Vagner Araujo

unread,
Dec 25, 2014, 5:43:09 PM12/25/14
to jav...@googlegroups.com

Rodolpho Sbaraglini Couto

unread,
Dec 26, 2014, 5:31:53 AM12/26/14
to jav...@googlegroups.com

Maicon

unread,
Dec 26, 2014, 12:16:08 PM12/26/14
to jav...@googlegroups.com
Pessoal não querendo ser chato e nem me meter na conversa de vocês mas no site da receita tem um item muito importante que deve ser observado.

b) Código impresso ao lado - digite os 4 caracteres da imagem. Essa informação ajuda a Receita Federal do Brasil a evitar consultas por programas automáticos, que dificultam a utilização do aplicativo pelos demais contribuintes.

Ou seja, o uso de manipulação do site via aplicativos terceiros é proibido, mesmo que a imagem do captcha não seja respondida automaticamente. Isso foi só um alerta gurizada, sugiro que vocês pesquisem um pouco sobre as questões legais que a receita aplica ao seu site.

Valeu.

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.

Para mais opções, acesse https://groups.google.com/d/optout.


--
Att.
Maicon
Fone: 92690976
Skype: pnpinfo...@gmail.com

Vagner Araujo

unread,
Dec 26, 2014, 4:23:11 PM12/26/14
to jav...@googlegroups.com
Então,

não vamos entrar no mérito jurídico, até porque a receita é uma instituição pública que só pode fazer apenas o que a lei permite e, não existe ilegalidade se não existe uma lei que o defina... Essas orientações da Receita é apenas uma justificativa do porquê que o cidadão precisa entrar com os caracteres da imagem, apenas isso. E fica claro também nas orientações que é para tentar evitar o uso de consulta por programas automáticos e não proibir o mesmo, o que são duas coisas distintas. Outro ponto importante é que é evitar consultas por programas automáticos, e como ele não definiu o que seria isso, programas automáticos, fica subentendido que é/seria o uso de programas robôs que tentam quebrar o captcha e fazer uso de uma consulta sem uma intervenção/interação humana. Então eu não vejo ilegalidade e muito menos proibição nisso. Na nossa empresa, o contrato de uso de serviço é bem claro e específico sobre essas questões, inclusive na questão de que a consulta é pública e que pode ser realizada no próprio site da receita e, que você não paga pelos dados e sim para usar a nossa infra para consultar os dados... da mesma forma que se um cidadão for em uma lan house consultar o seu cpf, ele o fará no site da Receita e será cobrado por isso, e o ponto importante é que o mesmo não será cobrado pelos dados e sim para usar a infra da lan house para realizar a consulta e isso tem que estar bem claro para quem utiliza este serviço da lan, da mesma forma que ficará bem claro para quem utilizar nossos serviços.

O maior problema de entendimento das questões legais é sempre tentar achar pelo em ovo. Uma coisa aprendi, quando se trata de leis, é que a coisa precisa estar clara, seja como rol exemplificativo ou taxativo. Não existem entrelinhas, se fala automático é automático, se fala com intervenção é com intervenção, e qualquer proibição neste tocante mencionado precisaria estar especificado de maneira taxativa, nos termos de uso, que servem como contrato de utilização do serviço, em outras palavras, a lei particular que rege o serviço prestado.

--

J04QU1M 50RR14

unread,
Dec 29, 2014, 1:15:17 PM12/29/14
to jav...@googlegroups.com
Galera, realizar uma consulta assim na receita e merito para você e sua empresa porem eu ficarei muito grato se por contribuir com o meu projeto também se não poder  agradeço de coração vi sua aplicação ela é completa e tenho que ir atras de uma igual.  

Obrigado pela colaboração e quando se trata de direitos lembre-se estamos no brazil.



Em segunda-feira, 15 de dezembro de 2014 18h13min26s UTC-2, J04QU1M 50RR14 escreveu:

J04QU1M 50RR14

unread,
Jan 5, 2015, 11:48:20 AM1/5/15
to jav...@googlegroups.com
Olá Rodolpho,

Sera que você pode me dar mas detalhes de como desenvolver um robô para manipular o html para o meu desenvolvimento, e também como renderiza a imagem para o usuário e quando ele submeter o formulário e retorna a página redirecionada pelo submit?



Grato,


 Joaquim

Rodolpho Sbaraglini Couto

unread,
Jan 6, 2015, 6:03:08 AM1/6/15
to jav...@googlegroups.com
Joaquim,

Para desenvolver o robô, você precisará basicamente instanciar um WebClient com o browser de sua preferência, fazer a requisição da página desejada e manipular os elementos html com a API do HtmlUnit.
Segue abaixo um exemplo de configuração do WebClient:

WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);

Para efetuar a requisição em alguma página, basta utilizar o método getPage():

HtmlPage googlePage = webClient.getPage("https://www.google.com.br");

O objeto da classe HtmlPage representa o conteúdo HTML da respectiva página. A partir dele, é possível obter e setar valores nos atributos dos elementos, conforme mencionei no último e-mail.
Quanto a renderização da imagem para o usuário, poderá utilizar o componente graphicImage (se estiver utilizando o PrimeFaces). Você só precisará instanciar um objeto da classe org.primefaces.model.StreamedContent passando seu InputStream contendo a imagem do captcha:

StreamedContent imgCaptcha = new DefaultStreamedContent(captcha, "image/png");

Abraço.

J04QU1M 50RR14

unread,
Jan 8, 2015, 1:22:09 PM1/8/15
to jav...@googlegroups.com
Olá Rodolpho, Boa Tarde!!!


Estou acho que estou no caminho certo mas estou com duvida com relação a renderização da imagem.

Fiz um teste pegando os bytes da imagem base 64 e deu certo.

No meu caso, tenho uma imagem que está em uma página .asp e a cada atualização a imagem é alterada.
http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/captcha/gerarCaptcha.asp

como devo proceder neste caso que não tenho a base 64?

Veja o que fiz até agora!

public static void submittingForm() throws Exception {
       
          //  final WebClient webClient = new WebClient();
            final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);
            webClient.setJavaScriptEnabled(true);
            webClient.setRedirectEnabled(true);
            webClient.setThrowExceptionOnFailingStatusCode(false);
            webClient.setThrowExceptionOnScriptError(false);
            webClient.setCssEnabled(false);



            final HtmlPage rf = webClient.getPage("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublica.asp");

            final HtmlForm form = rf.getHtmlElementById("theForm");
            final HtmlTextInput textFieldCpf = form.getInputByName("txtCPF");
            final HtmlTextInput textFielCaptcha = form.getInputByName("txtTexto_captcha_serpro_gov_br");

           
            StreamedContent imgCaptcha = new DefaultStreamedContent(captcha, "image/png");
                       
          
            HtmlSubmitInput consultar = form.getInputByValue("id_submit");

            textFieldCpf.setValueAttribute("CPF: ");
            textFielCaptcha.setValueAttribute("Digite os caracteres acima: ");

            final HtmlPage page2= consultar.click();

            //Go to the bob marley fan page
            HtmlPage fanPage = webClient.getPage("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp");
            webClient.setJavaScriptEnabled(true);


Abraços


Joaquim

J04QU1M 50RR14

unread,
Jan 9, 2015, 8:08:36 AM1/9/15
to jav...@googlegroups.com
Bom dia, Rodolpho!

Estou seguindo suas instruções e acho que estou no caminho e quanto a renderização da imagem para o usuário eu não estou usanso o Prime Faces, você pode ajudar me auxiliar como obter e renderizar para o usuário segue o que tenho  até agora e que tenho.


public static void submittingForm() throws Exception {

        // final WebClient webClient = new WebClient();
        final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);
        webClient.setJavaScriptEnabled(false);
        webClient.setRedirectEnabled(false);

        webClient.setThrowExceptionOnFailingStatusCode(false);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setCssEnabled(false);

        final HtmlPage rf = webClient.getPage("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublica.asp");
       

        final HtmlForm form = (HtmlForm) rf.getHtmlElementById("theForm");
        final HtmlTextInput textFieldCpf = (HtmlTextInput)form.getInputByName("txtCPF");       
        final HtmlTextInput textFielCaptcha = (HtmlTextInput) form.getInputByName("txtTexto_captcha_serpro_gov_br"); 

      Aqui eu teria que obter a imagem

//        ImageIO.write(ImageIO.read(new URL("http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/captcha/gerarCaptcha.asp")), "jpg", new File("C:\\captcha.jpg"));


        HtmlSubmitInput consultar = (HtmlSubmitInput) form.getInputByValue("id_submit");


        textFieldCpf.setValueAttribute("CPF: ");
        textFielCaptcha.setValueAttribute("Digite os caracteres acima: ");

        final HtmlPage page2 = consultar.click();


        HtmlPage fanPage = webClient
                .getPage("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp");
        webClient.setJavaScriptEnabled(true);


Grato Joaquim!!!

Rodolpho Sbaraglini Couto

unread,
Jan 15, 2015, 7:44:15 PM1/15/15
to jav...@googlegroups.com
Joaquim, boa noite.

É isso mesmo, você está no caminho certo.
Tente assim:

InputStream captcha =  webClient.getPage(urlCaptcha).getWebResponse().getContentAsStream();
StreamedContent imgCaptcha = new DefaultStreamedContent(captcha, "image/png");
Reply all
Reply to author
Forward
Message has been deleted
0 new messages