【问题标题】:Nodejs request issue with especific endpoint (Client network socket disconnected)特定端点的Nodejs请求问题(客户端网络套接字断开连接)
【发布时间】:2019-05-21 12:00:25
【问题描述】:

这是我的全部代码

const rp = require('request-promise');

(async () => {
  const headers = {
    Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3',
    'Cache-Control': 'no-cache',
    Connection: 'keep-alive',
    Host: 'www.receita.fazenda.gov.br',
    Pragma: 'no-cache',
    'Upgrade-Insecure-Requests': 1,
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0',
  };

  const jar = rp.jar();

  try {
    const firstAccess = await rp.get('https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/ConsultaSituacao/ConsultaPublica.asp', {
      headers,
      gzip: true,
      simple: false,
      strictSSL: false,
      jar,
    });
    console.log(firstAccess);
  } catch (e) {
    console.log(e);
  }
})();

当我运行我的代码时,我收到了这个错误:

UnhandledPromiseRejectionWarning:RequestError:错误:客户端网络 在建立安全 TLS 连接之前套接字已断开

url在浏览器中有效,但是我无法通过nodeJS访问,显然是https证书有问题

有什么方法可以忽略错误并访问它?

【问题讨论】:

标签: javascript node.js


【解决方案1】:

如果调用失败,您需要将调用移到 try catch 块中以处理 promise 拒绝:

...
try {
  const firstAccess = await rp.get(...)
} catch (e) {
  console.log(e)
}
...

【讨论】:

  • 消息:'错误:客户端网络套接字在建立安全 TLS 连接之前断开',
  • 该url在浏览器中有效,但是通过nodeJS无法访问,显然是https证书有问题有什么办法可以忽略错误并访问它?
  • 这可能是由于您的 nodejs 请求中缺少标头引起的。浏览器请求中的标头是什么?
  • Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8', 'Accept-Encoding': ' gzip, deflate, br', 'Accept-Language': 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3', 'Cache-Control': 'no-cache' , 连接: 'keep-alive', 主机: 'www.receita.fazenda.gov.br', Pragma: 'no-cache', 'Upgrade-Insecure-Requests': 1, 'User-Agent': 'Mozilla/ 5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0',
  • 我正在使用所有这些
【解决方案2】:

我的问题在重新启动/更改网络连接后得到解决。大部分时间问题出在网络上。

【讨论】:

  • 你能解释一下为什么会这样吗?
  • 同样的原因是代理,如果您的网络位于 fiddler 等代理之后。TLS 将不会被验证,并且响应将在握手之前发送。
猜你喜欢
  • 2017-02-17
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多