|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
jjmalka Aprendiz
Registrado: Domingo, 16 de Julho de 2006 Mensagens: 157
|
Enviada: Sex Jan 09, 2015 12:23 pm Assunto: Ajuda com com consulta site da Receita |
|
|
Boa tarde Galera.
Estou tendo dificuldades de fazer uma pesquisa do cpf do usuario no site da receita.
Eu consigo acessar o site via componente delphi7, preencher o campo do CPF e ate exibir a imagem do captcha, mas me deparei com as imagens.
A imagem que é exibida no site da receita é diferente da imagem exibida no outro webbrowser. Acho que terei que capturar a imagem da pagina aberta e em determinado tempo pois existe tempo de sessão.
A dificuldade é como posso capturar a imagem e como faço isto e como posso capturar a segunda pagina para exibir no programa delphi.
necessito disto apenas para exibir ao usuario que faz um cadastro se o cpf da pessoa é realmente dela e se esta regular.
link do site:
http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/ConsultaPublica.asp
http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/ConsultaPublica.asp
link da imagem do captcha:
http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/captcha/gerarCaptcha.asp?opt=image
http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/captcha/gerarCaptcha.asp?opt=image
Grato.
JJMalka.[/b] |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
Enviada: Sex Jan 09, 2015 12:56 pm Assunto: |
|
|
o acbr ja faz isso. da uma olhada no codigo dele _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
Voltar ao Topo |
|
|
jjmalka Aprendiz
Registrado: Domingo, 16 de Julho de 2006 Mensagens: 157
|
Enviada: Dom Jan 11, 2015 10:34 pm Assunto: |
|
|
joemil escreveu: | o acbr ja faz isso. da uma olhada no codigo dele |
Pelo que entendi o projeto esta apresentando problemas.
O componente esta dando erro no delphi7. |
|
Voltar ao Topo |
|
|
jjmalka Aprendiz
Registrado: Domingo, 16 de Julho de 2006 Mensagens: 157
|
Enviada: Sex Jan 16, 2015 11:24 pm Assunto: achei um codigo que resolve, alguem sabe migrar pra delphi? |
|
|
Consultar nome de uma pessoa física usando CPF na Receita Federal com PHP
Publicado em 4 de dezembro de 2014
1
Recentemente me deparei com a seguinte situação. Precisava buscar o nome correto de uma pessoa, e a única maneira confiável de se fazer isso seria através da receita federal. Como a receita não disponibiliza uma maneira pública de realizar esse tipo de consulta através de um web service o que se pode fazer é através de uma página disponibilizada no próprio site da receita
(http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPf/ConsultaPublica.asp).
Analisando o funcionamento desta página, percebi uma maneira de fazer uma consulta a receita passando alguns parâmetros a este formulário que é usado nessa página. O grande problema da automatização completa desta consulta é que o formulário tem um captcha (aquelas imagens que são geradas aleatoriamente para evitar justamente esse uso automatizado por outros sites).
Uma das maneiras possíveis de se resolver esse problema seria capturar a imagem gerada pelo site da receita federal e exibi-la dentro do meu site e fazer com que o usuário digitasse o texto contido nessa imagem. Até ai nenhuma novidade, mas como efetivamente fazer isso?
Vou descrever uma solução que encontrei:
Primeiramente faz-se uma requisição para a URL que se gera a imagem do captcha, obtendo a imagem propriamente dita e ID de sessão gerado pelo site da receita. Esse ID de sessão é a chave para conseguir validar o captcha, caso contrário, o mesmo não será validadado. Segue o código para obtenção da imagem.
function getCaptcha()
{
try {
$httpRequest = new \HttpRequest("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/captcha/gerarCaptcha.asp");
$httpRequest->setHeaders(array(
"Accept" => "image/png,image/*;q=0.8,*/*;q=0.5",
"Host" => "www.receita.fazenda.gov.br"
));
$resp = $httpRequest->send();
$body = $resp->getBody();
$cookie = explode(";", $resp->getHeader("Set-Cookie"));
$resposta = [
'img' => base64_encode($body),
'id' => $cookie[0]
];
} catch (\Exception $e) {
}
return $resposta;
}
Para exibir a imagem do captcha no site basta pegar a imagem codificada em base64 e adiciona-la a uma tag <img> com o resultado da chamada da função anterior:
$res = getCaptcha();
$img_captcha = $res['img'];
$img = '<img>';
O ID de sessão retornado será usado na requisição seguinte para efetivamente ter acesso aos dados da pessoa no site da receita. A seguir o código que faz a requisição a URL da receita e obtém os dados.
function getInformacoesPessoaRF($id_sessao, $texto_do_captcha) {
try {
$httpRequest = new \HttpRequest("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp", HTTP_METH_POST);
$httpRequest->setHeaders(array(
"Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Host" => "www.receita.fazenda.gov.br"
));
list($sessionName, $sessionId) = explode("=", $id_sessao);
$httpRequest->setCookies([
$sessionName => $sessionId
]);
$httpRequest->setPostFields([
"Enviar" => "Consultar",
"txtCPF" => $_POST['cpf'],
"txtTexto_captcha_serpro_gov_br" => $texto_do_captcha
]);
$resp = $httpRequest->send();
$body = $resp->getBody();
$dom = new \DOMDocument();
@$dom->loadHTML($body);
$xpath = new \DOMXPath($dom);
$q = $xpath->query('//span[@class="clConteudoDados"]');
$cpf = explode(":", $q->item(0)->nodeValue);
$nome = explode(":", $q->item(1)->nodeValue);
$status = explode(":", $q->item(2)->nodeValue);
return [
$cpf, $nome, $status
];
} catch (\Exception $e) {
}
return $resposta;
}
De posse do ID de sessão, basta passa-lo a função getInformacoesPessoaRF, juntamente com o texto digitado do captcha, como segue:
$id_sessao = $res['id'];
$informacoes = getInformacoesPessoaRF($id_sessao, $_POST['texto_captcha']);
E ai está, as informações que tanto queríamos. Vale ressaltar que as requisições HTTP realizadas são feitas usando a biblioteca HttpRequest, que não vem instalada por padrão no PHP. Com pouca adaptação é possível fazer o mesmo procedimento usando cURL que é padrão na grande maioria das instalações do PHP. Espero ajudar e qualquer observação é só comentar.
site de Leonardo Sales;
www.leonardosales.com.br |
|
Voltar ao Topo |
|
|
Massa191 Novato
Registrado: Sábado, 7 de Fevereiro de 2015 Mensagens: 1
|
Enviada: Sáb Fev 07, 2015 6:54 pm Assunto: Re: achei um codigo que resolve, alguem sabe migrar pra delphi? |
|
|
jjmalka escreveu: | Consultar nome de uma pessoa física usando CPF na Receita Federal com PHP
Publicado em 4 de dezembro de 2014
1
Recentemente me deparei com a seguinte situação. Precisava buscar o nome correto de uma pessoa, e a única maneira confiável de se fazer isso seria através da receita federal. Como a receita não disponibiliza uma maneira pública de realizar esse tipo de consulta através de um web service o que se pode fazer é através de uma página disponibilizada no próprio site da receita
(http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPf/ConsultaPublica.asp).
Analisando o funcionamento desta página, percebi uma maneira de fazer uma consulta a receita passando alguns parâmetros a este formulário que é usado nessa página. O grande problema da automatização completa desta consulta é que o formulário tem um captcha (aquelas imagens que são geradas aleatoriamente para evitar justamente esse uso automatizado por outros sites).
Uma das maneiras possíveis de se resolver esse problema seria capturar a imagem gerada pelo site da receita federal e exibi-la dentro do meu site e fazer com que o usuário digitasse o texto contido nessa imagem. Até ai nenhuma novidade, mas como efetivamente fazer isso?
Vou descrever uma solução que encontrei:
Primeiramente faz-se uma requisição para a URL que se gera a imagem do captcha, obtendo a imagem propriamente dita e ID de sessão gerado pelo site da receita. Esse ID de sessão é a chave para conseguir validar o captcha, caso contrário, o mesmo não será validadado. Segue o código para obtenção da imagem.
function getCaptcha()
{
try {
$httpRequest = new \HttpRequest("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/captcha/gerarCaptcha.asp");
$httpRequest->setHeaders(array(
"Accept" => "image/png,image/*;q=0.8,*/*;q=0.5",
"Host" => "www.receita.fazenda.gov.br"
));
$resp = $httpRequest->send();
$body = $resp->getBody();
$cookie = explode(";", $resp->getHeader("Set-Cookie"));
$resposta = [
'img' => base64_encode($body),
'id' => $cookie[0]
];
} catch (\Exception $e) {
}
return $resposta;
}
Para exibir a imagem do captcha no site basta pegar a imagem codificada em base64 e adiciona-la a uma tag <img> com o resultado da chamada da função anterior:
$res = getCaptcha();
$img_captcha = $res['img'];
$img = '<img>';
O ID de sessão retornado será usado na requisição seguinte para efetivamente ter acesso aos dados da pessoa no site da receita. A seguir o código que faz a requisição a URL da receita e obtém os dados.
function getInformacoesPessoaRF($id_sessao, $texto_do_captcha) {
try {
$httpRequest = new \HttpRequest("http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/CPF/ConsultaPublicaExibir.asp", HTTP_METH_POST);
$httpRequest->setHeaders(array(
"Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Host" => "www.receita.fazenda.gov.br"
));
list($sessionName, $sessionId) = explode("=", $id_sessao);
$httpRequest->setCookies([
$sessionName => $sessionId
]);
$httpRequest->setPostFields([
"Enviar" => "Consultar",
"txtCPF" => $_POST['cpf'],
"txtTexto_captcha_serpro_gov_br" => $texto_do_captcha
]);
$resp = $httpRequest->send();
$body = $resp->getBody();
$dom = new \DOMDocument();
@$dom->loadHTML($body);
$xpath = new \DOMXPath($dom);
$q = $xpath->query('//span[@class="clConteudoDados"]');
$cpf = explode(":", $q->item(0)->nodeValue);
$nome = explode(":", $q->item(1)->nodeValue);
$status = explode(":", $q->item(2)->nodeValue);
return [
$cpf, $nome, $status
];
} catch (\Exception $e) {
}
return $resposta;
}
De posse do ID de sessão, basta passa-lo a função getInformacoesPessoaRF, juntamente com o texto digitado do captcha, como segue:
$id_sessao = $res['id'];
$informacoes = getInformacoesPessoaRF($id_sessao, $_POST['texto_captcha']);
E ai está, as informações que tanto queríamos. Vale ressaltar que as requisições HTTP realizadas são feitas usando a biblioteca HttpRequest, que não vem instalada por padrão no PHP. Com pouca adaptação é possível fazer o mesmo procedimento usando cURL que é padrão na grande maioria das instalações do PHP. Espero ajudar e qualquer observação é só comentar.
site de Leonardo Sales;
www.leonardosales.com.br |
Obrigado Jjmalka (Leandro Soares) por compartilhar sua solução
Adaptei sua solução a Um script que utiliza a Bibl. Curl , com a diferença que leio os dados gravados no cookie gerado na primeira chamada , ao invéz de pegalos no cabeçario headers.
Funciona muito bem.
Abraços.
Marcos Peli |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|