выполнить несколько запросов curl параллельно

Thank you for reading this post, don't forget to subscribe!

Пред­по­ло­жим, вы хоти­те запу­стить несколь­ко запро­сов curl одно­вре­мен­но по какой-либо при­чине, ска­жем, 10 запро­сов одновременно.

Выполнение параллельных запросов с помощью команды xargs

Коман­да xargs – это коман­да в Linux и UNIX-подоб­ных опе­ра­ци­он­ных систе­мах, кото­рая при­ни­ма­ет аргу­мен­ты из stdin, а затем запус­ка­ет коман­ду для каж­до­го аргумента.

Про­ще гово­ря, коман­да xargs может при­ни­мать выход­ные дан­ные коман­ды и обра­ба­ты­вать их как аргу­мент дру­гой команды.

Напри­мер, в при­ве­ден­ной ниже коман­де xargs при­ни­ма­ет аргу­мен­ты с левой сто­ро­ны и созда­ет ката­ло­ги, исполь­зуя име­на аргументов.

echo 'Raz Dwa Tri 4etyre' | xargs mkdir

Коман­ду xargs так­же мож­но исполь­зо­вать для одно­вре­мен­но­го выпол­не­ния несколь­ких запросов.
Если вы про­ве­ри­те стра­ни­цы руко­вод­ства, вы най­де­те раз­дел, кото­рый дает вам аргу­мен­ты команд­ной стро­ки, как ука­за­но ниже.

Исполь­зуя xargs, мы попы­та­ем­ся дать коман­ду на выпол­не­ние несколь­ких запро­сов curl одновременно.

Коман­да Linux curl – это ути­ли­та команд­ной стро­ки, кото­рая исполь­зу­ет­ся для пере­да­чи файлов.

Она обес­пе­чи­ва­ет под­держ­ку мно­же­ства про­то­ко­лов, таких как HTTP, HTTPS, FTP, FTPS, SCP, TFTP и мно­гих других.

Пред­по­ло­жим, вы хоти­те полу­чить HTTP-заго­лов­ки веб-сай­та с помо­щью коман­ды curl.

Для это­го вам нуж­но будет вызвать коман­ду curl с фла­гом -I, за кото­рым сле­ду­ет URL-адрес, как пока­за­но далее на примере.

curl -I "https://test.ru"

Теперь вы толь­ко что отпра­ви­ли один запрос curl.

Пред­по­ло­жим, вы хоти­те выпол­нить 5 парал­лель­ных запросов?

Что­бы решить эту про­бле­му, исполь­зуй­те коман­ду xargs, как пока­за­но далее с коман­дой curl.

[root@centos7 ~]# xargs -I % -P 5 curl -I "https://sidmid.ru" < <(printf '%s\n' {1..10})

 

Кро­ме того, вы може­те запу­стить коман­ду пока­зан­ную ниже, что­бы добить­ся того же результата.

Как и в преды­ду­щем при­ме­ре, при­ве­ден­ная ниже коман­да выпол­ня­ет коман­ду curl 10 раз с 5 парал­лель­ны­ми запросами.

[root@centos7 ~]# seq 1 10 | xargs -n1 -P 5 curl -I "https://sidmid.ru"

Рас­смот­рим дру­гой пример.

Пред­по­ло­жим, вы хоти­те загру­зить 3 фай­ла одно­вре­мен­но с помо­щью коман­ды curl.

Пер­вым шагом будет сохра­не­ние URL-адре­сов в тек­сто­вый файл.

В дан­ном при­ме­ре у нас есть тек­сто­вый файл download.txt со сле­ду­ю­щи­ми URL-адресами.

Что­бы ска­чать эти фай­лы одно­вре­мен­но, выпол­ни­те сле­ду­ю­щую команду:

$ xargs -P 5 -n 1 curl -O < download.txt
Коман­да кур­лит каж­дую стро­ку в тек­сто­вом фай­ле 5 раз параллельно.

Флаг -n 1 гаран­ти­ру­ет, что коман­да curl счи­ты­ва­ет одну стро­ку при каж­дом выпол­не­нии коман­ды curl.