给定一个域,如何使用 Node 请求默认图标?默认图标位置位于domain/favicon.ico
我可以使用简单的https.get()
吗?似乎至少有 5 种原生方法可以做到这一点?
到目前为止,第一种方法不起作用。我得到这个代码的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
,我会得到看起来像 blob 或二进制文件或图像的内容。
如何以编程方式执行此操作?
如果我记得PHP有一个知道如何遵循"重定向"的方法,但是Node呢?
默认图标位置位于
domain/favicon.ico
默认的图标路径是/favicon.ico
,但你需要一个绝对的URL(schema://host/path
)才能发出请求。
如何以编程方式执行此操作?
如果使用核心nodejs,则需要通过response.headers['location']
手动跟踪重定向,以某种递归回调安排。 或者,您可以使用模块request
或follow-redirects
。
我得到看起来像 blob 或二进制文件或图像的东西。
事实上,这就是形象。从response.headers['content-type']
可以看出,它采用image/x-icon
格式,也称为ICO,正如名为favicon.ico
的文件所预期的那样。
数据 += 块
请注意,由于您使用的是字符串而不是缓冲区,因此这将导致当前 NodeJS 版本中的图像损坏。它尝试将二进制数据视为 UTF-8,替换未知序列。相反,您可能只想通过管道连接到fs.WriteStream
。