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

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


Команда 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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.ru/wp-json/>; rel="https://api.w.org/"

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

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

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

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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.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://test.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.











Report Page