Closed clbonatto closed 8 years ago
Olá clbonatto, e onde colocaria isso?
Olá JRAVILES.
Coloquei antes das chamadas de curl_exec.
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}}
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
no servidor de pesquisa tem de ter SSL?
Não, o SSL é do site da receita.
Consulto via localhost e funciona.
fiz as alteracoes mais continua com o problema :( tem como me enviar seu arquivo php pra eu comparar?
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);
não esta do mesmo jeito :(
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.
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?
Deixa eu baixar esse Guzzler para ver.
Segura aí.
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)
);
}
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í.
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
Se funcionar nesse código, posta o resultado.
Valeu.
pode deixar mais uma vez obrigado pelo seu tempo
Acho que foram adicionados outros cookies que não consigo capturar. nova_visita_ano, nova_visita_mes procede?
Continua funcionando normalmente aqui.
Criei um script simples para quem precisar testar.
@clbonatto @JRAVILES @gustavomac89 Corrigi na v2.0.6
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);