const https = require("https");
const fs = require("fs");
const options = {
hostname: "en.wikipedia.org",
port: 443,
path: "/wiki/George_Washington",
method: "GET",
// 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' }
答案 0 :(得分:1)
http.request()
打开到服务器的新隧道。它返回一个可写流,该流允许您将数据发送到服务器,并使用服务器响应的流调用回调。现在,您遇到的错误(ECONNRESET
)基本上意味着隧道已关闭。当错误发生在较低级别(极不可能)或隧道由于未接收到数据而超时时,通常会发生这种情况。在您的情况下,服务器仅在向您发送了一些东西时才响应,即使它是一个空包,因此您所要做的就是结束流,导致流作为空包刷新到服务器,这导致它回应:
req.end();
您可能想看看request
软件包,它使您避免处理这些低级的事情。