node-correios
node-correios copied to clipboard
TIMEOUT constante
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?
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
}
Estou tendo o mesmo problema, porém adicionar o https não resolveu pra mim.
@OmarOmeiri de fato, solucionou temporariamente pra mim.. Ele ainda não está 100% não.
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.
@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.')
}
});
Obrigado! Para pegar PAC e SEDEX, são duas consultas? Ou essa faz as duas?
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
Estou tendo o mesmo problema, acho mais seguro abandonar e seguir sua sugestão @OmarOmeiri Obrigado
@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.