给出一个域,如何使用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呢?
答案 0 :(得分:3)
默认图标位置在
domain/favicon.ico
默认图标路径为/favicon.ico
,但是您需要一个绝对URL(schema://host/path
)才能发出请求。
我该如何以编程方式执行此操作?
如果使用核心nodejs,则需要以某种递归回调方式通过response.headers['location']
手动遵循重定向。或者,您可以使用模块request
或follow-redirects
。
我得到的东西看起来像是斑点或二进制文件或图像。
的确是图像。正如您从response.headers['content-type']
所看到的,它是image/x-icon
格式,也称为ICO,正如预期的favicon.ico
文件一样。
数据+ =块
请注意,因为您使用字符串而不是缓冲区进行串联,所以这将导致当前NodeJS版本中的图像损坏。它尝试将二进制数据视为UTF-8,以替换未知序列。相反,您大概只是想通过管道传递到fs.WriteStream
。