Request: Erro: soquete desligou

Criado em 31 jan. 2016  ·  77Comentários  ·  Fonte: request/request

Oi, eu sei que esses problemas foram criados antes, mas havia uma descrição um pouco diferente.

Tentei realizar uma requisição simples: enviar dados do formulário. Mas quando eu uso o módulo de solicitação, ele sempre lança "socket hang up".

Abaixo caso de teste simples e resultados

'use strict';

const request = require('request');
const http = require('http');
const querystring = require('querystring');

const data = {
    xstext: 'I have a some problem about node.js server. What should I do to solve the this problem?',
    spintype: 0,
    removeold: 0,
};

// Using request
request(
    {
        method: 'POST',
        url: 'http://address:9017/',
        form: data,
    },
    (error, responce, body) => {
        if (!error) {
            console.log(body, responce);
            return;
        }
        console.log(error);
    }
);

// Using native http
let postData = querystring.stringify(data);

let options = {
    hostname: 'address',
    port: 9017,
    path: '/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': postData.length,
    },
};

let req = http.request(options, (res) => {
    console.log(`STATUS: ${res.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
});

req.on('error', (e) => {
    console.log(`problem with request: ${e.message}`);
});

req.write(postData);
req.end();

Para o módulo de solicitação:

{ [Error: socket hang up] code: 'ECONNRESET' }

Para http nativo:

STATUS: 200
HEADERS: {"content-length":"98","content-type":"text/html","cache-control":"no-cache","connection":"keep-close"}
BODY: Excellent some problem about client. js server. What must i do to solve the particular this issue?
No more data in response.

Parece que é realmente um bug no módulo de solicitação.

Not enough info (see CONTRIBUTING.md)

Comentários muito úteis

Alguém me salve :angel:

Todos 77 comentários

Eu tenho o mesmo problema, mas adicionar a opção gzip:true funcionará.

Qual versão do node.js você está usando? Estamos vendo exceções ECONNRESET ocasionais após a atualização de 0,10 para 0,12. Ao pesquisar os bugs do node.js, parece que isso pode ter sido quebrado na versão 0.12 e corrigido posteriormente.

Mesma questão aqui. Alguma atualização? Estou usando o node.js 4.2.2 e estou recebendo um erro ECONNRESET periódico (3-4 vezes por minuto).

Oi @aymeba parece que a primeira versão 4.x que tem essa correção é 4.4.0.

Procure por commits intitulados http: handle errors on idle sockets . Existem vários commits diferentes com este título, já que ele foi aplicado a diferentes branches.

Não importa, fiquei confuso e estava falando sobre um bug ECONNRESET no node.js (#3595).

Eu não acho que isso aconteça por causa do bug que você apontou. No nosso caso aparece:

  • Envie uma solicitação para nosso back-end
  • O back-end processa a solicitação
  • De alguma forma a solicitação está desconectando sem esperar a resposta e estamos recebendo ECONNRESET
  • Temos certeza de que nosso servidor backend não interrompe a conexão

Estou confuso ao receber esse erro porque, em um caso normal, nosso servidor de back-end deve lançar esse erro ou?

Alguma atualização sobre isso?. Eu vejo o erro com botkit 0.2.1.

Estou tendo um problema semelhante. Eu fiz horas de pesquisa, testes e depuração. No meu caso, postando no mesmo restapi via Postman, o ponto final funciona bem. Falha ao fazer a solicitação por meio da chamada http.request do NodeJS nativo. Todos os cabeçalhos e carga útil (corpo) são os mesmos. (exceto que não tenho o token do carteiro nos cabeçalhos)

Divulgação completa, estou usando restify para o meu servidor.

Caso você use restify no lado do servidor, ajudaria a habilitar o auditor, que deve fornecer algumas dicas sobre o que está acontecendo. Além disso, verifique se você está configurando o "Tipo de conteúdo" correto em sua solicitação para que o servidor saiba o que esperar. Eu vi esse erro quando o servidor está entendendo mal a solicitação, portanto, fornecer o tipo de conteúdo ajudará.

Alguma atualização sobre este assunto? Ainda vejo esse problema acontecendo com o Node v5.0.0. Vejo que lança um erro exatamente após 45 segundos a partir do momento em que a solicitação é feita.

Eu vi esse mesmo problema com o HapiJS. O problema era um cabeçalho de tamanho de conteúdo incorreto

quero fazer um pedido de assinatura e notificação obrigado...

acontecendo com o Node v6.9.2.

  get: async function(ctx) {
    let body = await new Promise(function(resolve, reject) {
      return ctx.req.pipe(request('/path/to/my/backend', function(err, res, body) {
        if (err) { return reject(err) }
        resolve(body)
      }))
    })
    return body
  }

Estou vendo isso também com o nó 6.6.0. O servidor ao qual estou me conectando não está enviando um cabeçalho Content-Length na resposta, nesse caso, de acordo com a especificação HTTP, o servidor deve fechar o fluxo após enviar todos os dados. Eu suspeito que isso está sendo mal interpretado como um soquete desligado. Fazer a mesma solicitação com cURL funciona bem.

+1
Nó 6.9.4
solicitação 2.79.0

Funciona bem com curl
O URL que tento obter retorna o cabeçalho Content-Length

+1
Nó 6.9.1
solicitação 2.79.0

Wget, curl - sucesso, mas request - erro.

Nó - v6.9.4
Solicitação - 2.79.0

# node req.js
REQUEST { uri: 'http://wtfismyip.com', callback: [Function] }
REQUEST make request http://wtfismyip.com/

{ Error: socket hang up
    at createHangUpError (_http_client.js:254:15)
    at Socket.socketOnEnd (_http_client.js:346:23)
    at emitNone (events.js:91:20)
    at Socket.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }

Tendo o mesmo problema. Curiosamente, parece ser independente da versão da solicitação, pois o mesmo código funciona para mim no 6.4.0, mas quebra no 6.9.2 (estas são apenas as 2 versões do nodejs que eu instalei).

No meu caso, consegui contornar o problema definindo o cabeçalho Connection: keep-alive .

@dieseldjango Obrigado pela sugestão. Mas não resolveu meu caso.

Aqui está um site que dá esse erro, para reprodução:

{ request: 
   { debugId: 1,
     uri: 'https://www.deal.no/',
     method: 'GET',
     headers: 
      { Connection: 'keep-alive',
        host: 'www.deal.no',
        'accept-encoding': 'gzip, deflate' } } }
error:  Error: socket hang up
    at TLSSocket.onHangUp (_tls_wrap.js:1111:19)
    at TLSSocket.g (events.js:291:16)
    at emitNone (events.js:91:20)
    at TLSSocket.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

..usando request-debug para depurar os cabeçalhos enviados

Isso ainda não está resolvido? Estava funcionando bem como há duas semanas e agora estou recebendo esse erro
{ [Error: socket hang up] code: 'ECONNRESET', response: undefined }
nó -v 4.4.7

tente remover 'accept-encoding': 'gzip, deflate' nos cabeçalhos resolveu isso.

Vejo que as pessoas estão recebendo esse erro com mais frequência. No meu caso foi bem simples. O que eu pensava ser um URL formado corretamente com base em um dos meus algoritmos, na verdade estava malformado. Eu encorajo todos vocês que estão enfrentando esse problema a assumir que o problema está no seu código. Garanto a você que, em 98% dos casos, a causa raiz é algo mundano que você está dando como certo ou ignorando. Eu tentei todos os itens acima para resolver o problema, mas no final, ele se resumiu a uma barra extra.

eu tento seguir todas as sugestões que você diz, mas esse problema ainda acontece. tão triste....

Se isso ajudar alguém, eventualmente resolvi o problema usando require('child_process').exec para chamar curl. Certifique-se de higienizar adequadamente suas entradas se elas vierem da área de usuário.

Por favor, tente solicitar a google.com => hostname: 'google.com' para verificar se funciona ou não.
No meu caso, "hostname" foi tratado pelo nginx como proxy e não responde ao receber solicitação com corpo vazio.
Este código obtém erro:

var http = require("http");
var options = {
  hostname: 'myAddressNginx',
  port: 80,
  path: '/',
  method: 'GET',
  headers: {
    'Content-Type': 'text/html',
    'Content-Length': Buffer.byteLength("")
  }
};

var req = http.request(options, (res) => {
  res.on('data', (chunk) => {console.log("%s", chunk);});
  res.on('end', () => {});
});

// write data to request body
req.write("");
req.end();

Este código funciona

var http = require("http");
var options = {
  hostname: 'myAddressNginx',
  port: 80,
  path: '/',
  method: 'GET',
  headers: {
    'Content-Type': 'text/html',
    'Content-Length': Buffer.byteLength("")
  }
};

var req = http.request(options, (res) => {
  res.on('data', (chunk) => {console.log("%s", chunk);});
  res.on('end', () => {});
});

// write data to request body
req.write("abc");
req.end();

+1
Nó 6.9.5

Olá Pessoal, estou com o mesmo problema. +1
Felizmente eu uso 'request' em uma segunda ferramenta de monitoramento, então meus problemas são mínimos. Eu gosto muito do node.js, então estou postando alguns comentários. Espero que meu feedback ajude um pouco com suas tentativas de corrigir o problema.

O erro agora está aparecendo de forma consistente em ambientes de produção de alto tráfego.
Eu posso girar uma réplica "exata" do servidor e o erro "nunca" aparece. Eu posso alternar os endpoints e sempre acaba que o ambiente de produção de alto tráfego causa esse erro para o cliente.
{ [Erro: desligamento do soquete] código: 'ECONNRESET' }.

Isso começou como um erro intermitente que notei há vários dias e depois que o serviço de monitoramento deu alarmes falsos muitas vezes ..... e muitas vezes testando com ferramentas de teste de produção que não usam 'request' eu comecei pesquisando na web para encontrar este problema aqui.

Agora eu não alterei nenhum código/versão em mais de 8 meses para este aplicativo e estou confuso sobre como isso pode acontecer do nada. Então... o que mudou no mundo dos 'solicitações' se eu não alterei nenhum código de cliente?

+1
Nó 6.9.1

Isso só acontece de vez em quando, quando testo meus endpoints localmente, executando muitas requisições de forma bastante rápida...

Também estamos enfrentando o mesmo problema com node4 e node6. funcionando bem com node0.12.

Por favor, ajude a consertar isso.

problema semelhante no problema https.request nativo
veja mais aqui ,

adicionar abaixo à opção de solicitação ignorará (corrigirá) esse problema,

agentOptions: {
  ciphers: 'DES-CBC3-SHA'
}

fui pego e passei a tarde inteira tentando descobrir... estava em um ambiente complicado com várias camadas de redirecionamento: is this DNS issue? -> no way it's DNS -> definitely DNS -> no it's not
até que vi o exemplo do @fractalf e percebi que tudo isso acontecia apenas com sites hospedados no IIS6 com https

Sem sorte.

definir cifras para seguir não funcionou para mim.
AgentOptions: {
cifras: 'DES-CBC3-SHA'
}

@aganapan qual é o URL que você estava solicitando? Minha solução corrigirá apenas problemas relacionados à hospedagem de sites no IIS6 + TLS1.0. Pode haver outros problemas que resultam em mensagens de erro semelhantes.

Eu tive o mesmo problema. Eu usei ngrok e olhei para o pedido RAW. Descobriu-se que havia um caractere não imprimível e2808b anexado à entrada do usuário. Provavelmente copiar/colar. Eu usei encodeURIComponent() na parte URI fornecida pelo usuário e o problema desapareceu.

Eu tive o mesmo problema.

  • nó V6.9.5
  • solicitação V2.69.0

@danielkhan Eu usei o método encodeURIComponent ;

// this is request
{
    "request": {
        "debugId": 5,
        "uri": "https://xxx.cdn.cn/js/information_main_27d1838a.js",
        "method": "GET",
        "headers": {
            "user-agent": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
            "host": "xxx.cdn.cn"
        }
    }
}

{
    "response": {
        "debugId": 5,
        "headers": {
            "expires": "Sat, 15 Apr 2017 11:01:16 GMT",
            "date": "Thu, 16 Mar 2017 11:01:16 GMT",
            "content-type": "application/x-javascript; charset=utf-8",
            "content-length": "49785",
            "last-modified": "Sun, 12 Mar 2017 14:30:49 GMT",
            "cache-control": "max-age=2592000",
            "access-control-allow-origin": "*",
            "accept-ranges": "bytes",
            "age": "19",
            "x-cache": "HIT from www.matocloud.com",
            "connection": "close",
            "alt-svc": "h2=\":443\""
        },
        "statusCode": 200
    }
}

Node.js 6.10.0
solicitação 2.72.0

Encontramos o mesmo problema ao executar alguns testes de integração de back-end. Nosso produto se conecta a vários dispositivos de rede usando HTTPS. Nesse cenário, estamos estabelecendo várias conexões HTTPS e executando algumas solicitações POST e GET para cada dispositivo.
Como o problema ocorreu em nosso ambiente de teste, a solução alternativa foi desabilitar as conexões persistentes HTTP (definir o cabeçalho HTTP Connection: close ). Ao fazer isso, solicitamos ao servidor que feche a conexão após entregar a resposta (HTTP/1.1). No entanto, perdemos os benefícios das conexões HTTP persistentes, pois agora cada TCP atenderá apenas a uma solicitação.

chrome está bloqueando esta solução DES-CBC3-SHA

Para mim, curl não está funcionando. Descobri que havia definido o proxy para minha ferramenta de linha de comando antes. Funciona bem agora quando removo o proxy.

Ainda estou recebendo este problema.

{ Error: socket hang up
 at createHangUpError (_http_client.js:302:15)
 at Socket.socketOnEnd (_http_client.js:394:23)
 at emitNone (events.js:91:20)
 at Socket.emit (events.js:186:7)
 at endReadableNT (_stream_readable.js:974:12)
 at _combinedTickCallback (internal/process/next_tick.js:74:11)
 at process._tickDomainCallback (internal/process/next_tick.js:122:9) code: 'ECONNRESET' }

Finalmente consegui que isso funcionasse para o recaptcha. Eu tive que importar e usar a biblioteca https. Aqui está o código de trabalho:

var https = require('https');
var querystring = require('querystring');

var segredo = "YOUR_KEY";
var resposta = RESPONSE_CODE;
var postData = "secret="+secret+"&"+"resposta="+resposta;

// Construir a string de postagem de um objeto
var post_data = querystring.stringify({
'compilation_level': 'ADVANCED_OPTIMIZATIONS',
'output_format': 'json',
'output_info': 'compiled_code',
'warning_level': 'QUIET',
'js_code': postData
});

var opções = {
nome do host: ' www.google.com ',
porta: 443,
caminho: '/recaptcha/api/siteverify',
método: 'POST',
cabeçalhos: {
'Content-Type': 'application/x-www-form-urlencoded'
//'codificação de conteúdo': 'gzip',
//'Conexão': 'fechar'
},
AgentOptions: {
cifras: 'DES-CBC3-SHA'
}
};
var req = https.request(opções, função(res) {
console.log('Status: ' + res.statusCode);
console.log('Headers: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (corpo) {
console.log('Corpo: ' + corpo);
});
});
req.on('erro', function(e) {
console.log('problema com solicitação: ' + e.message);
});
// escreve dados no corpo da requisição
req.write(postData);
req.end();

NOTA: gravar isso para outras pessoas que provavelmente tropeçarão nessa discussão ao pesquisar na Internet por essa mensagem de erro específica.

Acontece que a maior parte da discussão acima perde o ponto, porque o erro não é causado pelo site do cliente e, portanto, tentar diferentes "soluções alternativas" para request provavelmente não funcionará. O problema é que o soquete de solicitação HTTP no lado do

Se você também for responsável pelo código-fonte do lado do servidor e usar a estrutura express/koa, deverá desabilitar o tempo limite ocioso no soquete de solicitação HTTP antes de iniciar a operação de back-end de longa duração. Por exemplo, para um manipulador de rota ES6 koa:

javascript ctx => { .... ctx.socket.setTimeout(0); // now trigger the long lasting backend operation .... }

Agora meu problema de tempo limite do cliente desapareceu sem alterar nenhuma linha no código do cliente ...

verifique se você está chamando o URL com o SSL correto - https ou http

Também é problema de proxy no meu caso. Após redefinir http_proxy e https_proxy, o problema desapareceu.

Eu tive o mesmo problema.

Para ondulação:
HTTP/1.1 200 OK

Para módulo http nativo:
{ [Error: socket hang up] code: 'ECONNRESET' }

Para o módulo de solicitação:
{ [Error: socket hang up] code: 'ECONNRESET' }

O motivo foi em resposta, principalmente na sintaxe errada do protocolo http.
\n símbolo \r\n , e após o último cabeçalho - \r\n\r\n .

Quando foi corrigido, o erro desapareceu.

Pode ser que seja útil e economize tempo para alguém.

Eu tive o mesmo problema. No meu caso, configurei o User-Agent nos cabeçalhos nas opções de solicitação e o problema desapareceu.

Tendo o mesmo problema com o Node 8.x

+1
Nó 8.1.2
"solicitação": "=2.81.0"

{
    "method": "GET",
    "json": true,
    "uri": "http://www.bb.com/xxxxxxxxxxx",
    "baseUrl": null,
    "headers": {
        "cookie": "yyyyy",
        "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60"
    },
    "qs": {
        "app_version": "1.9.8.8",
        "env": "prod"
    }
}

//res
Error: socket hang up
InternalServerError: Internal Server Error

// setting
var _request = require('request').defaults({
        forever      : true,
        maxRedirects : 8
    }),

Eu recebi o mesmo erro, mas um pouco diferente, minha situação é assim.
testapp -> api A -> api B
-> significa pedido
O aplicativo de teste obtém o erro de desligamento quando A solicita B muito lentamente e, finalmente, obtém um erro 500 de B (o erro é tratado na API A).
Tenho certeza que não é um problema de tempo limite, já que a api A faz muitas coisas e sempre retorna resposta muito lenta, mas sem erro.
Agora estou muito confuso como funciona o express e request, o erro 500 já é tratado pela api A e tem outras ações de acompanhamento. por que o aplicativo de teste ainda receberá o erro de desligamento do soquete?

Também estou enfrentando esse problema no nó mais recente (8.6), bem como na versão 7.x mais recente. Os detalhes estão aqui se alguém quiser tentar: https://stackoverflow.com/questions/46666079/node-js-http-get-econnreset-error-on-read

Por favor, deixe-me saber se eu posso fornecer alguma informação adicional!

Tendo o mesmo problema com o Node 6.10.0

Outra explicação possível: você está enviando mais dados no corpo HTTP do que o especificado no cabeçalho Content-Length

+1
Nó 8.6.0

Para corrigir o problema, você deve:
1-Adicionar process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
2-Atualize zone.js para v0.7.4

Eu tive o mesmo problema e a resolução foi usar a variável de ambiente NO_PROXY="yourcompany.com" bem como strictSSL:false , pois nossa solicitação estava sendo feita para o url interno da empresa e estava tentando usar o servidor proxy. Você pode usar process.env.NO_PROXY="suaempresa.com" programaticamente.

+1
Nó 8.8.1

at createHangUpError (_http_client.js:329:15)
at Socket.socketOnEnd (_http_client.js:421:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1056:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9) code: 'ECONNRESET' }

parece que o problema do meu lado era que o Vagrant estava "ocupando" a porta e enviando um pacote TCP com um sinalizador FIN imediatamente após minha solicitação GET embora ainda não esteja claro por que o chrome e o carteiro não tiveram problemas trabalhando em torno disso - talvez eles tenham alguma resiliência adicional

Eu tive esse problema, GZIP estava ligado, Keep alive estava ligado também.
O problema desapareceu após adicionar pacotes.

const zlib = require('zlib'); // for GZIP
const http = require('http');
const https = require('https');

Mesmo problema - corrigido alterando o URL de localhost para o IP real da máquina host apenas um FYI

Ainda tendo esse problema... Sem motivo aparente.

info:  Error: socket hang up
    at createHangUpError (_http_client.js:345:15)
    at Socket.socketOnEnd (_http_client.js:437:23)
    at emitNone (events.js:110:20)
    at Socket.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

oi, não sei se você resolveu este problema ainda , mas eu tinha resolvido este tody, quando depuro, encontro,

// Using native http
let postData = querystring.stringify(data);
...
req.write(postData);

se o servidor remoto for iniciado por koa (ou outro servidor nodejs) e os dados forem {} , a função postData by stringify se transformará em {} , mas o servidor koa obterá o {} lançará o parser error , então esta solicitação lançará um erro por

Error: socket hang up
    at createHangUpError (_http_client.js:345:15)
    at Socket.socketOnEnd (_http_client.js:437:23)
    at emitNone (events.js:110:20)
    at Socket.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

então eu tinha que fazer isso: __postData = postData === '{}'? '' : dados de postagem__

espero que possa te ajudar

Para mim, isso está acontecendo ao enviar uma solicitação POST com content-length : 0 nos cabeçalhos da solicitação. Não sei se esse resultado é razoável, mas pelo menos acho que talvez você possa tentar remover cada item nos cabeçalhos que adicionou para descobrir o motivo do problema.

quando eu mudo 'GET' para 'POST', corrija. mas não sei por que, eu corrijo em https://cnodejs.org/topic/57a6c35282e6ea4870ecd3f2 , alguém disse que se você usar 'GET', o código não pode executar res.on('data', cb)

@LvChengbin Eu também estava enfrentando o mesmo problema na solicitação POST . Substituir Content-Length : 0 pelo comprimento real do corpo funcionou para mim.

Alguém me salve :angel:

Eu também tenho o mesmo problema no bode v.8.9

{ Erro: soquete desligou
em createHangUpError (_http_client.js:331:15)
em Socket.socketOnEnd (_http_client.js:423:23)
at emitNone (events.js:111:20)
em Socket.emit (eventos.js:208:7)
em endReadableNT (_stream_readable.js:1064:12)
em _combinedTickCallback (interno/processo/next_tick.js:138:11)
em process._tickCallback (interno/processo/next_tick.js:180:9) código: 'ECONNR
ESET' }

meu código está abaixo.

let request=require("request");
solicitar({
url: " http://192.168.31.29 :3019/tactics/createMediaHotTotal20",
método: "GET",
json: verdade,
cabeçalhos: {
"content-type": "aplicativo/json"
},
}, função (erro, resposta, corpo) {
se (erro) {
console.log(erro)
} senão {
resolver(corpo);
}
})

Mesmo problema, nó v9.5.0

const https = require("https");
const fs = require("fs");

process.env.NO_PROXY="yourcompany.com";

const options = {
  hostname: "en.wikipedia.org",
  port: 443,
  path: "/wiki/George_Washingtons",
  method: "POST",
  // ciphers: 'DES-CBC3-SHA'
};

const req = https.request(options, (res) => {
  let responseBody = "";
  console.log("Response started");
  console.log(`Server Status: ${res.statusCode} `);
  console.log(res.headers);
  res.setEncoding("UTF-8");

  res.once("data", (chunk) => {
    console.log(chunk);
  });

  res.on("data", (chunk) => {
    console.log(`--chunk-- ${chunk.length}`);
    responseBody += chunk;
  });

  res.on("end", () => {
    fs.writeFile("gw.html", responseBody, (err) => {
      if (err) throw err;
      console.log("Downloaded file");
    });
  });
});

req.on("error", (err) => {
  console.log("Request problem", err);
});
Request problem { Error: socket hang up
    at createHangUpError (_http_client.js:330:15)
    at TLSSocket.socketOnEnd (_http_client.js:423:23)
    at TLSSocket.emit (events.js:165:20)
    at endReadableNT (_stream_readable.js:1101:12)
    at process._tickCallback (internal/process/next_tick.js:152:19) code: 'ECONNRESET' }



md5-988987fef0feed585119ccc2fe5450ba



~/node-training> npm config ls -l
; cli configs
long = true
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.1.0 node/v9.5.0 darwin x64"

; userconfig /Users/katsanos/.npmrc
strict-ssl = false

; default values
access = null
allow-same-version = false
also = null
always-auth = false
audit = true
auth-type = "legacy"
bin-links = true
browser = null
ca = null
cache = "/Users/katsanos/.npm"
cache-lock-retries = 10
cache-lock-stale = 60000
cache-lock-wait = 10000
cache-max = null
cache-min = 10
cafile = undefined
cert = null
cidr = null
color = true
commit-hooks = true
depth = null
description = true
dev = false
dry-run = false
editor = "vi"
engine-strict = false
fetch-retries = 2
fetch-retry-factor = 10
fetch-retry-maxtimeout = 60000
fetch-retry-mintimeout = 10000
force = false
git = "git"
git-tag-version = true
global = false
global-style = false
globalconfig = "/usr/local/etc/npmrc"
globalignorefile = "/usr/local/etc/npmignore"
group = 1493692218
ham-it-up = false
heading = "npm"
https-proxy = null
if-present = false
ignore-prepublish = false
ignore-scripts = false
init-author-email = ""
init-author-name = ""
init-author-url = ""
init-license = "ISC"
init-module = "/Users/katsanos/.npm-init.js"
init-version = "1.0.0"
json = false
key = null
legacy-bundling = false
link = false
local-address = undefined
loglevel = "notice"
logs-max = 10
; long = false (overridden)
maxsockets = 50
message = "%s"
; metrics-registry = null (overridden)
no-proxy = null
node-options = null
node-version = "9.5.0"
offline = false
onload-script = null
only = null
optional = true
otp = null
package-lock = true
package-lock-only = false
parseable = false
prefer-offline = false
prefer-online = false
prefix = "/usr/local"
production = false
progress = true
proxy = null
read-only = false
rebuild-bundle = true
registry = "https://registry.npmjs.org/"
rollback = true
save = true
save-bundle = false
save-dev = false
save-exact = false
save-optional = false
save-prefix = "^"
save-prod = false
scope = ""
script-shell = null
scripts-prepend-node-path = "warn-only"
searchexclude = null
searchlimit = 20
searchopts = ""
searchstaleness = 900
send-metrics = false
shell = "/usr/local/bin/fish"
shrinkwrap = true
sign-git-tag = false
sso-poll-frequency = 500
sso-type = "oauth"
; strict-ssl = true (overridden)
tag = "latest"
tag-version-prefix = "v"
timing = false
tmp = "/var/folders/kn/3cnpbcsx60n4fx_jv6sf4l80_mdkps/T"
umask = 18
unicode = true
unsafe-perm = true
usage = false
user = 356960985
; user-agent = "npm/{npm-version} node/{node-version} {platform} {arch}" (overridden)
userconfig = "/Users/katsanos/.npmrc"
version = false
versions = false
viewer = "man"

EDIT : estava faltando req.end() . Funciona

Eu tenho o mesmo bug. O POST funciona quando Content-Length é adicionado à solicitação. Espero que isso ajude vocês:
'Content-Length': Buffer.byteLength(data) //Content-Length é necessário para um POST

No meu caso, consegui contornar o problema definindo o cabeçalho Connection: keep-alive .

SALVE MEU DIA!

Eu cavo um pouco.
Eu tenho um problema traseiro uma vez por semana com solicitação ao enviar POST para o servidor nodejs.
Depois de ir dipper, descobri que o nodejs apenas trava a conexão se a solicitação for malformada.

Parece que algum bug traseiro acontece quando a solicitação POST é passada para http.request

No meu caso, o corpo foi enviado sem os últimos símbolos e TALVEZ tenha sido devido ao erro de cálculo do Content-Length em setContentLength()

Usar o protocolo 'http' em vez de 'https' também resolve o problema.

Isso é muito frustrante. Não tenho controle sobre o servidor, mas não consigo fazer POST do Nodejs (usando solicitação ou superagente), mas consigo fazer curl ou Postman com sucesso. Ainda mais louco, a chamada seria bem-sucedida se eu pausasse usando o depurador na instrução de solicitação e continuasse.

No meu caso, apenas removi o cabeçalho 'Host', resolvido.

Encontramos esse problema após atualizar para um nodejs mais recente ( 10.16.3 ). No lado do cliente, usamos o agente http nodejs com keepAlive: true . Parece que aconteceu o seguinte:

  • cliente usa socket livre para fazer um pedido
  • ao mesmo tempo, o servidor fecha o soquete por causa da configuração keepAliveTimeout que apareceu no nodejs versão 8

Solução
Até agora encontramos duas soluções:
1) No lado do servidor, desabilite keepAliveTimeout configurando-o igual a 0
2) Feche os soquetes livres em menos de keepAliveTimeout (por padrão, 5 segundos). O agente http padrão não suporta esse recurso (a configuração timeout não faz isso). Então usamos agentkeepalive lib

const HttpsAgent = require('agentkeepalive').HttpsAgent;

const agent = new HttpsAgent({
    freeSocketTimeout: 4000
});
let req = http.get(options, (res) => {
    ...........
    ...........
}).on('error', function(e) {
        console.error(e);
});

Tente isso.

Estamos enfrentando um problema semelhante - atualmente, estamos usando o 6.11.x, mas tentamos o nó 10, mas não ajuda.

Nós até tentamos atualizar o módulo de solicitação + adicionando todas as sugestões fornecidas, mas sem ajuda.

Quaisquer outras idéias ou ajuda na solução de problemas.

conseguimos resolver esse problema - nosso gateway de API tinha uma configuração de tempo limite que causava esse problema. obrigado por olhar para ele.

conseguimos resolver esse problema - nosso gateway de API tinha uma configuração de tempo limite que causava esse problema. obrigado por olhar para ele.

Oi, você pode me dizer que tipo de configuração de tempo limite leva a esse problema

eu tenho o mesmo problema quando estou testando minhas rotas com chai-http. o absurdo é que os três primeiros passam ok!! eu estou tentando enfrentá-lo o dia todo

aqui meu código:
```
log("teste de trabalho")
it("teste as rotas /login", done => {
chai
.request(servidor)
.post("/login")
.mandar({ })
.end(função(erro, res) {
expect(err).to.ser.null;
expect(res.status).to.not.equal(404);
expect(res.body.message).to.not.be.equal("Not Found");
feito();
});
});

log(falha no teste com erro: socket desliga)
it('teste a rota /getResetCodePassword', (feito)=> {
chai
.request(servidor)
.patch("/getResetCodePassword")
.mandar({ })
.end( (erro,res) => {
console.log(erro);
feito();
})
})

```

Esta página foi útil?
0 / 5 - 0 avaliações