Проверьте пропавшее изображение imgur.com с простой HEAD не получает 404 или перенаправить код состояния
У меня есть два тестовых URL:
- удаленное изображение: https://i.imgur.com/JedrSP3.png
- рабочее изображение: https://i.imgur.com/d1YdgCM.png
Я пытаюсь выполнить простой запрос-обещание, чтобы проверить, существует ли это изображение перед его загрузкой.
Мой тестовый скрипт:
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 (с ограничением скорости).