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, мы попытаемся дать команду на выполнение нескольких запросов 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})
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
[root@centos7 ~]# xargs -I % -P 5 curl -I "https://sidmid.ru" < <(printf '%s\n' {1..10}) HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:46 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:46 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 05:59:46 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" |
Кроме того, вы можете запустить команду показанную ниже, чтобы добиться того же результата.
Как и в предыдущем примере, приведенная ниже команда выполняет команду curl 10 раз с 5 параллельными запросами.
[root@centos7 ~]# seq 1 10 | xargs -n1 -P 5 curl -I "https://sidmid.ru"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:24 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.5: Invalid argument HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.3: Invalid argument curl: (7) Failed to connect to 0.0.0.1: Invalid argument HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.4: Invalid argument HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.2: Invalid argument HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.6: Invalid argument HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.7: Invalid argument curl: (7) Failed to connect to 0.0.0.8: Invalid argument HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" HTTP/1.1 200 OK Server: nginx Date: Sat, 15 May 2021 06:01:25 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.3.26 Link: <https://sidmid.ru/wp-json/>; rel="https://api.w.org/" curl: (7) Failed to connect to 0.0.0.9: Invalid argument curl: (7) Failed to connect to 0.0.0.10: Invalid argument |
Предположим, вы хотите загрузить 3 файла одновременно с помощью команды curl.
Первым шагом будет сохранение URL-адресов в текстовый файл.
В данном примере у нас есть текстовый файл download.txt со следующими URL-адресами.
Чтобы скачать эти файлы одновременно, выполните следующую команду:
$ xargs -P 5 -n 1 curl -O < download.txt
Команда курлит каждую строку в текстовом файле 5 раз параллельно.
Флаг -n 1 гарантирует, что команда curl считывает одну строку при каждом выполнении команды curl.