Использование wget и curl в Linux
Загрузка файла
curl -L -O -o /home/toly/alpine.iso https://dlcdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-standard-3.15.4-x86_64.iso
#Продолжить прерванную загрузку
curl -L -O -o /home/toly/alpine.iso -C - https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-standard-3.15.4-x86_64.iso
-o Выбрать директорию для загрузки
-O Сохранять оригинальное имя файла
-Y 100 Ограничение Чтобы не перезагружать сеть загрузкой (Кб)
Отправка данных post
curl --data "login=Admin&password=Admin" http://netbash.ru
Сохранить заголовки ответов в файл
curl -D /tmp/curl.txt https://erp.tdx.by
curl -F Отправить данные в виде формы
Отправка данных методом GET
curl http://site.com?login=test&password=test
curl -I http://site.com #Получать только http заголовок, остальное игнорировать
curl -T login.txt ftp://speedtest.tele2.net/upload/ #Отослать файл на сервер
-s -S - Выводить информацию об ошибках
-z - Скачать файл, только если он был модифицирован позже указанного времени
-J - удалить заголовок из запроса
-L - Принимать и обрабатывать перенаправления
-p - Использовать прокси
--proto - Указать протокол который нужно использовать
Отправить заголовок и получить только заголовок
curl -I --header 'If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT' https://losst.ru
Рекурсивная загрузка сайта с помощью wget
#!/bin/bash
# Получить и сохранить cookies используя логин и пароль
wget --save-cookies ./cookies.txt \
--keep-session-cookies \
--post-data 'user=user&password=password' \
http://megasyte.ru/auth.php
# Используя полученные cookies скачать страницу
wget --load-cookies ./cookies.txt \
--mirror \
--recursive \
--page-requisites \
--no-clobber \
--html-extension \
--convert-links \
--restrict-file-names=windows \
--domains megasyte.ru \
--no-parent \
-p \
-P ./ \
http://megasyte.ru/page.php?id=1000
#--mirror - параметр для зеркального отображения. Эта опция включает рекурсию и отметку времени, устанавливает бесконечную глубину рекурсии и сохраняет списки каталогов FTP, эквивалентно ‘-r -N -l inf --no-remove-listing’.
#--recursive: загрузить весь веб-сайт.
#--domains site.org: не переходить по ссылкам за пределами site.org.
#--no-parent: не переходить по ссылкам вне каталога tutorials/html/.
#--page-requisites: получить все элементы, из которых состоит страница (изображения, CSS и т. д.).
#--html-extension: сохранять файлы с расширением .html.
#--convert-links: преобразовать ссылки, чтобы они работали локально, в автономном режиме.
#--restrict-file-names=windows: изменить имена файлов, чтобы они работали и в Windows.
#--no-clobber: не перезаписывать существующие файлы (используется, если загрузка прерывается и возобновляется).
#-p загрузить все файлы, необходимые для правильного отображения данной HTML-страницы.
#-P ./LOCAL-DIR: сохранить все файлы и каталоги в указанный каталог.
Загрузка страницы с помощью curl
В следующем примере утилита curl использует тот же cookie файл, что использовался выше утилитой wget:
curl --cookie ./cookies.txt http://megasyte.ru/page.php?id=1000
Статус ответа от сервера по доменному имени
#!/bin/bash
#Можно в этот же скрипт засунуть проверку сертификата на валидность https://www.ssllabs.com/ssltest/analyze.html
echo "Введите только название домена без протокола и пробелов:"
echo "Например: yandex.ru"
read name
#Убрать из текста все, что не буквы или цифры и не точка
validchars="$(echo $name | sed -e 's/[^[:alnum:]\.\/]//g')"
if [ $validchars != $name ]
then
{
echo "Вы неправильно ввели домен"
exit 1
}
fi
status="не определен"
status=`curl -s -o /dev/null -w "%{http_code}" https://$name`
echo "https://$name Статус: $status"
status=`curl -s -o /dev/null -w "%{http_code}" http://$name`
echo "http://$name Статус: $status"
status=`curl -s -o /dev/null -w "%{http_code}" https://www.$name`
echo "https://www.$name Статус: $status"
status=`curl -s -o /dev/null -w "%{http_code}" http://www.$name`
echo "http://www.$name Статус: $status"
POST запрос с помощью curl
В следующем примере извлекается токен из полученного post запроса, который в последующем используется для загрузки нужной страницы сайта
#!/bin/bash
#Запрос получения токена
request_token=$(curl --request POST \
--url https://megasyte.ru/api/v3/auth/access_token \
--header 'content-type: multipart/form-data;' \
--form username='a.user@mail.ru' \
--form password='password' \
--form grant_type=password) 1>/dev/null
#prefix=$1
#token=`echo $request_token | cut -d\" -f4`
#curl https://megasyte.ru/api/v3/$prefix?%7B%22access_token%22:%22$token%22%7D
Следующая команда покажет все перенаправления(переходы) с помощью опции -L и покажет только заголовки с помощью опции -i ( --include или -I, --head более короткий вариант )
curl -L --head --max-redirs 2 yandex.ru
Однако если сайт использует аутентификацию, передать эти данные при переходе на следующую страницу не получится
С помощью дополнительной опции --max-redirs можно указать максимальное возможное кол-во перенаправлений
Источники
Связанные темы
Использование команды tee в Linux
Команда chattr и lsattr в Linux
Использование awk Linux Alpine
Блокировка пользователя в Linux
Проверка на необходимость перезапуска после обновления пакетов
Стандартные потоки и перенаправление ввода/вывода в Linux
Архивирование и сжатие файлов в Linux
Полезные команды и скрипты Linux
Условная конструкция if в Linux
Использование оператора select в языке shell
Внутренние и внешние команды linux
Использование конструкции case в Linux