jansenfelipe / cpf-gratis

Com esse pacote você poderá realizar consultas de CPF no site da Receita Federal do Brasil gratuitamente.
https://jansenfelipe.github.io/phpgratis/
179 stars 74 forks source link

Consulta com https - fix #8

Closed clbonatto closed 8 years ago

clbonatto commented 8 years ago

Com esta mudança para https, só consegui fazer funcionar o código inserindo o seguinte comando nas chamadas curl: curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);

REDIDSOFT commented 8 years ago

Olá clbonatto, e onde colocaria isso?

clbonatto commented 8 years ago

Olá JRAVILES.

Coloquei antes das chamadas de curl_exec.

REDIDSOFT commented 8 years ago

Eu coloquei la tbem mais o problema persiste: {"error":{"type":"GuzzleHttp\Exception\ConnectException","message":"cURL error 35: Unknown SSL protocol error in connection to www.receita.fazenda.gov.br:443 ","file":"C:\xampp\htdocs\integramais\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php","line":49}}

clbonatto commented 8 years ago

Experimenta colocar esse comando também:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

E confere os endereços: https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/captcha/gerarCaptcha.asp https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/ConsultaPublicaExibir.asp

REDIDSOFT commented 8 years ago

no servidor de pesquisa tem de ter SSL?

clbonatto commented 8 years ago

Não, o SSL é do site da receita.

Consulto via localhost e funciona.

REDIDSOFT commented 8 years ago

fiz as alteracoes mais continua com o problema :( tem como me enviar seu arquivo php pra eu comparar?

clbonatto commented 8 years ago

Na real eu não uso totalmente esse código. Usei como base.

Não utilizo o composer, nem o Guzzle. Tive que adaptar.

Mas vi aqui que tem mais coisas que coloco na requisição.

Veja se ajuda.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);

REDIDSOFT commented 8 years ago

não esta do mesmo jeito :(

clbonatto commented 8 years ago

Tenta esse aqui. É pra capturar o captcha.

$ch = curl_init('https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/captcha/gerarCaptcha.asp'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);

$response = curl_exec($ch); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); curl_close($ch);

Experimenta colocar um var_dump( $response );

Veja o que retorna.

REDIDSOFT commented 8 years ago

eu verifiquei aq o erro esta dando na linha 22 do cpfgratis, no getParams $crawler = $client->request('GET', 'https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/ConsultaPublicaExibir.asp');

tem de colocar esses curl_setopt antes do requiest tbem?

clbonatto commented 8 years ago

Deixa eu baixar esse Guzzler para ver.

Segura aí.

REDIDSOFT commented 8 years ago
public static function getParams() {
    $client = new Client();

    $crawler = $client->request('GET', 'https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/ConsultaPublicaExibir.asp');

    $response = $client->getResponse();

    $headers = $response->getHeaders();
    $cookie = $headers['Set-Cookie'][0];

    $ch = curl_init("https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/captcha/gerarCaptcha.asp");
    $options = array(
        CURLOPT_COOKIEJAR => 'cookiejar',
        CURLOPT_HTTPHEADER => array(
            "Pragma: no-cache",
            "Origin: https://www.receita.fazenda.gov.br",
            "Host: www.receita.fazenda.gov.br",
            "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0",
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3",
            "Accept-Encoding: gzip, deflate",
            "Referer: https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/ConsultaPublicaExibir.asp",
            "Cookie: $cookie",
            "Connection: keep-alive"
        ),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_BINARYTRANSFER => TRUE
    );

    curl_setopt_array($ch, $options);
    curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);
    $img = curl_exec($ch);
    curl_close($ch);

    $resource = curl_init('http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/captcha/gerarSom.asp');
    curl_setopt_array($resource, $options);
    $file = curl_exec($resource);
    curl_close($resource);

    return array(
        'cookie' => $cookie,
        'audio' => $file,
        'captchaBase64' => 'data:image/png;base64,' . base64_encode($img)
    );
}
clbonatto commented 8 years ago

Pelo o que eu li no manual, é mais ou menos isso aqui.

Não testei. Pode ser que esteja faltando/sobrando algum . ou [].

Precisa substituir nas funções.

        //função getParams
        $crawler = $client->request('GET', 'http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/ConsultaPublica.asp', [
                                    'curl' => [
                                        CURLOPT_SSL_VERIFYPEER => false,
                                        CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_0,
                                    ] ] );

        //função consulta
        $param = array(
            'curl' => [
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_0,
            ],
            'tempTxtCPF' => Utils::unmask($cpf),
            'tempTxtNascimento' => $nascimento,
            'temptxtTexto_captcha_serpro_gov_br' => $captcha,
            'txtTexto_captcha_serpro_gov_br' => $captcha,
            'Enviar' => 'Consultar'
        );

Veja aí.

REDIDSOFT commented 8 years ago

eu vou fazer um teste aq mais obrigado pela atenção, se precisar de alguma coisa é só chamar skype stiware, se eu puder ajudar com laravel / postgresql /modelagem de dados / tributação fiscal

clbonatto commented 8 years ago

Se funcionar nesse código, posta o resultado.

Valeu.

REDIDSOFT commented 8 years ago

pode deixar mais uma vez obrigado pelo seu tempo

gustavomac89 commented 8 years ago

Acho que foram adicionados outros cookies que não consigo capturar. nova_visita_ano, nova_visita_mes procede?

clbonatto commented 8 years ago

Continua funcionando normalmente aqui.

clbonatto commented 8 years ago

Criei um script simples para quem precisar testar.

https://github.com/clbonatto/ConsultaCPF

jansenfelipe commented 8 years ago

@clbonatto @JRAVILES @gustavomac89 Corrigi na v2.0.6