Как я могу запросить значок по умолчанию, используя Node? - PullRequest
4 голосов
/ 03 июня 2019

Учитывая домен, как я могу запросить значок по умолчанию, используя 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, я получу то, что выглядит как двоичный файл, двоичный файл или изображение.

Как я могу сделать это программно?

Если я помню, у PHP был метод, который знал, как следовать "перенаправлениям", но как насчет Node?

1 Ответ

3 голосов
/ 04 июня 2019

Местоположение значка по умолчанию: domain/favicon.ico

Значение по умолчанию путь равно /favicon.ico, но вам нужен абсолютный URL (schema://host/path)чтобы сделать запрос.

Как я могу сделать это программно?

Если вы используете core nodejs, вам нужно вручную следовать перенаправлениям через response.headers['location'], в некоторыхсвоего рода рекурсивный механизм обратного вызова.В качестве альтернативы вы можете использовать модули request или follow-redirects.

Я получаю то, что выглядит как двоичный объект, двоичный файл или изображение.

Действительно, это изображение.Как видно из response.headers['content-type'], он имеет формат image/x-icon, также известный как ICO , как и ожидалось для файла с именем favicon.ico.

data + =chunk

Обратите внимание, что поскольку вы объединяете строки вместо буферов, это приведет к повреждению изображения в текущих версиях NodeJS.Он пытается обрабатывать двоичные данные как UTF-8, заменяя неизвестные последовательности.Вместо этого вы, вероятно, просто хотите передать fs.WriteStream.

...