node-correios icon indicating copy to clipboard operation
node-correios copied to clipboard

TIMEOUT constante

Open educkf opened this issue 4 years ago • 9 comments

Olá! Passei a receber vários retornos de TIMEOUT constantemente das requests que fazia utilizando a package. Fiz alguns testes, e vi que se resolviam quando eu adicionei https em ambos endereços de consulta, ficando assim:

this.calcPrecoUrl = 'https://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?wsdl';
this.cepUrl       = 'https://viacep.com.br/ws/{CEP}/json';

Daí pararam todos TIMEOUT que recebia. Há algum impedimento para essa alteração? Digo, algum motivo pra usar http ao invés de https?

educkf avatar Apr 05 '20 19:04 educkf

A propósito, de repente tem outra solução, o erro que acontece é no calcPrecoPrazo() e é o seguinte:

Error: connect ETIMEDOUT 201.48.198.97:8083
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14) {
  errno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: '201.48.198.97',
  port: 8083
}

educkf avatar Apr 05 '20 19:04 educkf

Estou tendo o mesmo problema, porém adicionar o https não resolveu pra mim.

OmarOmeiri avatar Apr 13 '20 13:04 OmarOmeiri

@OmarOmeiri de fato, solucionou temporariamente pra mim.. Ele ainda não está 100% não.

educkf avatar Apr 13 '20 13:04 educkf

engraçado, pois eu fiz uma condição para que se este erro ocorresse, o servidor deve mandar um novo request. Mas mesmo assim, recebo esse mesmo erro infinitamente. Só resolve por um tempo se eu reiniciar o servidor.

OmarOmeiri avatar Apr 13 '20 13:04 OmarOmeiri

@educkf , então tive que abandonar o uso deste módulo. Porém descobri que não é muito dificil fazer esse request independentemente. Segue minha solução, se for te ajudar. Obs: Eu estou usando Node.js com express e faço essa operação dentro de uma função da API.

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var parseString = require('xml2js').parseString;

router.post('/frete-sedex', [
        check('cep', 'Informe o CEP.').not().isEmpty()
    ], async(req,res) =>{
    
        const errors = validationResult(req);
        if (!errors.isEmpty()){
            return res.status(400).json({errors:errors.array()});
        };
    
            const {cep} = req.body;
    
        try{
    
    
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function() {
                
                if (this.readyState === 4) {
                    res.type('application/xml');
                    parseString(this.responseText, function (err, result) {
                        const response = result.Servicos.cServico[0];
                        
                        return res.send(response);
                    });
                    
                };
            };
    
            xhr.open("GET", `http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?sCepOrigem=81200100&sCepDestino=${cep}&nVlPeso=1&nCdFormato=1&nVlComprimento=20&nVlAltura=20&nVlLargura=20&sCdMaoPropria=n&nVlValorDeclarado=0&sCdAvisoRecebimento=n&nCdServico=04014&nVlDiametro=0&StrRetorno=xml&nIndicaCalculo=3`);
            xhr.send();
            
    
         
    
    
        }catch(err){
            console.error(err);
            return res.status(500).send('Server error.')
        }
    });

OmarOmeiri avatar Apr 13 '20 17:04 OmarOmeiri

Obrigado! Para pegar PAC e SEDEX, são duas consultas? Ou essa faz as duas?

educkf avatar Apr 13 '20 17:04 educkf

O resultado vem assim:

{
    Codigo: [ '04014' ],
    Valor: [ '22,50' ],
    PrazoEntrega: [ '4' ],
    ValorSemAdicionais: [ '22,50' ],
    ValorMaoPropria: [ '0,00' ],
    ValorAvisoRecebimento: [ '0,00' ],
    ValorValorDeclarado: [ '0,00' ],
    EntregaDomiciliar: [ 'S' ],
    EntregaSabado: [ 'S' ],
    obsFim: [ '' ],
    Erro: [ '0' ],
    MsgErro: [ '' ]
}

eu tentei fazer as duas consultas em uma só, mas vem uma mensagem de erro dizendo que no máximo 1 código por consulta.

tive que fazer duas calls na API cada uma com uma URL diferente.

nCdServico=04014 ---> PARA SEDEX nCdServico=04510 ---> PARA PAC

OmarOmeiri avatar Apr 13 '20 17:04 OmarOmeiri

Estou tendo o mesmo problema, acho mais seguro abandonar e seguir sua sugestão @OmarOmeiri Obrigado

Huakson avatar Aug 27 '20 06:08 Huakson

@OmarOmeiri esse erro de apenas um serviço por consulta é porque você tem que adicionar o código administrativo e a senha do contrato, geralmente só empresas tem.

pierrefrota avatar Nov 06 '20 03:11 pierrefrota