#include "hwgui.ch" #include "directry.ch" #include "Fileio.ch" #include "tip.ch" ******************************************************************************** FUNCTION Consulta_CPF_Site() ******************************************************************************** LOCAL oDlg, oEdit[3], oLabel[3], oBitmap, oButtonex[2], vEdit[3], aRetorno:={} Public cUrl := "http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/ConsultaPublica.asp" Public cUrlC:= "http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/captcha/gerarCaptcha.asp" Public cUrl1:= "http://www.receita.fazenda.gov.br/Aplicacoes/ATCTA/cpf/ConsultaPublicaExibir.asp" Public cCaptcha, cCnpj, cStringCookie, cDataN vEdit[1] := '' vEdit[2] := Date() vEdit[3] := '' INIT DIALOG oDlg TITLE "Consulta CPF" AT 0, 0 SIZE 318,216 ; STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER ; ON INIT {|| Consulta(oBitmap) } @ 54,10 IMAGE oBitmap SHOW '' SIZE 208,58 @ 50,85 SAY oLabel[1] CAPTION "CPF" SIZE 52,21 STYLE SS_RIGHT @ 108,85 GET oEdit[1] VAR vEdit[1] SIZE 153,24 PICTURE '@R 999.999.999-99' MAXLENGTH 14 ; TOOLTIP 'Digite o CPF para pesquisar' @ 24,115 SAY oLabel[2] CAPTION "Nascimento" SIZE 80,21 STYLE SS_RIGHT @ 108,115 GET oEdit[2] VAR vEdit[2] SIZE 84,24 PICTURE '@D' ; TOOLTIP 'Digite a data de nascimento' @ 50,145 SAY oLabel[3] CAPTION "Captcha" SIZE 52,21 @ 108,145 GET oEdit[3] VAR vEdit[3] SIZE 74,24 MAXLENGTH 6 ; TOOLTIP 'Digite o texto da imagem' @ 120,179 BUTTONEX oButtonex[1] CAPTION "&Pesquisar" SIZE 90,25 ; STYLE BS_CENTER +WS_TABSTOP ; TOOLTIP 'Consulta o CPF no site da Receita Federal' ; ICON HIcon():AddResource(608):handle ; ON CLICK {|| aRetorno := Consulta_Cpf_Site_Processa(Tira_Mascara(vEdit[1]), vEdit[3], vEdit[2]), EndDialog() } ACTIVATE DIALOG oDlg Return aRetorno ******************************************************************************** STATIC Function Consulta(oBitmap) ******************************************************************************** Try oHttp:=TipClientHttp():new( cUrl, .f. ) Catch MsgStop('Erro na Conexão','Consulta CPF') End Try oHttp:Open() Catch MsgStop('Erro','Consulta CPF') End If Empty(cHtml:= oHttp:readAll()) MsgExclamation('Erro na resposta do site','Consulta CPF') Return .f. EndIf oHttp:close() If ! Captcha(oBitmap) Return .F. EndIf Return .t. ******************************************************************************** STATIC Function Captcha(oBitmap) ******************************************************************************** Try oServer:= CreateObject( "MSXML2.ServerXMLHTTP.5.0") Catch MsgStop("Serviço não mapeado",'Captcha') Return .f. End try oServer:Open( "GET", cUrlc, .f. ) Catch MsgStop('Erro na Conexão','Captcha') End oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" ) oServer:SetRequestHeader("Connection", "keep-alive" ) oServer:Send() oServer:WaitForResponse( 500 ) c:=oServer:getResponseHeader("Set-Cookie") cStringCookie:= Substr(c, 1, At(';', c) -1) cHtml:= oServer:ResponseBody cImagemPNG := alltrim(strtran(time(),':'))+'.png' txt_file:=fcreate(cImagemPNG, 0) if (!(ferror() = 0)) MsgStop("Erro de criação do arquivo imagem " + Str(ferror(), 3, 0),'Captcha') Return .f. endif fwrite(txt_file, cHtml) fclose(txt_file) oBitmap:ReplaceImage( cImagemPNG ) oBitmap:Refresh() ferase(cImagemPNG) Return .T. ******************************************************************************** STATIC Function Consulta_Cpf_Site_Processa(cCpf, cCaptcha, cDataN) ******************************************************************************** Local oUrl, oInternet, cData, cRet:= '' cParm:= { { "txtTexto_captcha_serpro_gov_br", cCaptcha },; { "tempTxtCPF", cCPf },; { "tempTxtNascimento", DToC(cDataN) },; { "temptxtToken_captcha_serpro_gov_br", '' },; { "temptxtTexto_captcha_serpro_gov_br", cCaptcha }} hHeaders1:= Hash() hHeaders1["Content-Type"]:= "application/x-www-form-urlencoded" hHeaders1["Accept"]:= "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" hHeaders1["Accept-Encoding"]:= "gzip, deflate" hHeaders1["Accept-Language"]:= "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3" hHeaders1["Connection"]:= "keep-alive" Try oInternet:= TIPClientHTTP():New(cUrl1, .f.) Catch MsgStop('Erro na Conexão','Consulta CPF') Return .f. End oInternet:SetCookie(cStringCookie) oInternet:hHeaders:= hHeaders1 If oInternet:Open() If oInternet:Post(cParm) cRet:=oInternet:ReadAll() Else MsgStop('Erro no Post','Consulta CPF') Return .F. EndIf Else MsgStop('Erro na Conexão','Consulta CPF') Return .f. EndIf oInternet:Close() nIni := At('