У меня есть файл, содержащий URL веб-сайтов. Я пытаюсь записать сценарий удара, который возьмет любой файл, содержащий URL, и запишет в другой файл - URL и связанный код состояния.
То, чего я пытаюсь достигнуть, здесь:
У меня есть URL в файле как:
http://google.com
http://trafficinviter.com
http://stackoverflow.com
............
............
Upto 30 crore lines of URL in a file.
Я использую cURL
команда для получения Состояния Http этих URL.
Следовательно, я не понимаю, как я могу получить URL и соответствующее состояние HTTP того URL.
Скажите, что у меня должен быть вывод в файле как это:
http://google.com
200 ok
http://trafficinviter.com
200 ok
http://stackoverflow.com
200 ok
http://example.com
404
............
............
Upto 30 crore lines of URL in a file.
Также я ищу удар, который делает мою работу сделанной в один миг и легко. Поскольку существует много строк, я не могу найти надлежащее решение для этого. Любезно, помогите мне.Большое спасибо.
Попытка:
while read url
do
echo "$url"
curl -sI "$url" | head -1
done < list-of-urls > output-file
Это просто читает каждую строку входа от list-of-urls
файл, производит его назад и затем получает первую строку вывода от curl -I
на том URL (который является состоянием ответа HTTP). Вывод всего цикла переходит в output-file
.
Для тестирования нескольких URL сразу используйте параллель GNU :
GNU parallel makes sure output from the commands is the same output as
you would get had you run the commands sequentially. This makes it
possible to use output from GNU parallel as input for other programs.
, Например:
parallel -a list-of-urls 'echo {}; curl -sI {} | head -1' > output-file
Никакие гарантии, что вывод будет в порядке, хотя:
$ cat output-file
http://example.com
HTTP/1.1 200 OK
http://google.com
HTTP/1.1 302 Moved Temporarily
http://stackoverflow.com
HTTP/1.1 200 OK
http://trafficinviter.com
HTTP/1.1 200 OK
С Параллелью GNU Вы сделали бы что-то как:
cat input | parallel -k -j 100 --tag 'curl -sI {} | head -1'