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

У меня есть два тестовых 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 Ответ

0 голосов
/ 11 ноября 2018

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

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

...