【问题标题】:Node.js https.request() Error: socket hang upNode.js https.request() 错误:套接字挂断
【发布时间】:2021-01-02 22:29:48
【问题描述】:

我正在使用普通的 node.js 脚本发出 POST 请求,我发出请求的链接需要大约 1 到 1.2 分钟才能响应,并且在那段时间我收到此错误 Error: socket hang up

我收到套接字挂起错误的时间大约与我从服务器获得响应的时间相同,大约是 1 到 1.2 分钟

我尝试在标头中设置 connection: "keep-alive" 并在选项中将超时设置为 200000 毫秒,但没有成功。有什么帮助吗?

顺便说一句,如果我使用 axios,请求就可以正常工作

这是我的脚本

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

const file = fs.createWriteStream(path.join(__dirname, "data.csv"))

const options = {
  hostname: "example.com",
  path: "/example",
  method: "POST",
  headers: {
    <<headers>>
  }
  <<some other options>>
}

const req = https.request(options, response => {
    response.on("data", function (chunk) {
      console.log("started...")
      chunk.pipe(file)
    })
    response.on("end", function () {
      file.on("finish", function () {
        file.close()
      })
    })
  })

req.on("error", e => {
  console.error(e)
})
req.end()

这是完整的错误:

Error: socket hang up
    at connResetException (internal/errors.js:612:14)
    at TLSSocket.socketOnEnd (_http_client.js:493:23)
    at TLSSocket.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1308:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
  code: 'ECONNRESET'
}

【问题讨论】:

  • 哪个是url目标?
  • @GermanFaller 这是ssd.jpl.nasa.gov/sbdb_query.cgi
  • 我现在没有节点,你用邮递员试过了吗?尝试添加 userAgent 标头,一些网站会检查这些 hesders 以避免机器人。
  • @GermanFaller 问题是,如果我使用 axios,我的代码可以使用相同的选项正常工作,但我想在没有任何外部库的情况下这样做
  • 这是否适用于其他 url,或者它只是有问题。通信?

标签: javascript node.js ajax https xmlhttprequest


【解决方案1】:

发现我犯的错误

首先,而不是在response.on('data') 里面做chunk.pipe(file) 我直接做了response.pipe(file) 并且它起作用了我不知道究竟为什么,我猜这是因为响应是流而块只是缓冲区,如果有人知道,请告诉我。

第二我在选项中设置请求正文,我必须像这样设置请求正文参数 req.write(formData) 其中 formData 是我想作为请求正文发送的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2014-07-27
    • 2018-01-29
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多