【问题标题】:Download and save a favicon with node.js?使用 node.js 下载并保存网站图标?
【发布时间】:2011-12-18 22:33:49
【问题描述】:

我正在尝试使用 Node.js 从网站下载网站图标,但遇到了一些问题。

我的代码如下:

//Imports ...

var theurl = http.createClient(80, 'a1.twimg.com');
var requestUrl = 'http://a1.twimg.com/a/1284159889/images/favicon.ico';
var request = theurl.request('GET', requestUrl, {"host": "a1.twimg.com"});
request.end();

request.addListener('response', function (response)
{
        var body = '';
        response.addListener('data', function (chunk) {
                body += chunk;
        });
        response.addListener("end", function() {
            fs.writeFileSync('favicon.ico', body.toString('binary'), 'binary');
        });
});

然而,生成的图标只是垃圾,当我以这种方式抓取它时,我怀疑它与 favicon 的编码有关。这样做的正确方法是什么?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    尝试作为响应回调response.setEncoding('binary') 中的第一行,或(因为这不是设置的首选(按节点)编码)response.setEncoding(null),这将使其成为缓冲区。然后直接写body,不做任何事情。

    fs.writeFileSync('favicon.ico', body, 'binary');

    【讨论】:

    • 不适用于 response.setEncoding(null),但适用于 response.setEncoding('binary')。
    • @jimt - 您是否也尝试使用null,然后跳过写入中的第三个参数?所以它是fs.wFS('favicon', body);
    【解决方案2】:

    我必须做response.setEncoding("binary") 并向 writeFileSync 提供第三个参数:

    fs.writeFileSync('favicon.ico', body, 'binary')
    

    这种组合对我有用。谢谢。

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 2012-04-04
      • 2016-03-18
      • 2021-02-14
      • 2017-10-06
      • 2013-05-18
      • 2013-05-11
      • 1970-01-01
      相关资源
      最近更新 更多