печать результата grep и кода curl - PullRequest
0 голосов
/ 27 января 2020

Я хотел бы получить все URL-адреса из большого файла и проверить статус этой ссылки в Интернете. Так, например, я хотел бы иметь

stackoverflow.com, 200 ОК ...

Пока у меня есть grep -o "https?:*" file.txt | xargs curl -IsN 2>&1 | grep HTTP, но я не знаю, как показать url grep кормит xargs и curl в гостях., но возвращает только

HTTP/1.1 200 OK
HTTP/1.0 301 Moved Permanently

1 Ответ

0 голосов
/ 27 января 2020

Вы можете попробовать что-то вроде этого:

grep  "https:" file.txt | xargs -I {} curl -I  -L -s -o /dev/null -w "%{url_effective},%{response_code}" {}

Мне интересно, действительно ли ваш grep захватывает весь URL, так как вы использовали параметр -o. Вы тестировали только команду grep?

Обратите внимание, что в этом примере я добавил параметр -L для автоматического отслеживания перенаправлений, и я использую переменные cURL для получения последнего ответа код (%{response_code}) и окончательный URL (%{url_effective}) после перенаправления. Но если вы хотите, вы можете показать исходный URL из файла, а не окончательный URL, как показано curl.

В большинстве случаев переход на domain.com подразумевает перенаправление на www.domain.com. Таким образом, первый запрос возвращает код ответа 301 или 302, а второй запрос возвращает 200 (если все идет хорошо). На неправильно настроенных веб-сайтах может быть несколько перенаправлений и даже петли перенаправления. Поэтому нас обычно интересует последний код ответа.

Затем, используя xargs, вы можете добавить параллельную обработку. Я предполагаю, что это то, что вы имели в виду, так как сказали, что у вас большой файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...