Проверьте пропавшее изображение imgur.com с простой HEAD не получает 404 или перенаправить код состояния

У меня есть два тестовых URL:

Я пытаюсь выполнить простой запрос-обещание, чтобы проверить, существует ли это изображение перед его загрузкой.

Мой тестовый скрипт:

const rp = require('request-promise');

// const URL = 'https://i.redd.it/izxp34ew4nw11.jpg';
// const URL = 'https://i.imgur.com/JedrSP3.png'; // 404 imgur
const URL = 'https://i.imgur.com/d1YdgCM.png' // working imgur

async function main() {
  try {
    const payload = await testRp();
    debugger;
  } catch (e) {
    debugger;
  }
}

async function testRp({ increaseBy } = {}) {
  const uri = URL;
  const options = {
    method: 'HEAD',
    uri,
    json: true,
  };
  return rp(options);
}

main();

Если вы нажмете ссылку на удаленное изображение, он перенаправит вас на image has been deleted or missing стр. Проблема здесь в том, что если вы получаете это программно, вы не получите код состояния. Вы получаете это:

< { 'last-modified': 'Wed, 14 May 2014 05:44:36 GMT',
<   etag: '"d835884373f4d6c8f24742ceabe74946"',
<   'content-type': 'image/png',
<   'cache-control': 'public, max-age=31536000',
<   'content-length': '503',
<   'accept-ranges': 'bytes',
<   date: 'Sat, 10 Nov 2018 22:52:05 GMT',
<   age: '4336782',
<   connection: 'close',
<   'x-served-by': 'cache-iad2145-IAD, cache-yyz8322-YYZ',
<   'x-cache': 'HIT, HIT',
<   'x-cache-hits': '63963, 8479',
<   'x-timer': 'S1541890325.130391,VS0,VE0',
<   'access-control-allow-methods': 'GET, OPTIONS',
<   'access-control-allow-origin': '*',
<   server: 'cat factory 1.0' }

и будет казаться, что это нормально для вас, чтобы продолжить GET запрос.

Есть ли способ проверить, существует ли изображение, и гарантировать, что возвращенный статус верен, без использования imgur API?

1 ответ

Кажется, не существует ничего, что явно говорит вам, если это 404. Но я обнаружил, что content-length всегда будет '503' и если вы возьмете разницу между возвращенным headers поле date а также ageвсегда будет 1537553543000 или же 1537553543000,

Это, очевидно, не является отказоустойчивым, так как это может измениться в любое время, поэтому вам, вероятно, потребуется создать задание cron для проверки этих двух чисел, если вы не хотите использовать Imgur API (с ограничением скорости).

Другие вопросы по тегам