public dynamic ConsultarDadosCnpj(Newtonsoft.Json.Linq.JObject jsonData)
        {
            string          aCNPJ    = jsonData["cnpj"].ToString();
            CookieContainer _cookies = CacheHelper.Get <CookieContainer>("CookieReceitaFederal_" + aCNPJ);

            var oFormatarDados = new FormatarDados();
            var id             = oFormatarDados.ObterDados(_cookies, aCNPJ, jsonData["captcha"].ToString());

            // Testar
            ////now get cache instance
            //var cache = Configuration.CacheOutputConfiguration().GetCacheOutputProvider(Request);
            ////and invalidate cache for method "Get" of "FornecedorController"
            //cache.RemoveStartsWith(Configuration.CacheOutputConfiguration().MakeBaseCachekey("FornecedorController", "Get"));

            if (id > 0)             //encontrou?
            {
                var _fornecedor        = dao.Consulta(id);
                var _quadro_societario = dao.QuadroSocietario(id);

                return(new { fornecedor = _fornecedor, quadro_societario = _quadro_societario });
            }
            else
            {
                return(null);
            }
        }
Esempio n. 2
0
        private static Fornecedor ObterDados(string aCNPJ, string aCaptcha)
        {
            string          cnpj     = new Regex(@"[^\d]").Replace(aCNPJ, string.Empty);
            CookieContainer _cookies = (CookieContainer)HttpContext.Current.Session["cookies"];

            var request = (HttpWebRequest)WebRequest.Create(urlBaseReceitaFederal + paginaValidacao);

            request.ProtocolVersion = HttpVersion.Version10;
            request.CookieContainer = _cookies;
            request.Method          = "POST";

            var postData = string.Empty;

            postData += "origem=comprovante&";
            postData += "cnpj=" + cnpj + "&";
            postData += "txtTexto_captcha_serpro_gov_br=" + aCaptcha + "&";
            postData += "submit1=Consultar&";
            postData += "search_type=cnpj";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentType   = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;

            var dataStream = request.GetRequestStream();

            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            var response          = request.GetResponse();
            var stHtml            = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1"));
            var strHtmlFornecedor = stHtml.ReadToEnd();

            if (strHtmlFornecedor.Contains("Verifique se o mesmo foi digitado corretamente"))
            {
                throw new Exception("O número do CNPJ não foi localizado na Receita Federal");
            }

            if (strHtmlFornecedor.Contains("Erro na Consulta"))
            {
                throw new Exception("Os caracteres não conferem com a imagem");
            }

            if (strHtmlFornecedor.Length > 0)
            {
                var requestQAS = (HttpWebRequest)HttpWebRequest.Create(urlBaseReceitaFederal + paginaQuadroSocietario);
                requestQAS.CookieContainer = _cookies;
                requestQAS.Method          = "GET";
                var          res = (HttpWebResponse)requestQAS.GetResponse();
                StreamReader sr  = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1"));
                string       strHtmlQuadroSocietario = sr.ReadToEnd();

                var        formataDados = new FormatarDados();
                Fornecedor fornecedor   = formataDados.MontarObjFornecedor(cnpj, strHtmlFornecedor);
                if (fornecedor != null)
                {
                    formataDados.MontarObjFornecedorQuadroSocietario(fornecedor, strHtmlQuadroSocietario);

                    var UserName = HttpContext.Current.User.Identity.Name;

                    //fornecedor.IdAtualizacao = Comum.Encrypt(fornecedor.PreparaAtualizacao(UserName).ToString());
                    fornecedor.UsuarioInclusao = UserName;
                    fornecedor.DataInclusao    = DateTime.Now;

                    fornecedor.AtualizaDados();

                    fornecedor.MarcaVisitado(UserName);
                }

                return(fornecedor);
            }

            return(null);
        }
Esempio n. 3
0
    public static void ConsultarCNPJ(string CNPJ)
    {
        bool   bResolverCapchaAutomatico = false;
        Random aleatorio = new Random();

        mutex.WaitOne();
        try
        {
            string texto;
            Bitmap captcha, limpo;
            int    id = 0, i = 0;
            do
            {
                erros[linguagem]++;
                if (linguagem < linguagens.Length - 1)
                {
                    linguagem++;
                }
                else
                {
                    linguagem = 0;
                }

                if (bResolverCapchaAutomatico)
                {
                    sw.Stop();
                    if (sw.Elapsed.TotalSeconds < 4)
                    {
                        System.Threading.Thread.Sleep(aleatorio.Next(3000, 5000));
                    }
                }

                captcha = PegarCaptchaCNPJ();

                if (bResolverCapchaAutomatico)
                {
                    System.Threading.Thread.Sleep(aleatorio.Next(5000, 7000));
                    sw.Reset();
                    sw.Start();
                }

                limpo = Captcha.Limpar(captcha);
                texto = Captcha.OCR(limpo, linguagens[linguagem]);

                try
                {
                    Console.WriteLine("Captcha: {0}", texto);

                    if (!bResolverCapchaAutomatico)
                    {
                        Console.WriteLine("Digite o Captcha:");
                        string temp = Console.ReadLine();
                        if (!string.IsNullOrEmpty(temp))
                        {
                            texto = temp;
                        }
                    }

                    var oFormatarDados = new FormatarDados();
                    id = oFormatarDados.ObterDados(_cookies, CNPJ, texto, true);

                    Console.WriteLine("Fornecedor atualizado: {0}", id);
                    break;
                }
                catch (Exception ex)
                {
                    if (ex.Message == "O número do CNPJ não foi localizado na Receita Federal")
                    {
                        using (Banco banco = new Banco())
                        {
                            banco.AddParameter("@cnpj_cpf", CNPJ);
                            banco.AddParameter("@controle", 5);
                            banco.AddParameter("@mensagem", ex.Message);

                            banco.ExecuteNonQuery(@"update fornecedor set controle=@controle, mensagem=@mensagem where cnpj_cpf=@cnpj_cpf;");
                        }

                        break;
                    }
                    else
                    {
                        if (i++ == 5)
                        {
                            break;
                        }
                    }

                    Console.WriteLine(ex.Message);

                    tentativas[linguagem] = (contagem[linguagem] * tentativas[linguagem] + erros[linguagem] + 1) / (contagem[linguagem] + 1);
                    contagem[linguagem]++;
                    erros[linguagem] = -1;

                    //limpo.Save(tempPath + "c.limpo.png");
                    //limpo.Dispose();

                    if (ex.Message.Contains("tempo limite"))
                    {
                        System.Threading.Thread.Sleep(3600000);
                    }
                }
            } while (id == 0);

            /*for (int l = 0; l < Receita.linguagens.Length; l++) {
             * System.Web.HttpContext.Current.Response.Write(linguagens[l] + ": " + (tentativas[l] < erros[l] ? (contagem[l] * tentativas[l] + erros[l] + 1) / (contagem[l] + 1) : tentativas[l]) + "<br />");
             * }*/
            mutex.ReleaseMutex();

            /*using (StreamWriter sw = File.AppendText(System.Web.HttpContext.Current.Server.MapPath("/log.txt"))) {
             * sw.WriteLine(DateTime.Now + ": " + retorno);
             * }*/
        }
        catch (Exception e)
        {
            erros[linguagem]--;
            mutex.ReleaseMutex();
            if (e is System.NullReferenceException)
            {
                /*using (StreamWriter sw = File.AppendText(System.Web.HttpContext.Current.Server.MapPath("/log.txt"))) {
                 * sw.WriteLine(DateTime.Now + ": Imagem invalida");
                 * }*/
                throw new BusinessException("Imagem invalida");
            }
            else
            {
                if ((e.GetBaseException() is System.IO.IOException) || (e.GetBaseException() is System.Net.Sockets.SocketException))
                {
                    //System.Threading.Thread.Sleep(aleatorio.Next(50000, 500000));

                    /*using (StreamWriter sw = File.AppendText(System.Web.HttpContext.Current.Server.MapPath("/log.txt"))) {
                     * sw.WriteLine(DateTime.Now + ": IP bloqueado");
                     * }*/
                    throw new BusinessException("IP bloqueado");
                }
                else
                {
                    /*using (StreamWriter sw = File.AppendText(System.Web.HttpContext.Current.Server.MapPath("/log.txt"))) {
                     * sw.WriteLine(DateTime.Now + ": " + e.ToString());
                     * }*/
                    throw;
                }
            }
        }
    }