如何使用Node请求默认图标?

时间:2019-06-03 04:22:55

标签: javascript node.js favicon

给出一个域,如何使用Node请求默认图标?网站图标的默认位置为domain/favicon.ico,可以使用简单的https.get()吗?似乎至少有5 native ways可以做到这一点?

到目前为止,第一种方法无效。我得到ERR_INVALID_DOMAIN_NAME的这段代码:

const https = require('https');
const url = 'imdb.com/favicon.io';


https.get(url, (resp) => {
  let data = '';
  resp.on('data', (chunk) => {
    data += chunk;
  });
  resp.on('end', () => {
    console.log(data);
  });
}).on("error", (err) => {
  console.log("Error: " + err.message);
});

如果将URL更改为https://imdb.com/favicon.ico,我会得到

<p>The document has moved <a href="https://www.imdb.com/favicon.ico">here</a>.</p>

如果将URL更改为https://www.imdb.com/favicon.ico,则会得到:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://ia.media-imdb.com/images/G/01/imdb/images/favicon-2165806970">here</a>.</p>
</body></html>

最后,如果我将URL更改为https://ia.media-imdb.com/images/G/01/imdb/images/favicon-2165806970,则会得到看起来像斑点或二进制文件或图像的东西。

我该如何以编程方式执行此操作?

如果我还记得PHP的一种方法知道如何遵循“重定向”,那么Node呢?

1 个答案:

答案 0 :(得分:3)

  

默认图标位置在domain/favicon.ico

默认图标路径/favicon.ico,但是您需要一个绝对URL(schema://host/path)才能发出请求。

  

我该如何以编程方式执行此操作?

如果使用核心nodejs,则需要以某种递归回调方式通过response.headers['location']手动遵循重定向。或者,您可以使用模块requestfollow-redirects

  

我得到的东西看起来像是斑点或二进制文件或图像。

的确是图像。正如您从response.headers['content-type']所看到的,它是image/x-icon格式,也称为ICO,正如预期的favicon.ico文件一样。

  

数据+ =块

请注意,因为您使用字符串而不是缓冲区进行串联,所以这将导致当前NodeJS版本中的图像损坏。它尝试将二进制数据视为UTF-8,以替换未知序列。相反,您大概只是想通过管道传递到fs.WriteStream