@kr_ilya

Как быстро и без вреда для сайта проверить http коды ответа 1 000 000 ссылок?

Появилась необходимость проверить код ответа около 1М ссылок сайта, быстро и без особой нагрузки на сам сайт.

Нашел в сети небольшой скрипт на bash
#!/bin/bash
while read LINE; do
  curl -o /dev/null --silent --head --write-out '%{http_code}' "$LINE"
  echo " $LINE"
done < link.txt


Но он у меня 10 ссылок чекал секунд 10. И ссылки принимает из файла. У меня ссылки в базе.
Есть ли инструменты, для nodejs, python, php, чтобы выполнить данную задачу?

Конкретно нужно узнать отдает адрес 200 или 404.
В какую сторону смотреть?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
import asyncio

from aiohttp import ClientSession, ClientError


async def check_url(url):
    async with ClientSession() as s:
        try:
            r = await s.head(url)
            if r.status != 200:
                return url
        except ClientError:
            return f'error {url}'


URLS = [
           'https://ya.ru',
           'https://qna.habr.com/',
           'https://qna.habr1.com/',
       ] * 10


async def _main():
    fails = await asyncio.gather(*(check_url(url) for url in URLS))
    print(fails)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(_main())
    loop.close()

Можешь запросить только заголовки, для ограничения одновременных запросов смотри в сторону asyncio.Semaphore
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
curl -sIXGET
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы