Fazendo consulta do cpf usando o HttpURLConnection pelo site da Receita Federal

5 respostas
1

Ola pessoal estou com problemas para enviar uma requisicao(consulta de Cpf) para o site da receita, estou enviando as informações corretas(Cookie, captcha, viewstate e cpf) mas a requisicao esta me retornando sempre um erro dizendo que o catpcha foi digitado errado.Alguem sabe o que pode esta acontecendo.
Obsv: se alquem se interessar posso pastar as classes que fazem parte dessa aplicação…
Obrigado !
!

public class Response {

    private final String stringUrl = "http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp ";
    private final URL url;
    private final HttpURLConnection conn;
    private final StringBuilder strRequisicao;
    private  String parametros;

    public Response() throws MalformedURLException, IOException {
        url = new URL(stringUrl);
        conn = (HttpURLConnection) url.openConnection();
        strRequisicao = new StringBuilder();
    }
    
    public void reciverObjRequest(ObjRequest objRequest) throws IOException {
        buildRequest(objRequest);
        setPropriedades(objRequest);
    }
    
    private void buildRequest_(ObjRequest objRequest) {
//        String viewstate = objRequest.getViewState();
//        strRequisicao.append(" txtCPF=").append("[telefone removido]")
//                .append("&catpcha=").append(JOptionPane.showInputDialog("Entre com o catpcha"))
//                .append("&captchaAudio=")
//                .append("&viewstate=").append(viewstate)
//                .append("&Enviar=").append("Consultar");
    }

    public void buildRequest(ObjRequest objRequest) throws UnsupportedEncodingException {
        String viewstate = objRequest.getViewState();
        String numeroCpf = objRequest.getNumeroCpf();
        parametros = URLEncoder.encode("txtCPF", "ISO-8859-1") + "=" + URLEncoder.encode(numeroCpf, "ISO-8859-1");
        parametros += "&" + URLEncoder.encode("catpcha", "ISO-8859-1") + "=" + URLEncoder.encode(JOptionPane.showInputDialog("Entre com o catpcha"), "ISO-8859-1");
        parametros += "&" + URLEncoder.encode("captchaAudio", "ISO-8859-1") + "=" + URLEncoder.encode("", "ISO-8859-1");
        parametros += "&" + URLEncoder.encode("viewstate", "ISO-8859-1") + "=" + URLEncoder.encode(viewstate, "ISO-8859-1");
        parametros += "&" + URLEncoder.encode("Enviar", "ISO-8859-1") + "=" + URLEncoder.encode("Consultar", "ISO-8859-1");
        
        System.out.println(stringUrl + parametros);
    }

    private void setPropriedades(ObjRequest objRequest) throws ProtocolException, IOException {
        PropertiesConnect propertiesConnect = new PropertiesConnect(conn);
        propertiesConnect.setPropertiesOutptInput(PropertiesConnect.ACTION_IN);
        propertiesConnect.enablePropertiesCookie(objRequest);
        propertiesConnect.enableMetodoProperties(1);

        conn.setRequestProperty("Content-Length", String.valueOf(parametros.length()));
    }

    public void sendRequestHttp() throws IOException {
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(parametros);
        wr.flush();
    }

    public void printResultHtml() throws IOException {
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"ISO-8859-1"));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line).append('\n');
        }
        System.out.println(sb.toString());
    }
    

}

5 Respostas

A

Creio que você não vai conseguir fazer desta maneira.
Como tem um captcha envolvido, ele fica dependendo da sessão do usuário.
Por exemplo, ao abrir seu browser com a url, o servidor gera um imagem. Isso fica guardado lá mais ou menos assim: esta imagem tem este valor para este usuário/browser.
Se o usuário/browser escrever exatamente o valor que ele tem guardado está ok!

Agora, a imagem que vc provavelmente está vendo não é a mesma da que seria gerada para sua aplicação.

Deu pra entender? Faltou compreender um pouco como funciona o captcha.

1

Bom dia aluisiodsv

A aminha aplicação completa funciona da seguinte maneira: primeiro é feito uma requisição onde eu pego o cookie, e o html da pagina, no html vem o endereco onde é gerado o captcha juntamente com o codigo do captcha para aquela sessão, e tambem o viewtstate. Faço então uma outra requsicao GET, enviando cookie e o codigo da catpcha para o endereco onde ele é gerado. então é gerado uma imagen do captcha relacionado com o cookie da aplicação. Por ultimo eu faço uma requisicao POST enviando os campo do cpf, captcha e viewstate etc…
Se voce quiser posso postar minha classes…

A

Mas como vc descobre o que está escrito no captcha?

1

Bom dia aluisiodsv
Sim eu consigo ver a imagem do captcha, tenho um metodo que mostra o catpcha em uma tela jFrame para o usuario digitar.

A

Ola voce poderia passar essa classe?

Criado 2 de agosto de 2013
Ultima resposta 3 de abr. de 2014
Respostas 5
Participantes 3