使用node.js(http.get)读取远程文件

63

什么是读取远程文件的最佳方法?我想获取整个文件(而不是块)。

我从以下示例开始。

var get = http.get(options).on('response', function (response) {
    response.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
});

我想将文件解析为CSV格式,但为此我需要的是整个文件而不是分块数据。

4个回答

114

我会使用request来完成这个任务:

request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))

或者如果您不需要先保存到文件,而是只需要将CSV读入内存中,可以按照以下方式操作:

var request = require('request');
request.get('http://www.whatever.com/my.csv', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var csv = body;
        // Continue with your processing here.
    }
});

等等。


9
有没有本地化的方法来完成这个操作?为了一个文件而引入依赖似乎有些过度了。 - user140291
9
这个请求非常标准,只是以清晰的格式封装了这些“原生”调用。 - 7zark7
8
Jamie说,Node非常轻便,几乎仅包含最基础的功能,所以与PHP不同,最好习惯于使用许多模块。由于有package.json,保持这些模块更新很容易,而且它们通常都非常快速。 - Camilo Martin
4
这段话的意思是:这个操作需要把整个文件保存到内存中吗?我该怎么像使用 pipe() 一样流式处理传入的数据,但不写入数据呢? - Adam Moisa
6
截至2020年2月11日,"request"已完全废弃。不再有新的更改预计会出现。实际上,已经有一段时间没有任何更改了。 - Vladimir Vukanac
显示剩余4条评论

28

你可以像这样做,而不使用任何外部库。

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

const file = fs.createWriteStream("data.txt");

https.get("https://www.w3.org/TR/PNG/iso_8859-1.txt", response => {
  var stream = response.pipe(file);

  stream.on("finish", function() {
    console.log("done");
  });
});

如果网站需要用户名和密码怎么办?您能解释一下吗? - vaheeds
使用 https://username:password@remote.website。 - KHAYRI R.R. WOULFE

26
http.get(options).on('response', function (response) {
    var body = '';
    var i = 0;
    response.on('data', function (chunk) {
        i++;
        body += chunk;
        console.log('BODY Part: ' + i);
    });
    response.on('end', function () {

        console.log(body);
        console.log('Finished');
    });
});

对于这个已经运行的程序进行了更改,有什么意见吗?


如果网站需要用户名和密码怎么办?您能解释一下吗? - vaheeds

0
function(url,callback){
    request(url).on('data',(data) => {
        try{
            var json = JSON.parse(data);    
        }
        catch(error){
            callback("");
        }
        callback(json);
    })
}

你也可以使用这个。这是用于异步流程的。当响应不是JSON格式时会出现错误,还有404状态码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接