Все о Curl и его возможностях!

Вступление:

cURL (сокращение от Client URL) - это программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности и поддержка, которые он предоставляет, ошеломляют, есть так много опций, которые можно передать ему, иногда вы просто теряетесь на странице руководства.

В этой статье представлены часто используемые команды в качестве удобного справочника, специфичного для протоколов HTTP / HTTPS. Это не замена справочной странице, это больше похоже на ее основные моменты.

curl - это инструмент для передачи данных с сервера или на сервер с использованием одного из поддерживаемых протоколов (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3. , POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP). Команда предназначена для работы без взаимодействия с пользователем. - справочная страница curl

Вы можете вызвать эту команду из своего терминала, не задумываясь о способах ее установки, поскольку она предустановлена ​​в большинстве операционных систем на базе Linux.

Случаи применения:

  • Нет доступа к браузеру
  • Внутри сценария оболочки
  • Чтобы протестировать вывод API

Я в основном использовал curl для последнего варианта использования. В наши дни я довольно часто использую это, иногда просто копируя и вставляя команды, которые я нашел в Интернете. Я хочу воспользоваться моментом и лучше понять его особенности, чтобы использовать его в полной мере, поэтому здесь я хочу поделиться некоторыми интересными вещами о curl, с которыми я столкнулся.

Команды:

1) Запрос страницы:

Если аргумент не передается явно, команда curl вызывает HTTP-запрос и отображает статическое содержимое страницы аналогично параметру просмотра исходного кода страницы в браузере.

curl www.google.com

2) Загрузите файл:

Есть два варианта загрузки и сохранения файла.

  • Загрузите файл и сохраните его с тем же именем (testfile.tar.gz)
curl -O https://testdomain.com/testfile.tar.gz
  • Загрузите файл и сохраните его под другим именем
curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz
  • Загрузите несколько файлов с помощью одной и той же команды curl, хотя в официальной документации это не рекомендуется.
curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz

3) Получить заголовки HTTP:

Если вам интересно узнать, какие заголовки включены в сервер, вы можете использовать параметр -I или — head. Это позволяет получать только заголовки документа с сервера.

curl -I https://www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Thu, 04 Jun 2020 15:07:42 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Thu, 04 Jun 2020 15:07:42 GMT
Cache-Control: private
Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure
Set-Cookie: <cookie_info>

4) Игнорировать недействительные или самоподписанные сертификаты:

Часто, когда вы тестируете конечную точку API, работающую на вашем тестовом экземпляре, у вас может быть самозаверяющий сертификат или недействительный. Каждое SSL-соединение, которое устанавливает curl, проверяется по умолчанию. Чтобы не позволять curl проверять действительность сертификата SSL и устанавливать небезопасное соединение для тестирования, можно использовать параметр -k или --insecure.

curl -k https://localhost/my_test_endpoint

5) Отправьте запрос POST:

Иногда при тестировании API вам нужно отправить ему какие-то параметры, особенно при выполнении запроса POST. При использовании curl для проверки запроса POST данные могут быть либо JSON, либо парой имя-значение.

curl --data "param1=test1&param2=test2" http://test.com

Или как обычный JSON:

curl  -H 'Content-Type: application/json' --data '{"param1":"test1","param2":"test2"}' http://www.test.com

Использование –data эквивалентно использованию -d, оба из них подразумевают, что сделанный запрос curl является HTTP-сообщением.

6) Укажите тип запроса:

По умолчанию curl выполняет HTTP-запрос на получение, если ему не передаются какие-либо данные. Если вы хотите просто обновить запись, а не воссоздавать, в curl есть опция, которая для этого пригодится. Параметр -X или —-request позволяет указать тип метода HTTP-запроса, который будет использоваться при обмене данными с сервером.

# updating the value of param2 to be test 3 on the record id 
curl -X 'PUT' -d '{"param1":"test1","param2":"test3"}' \http://test.com/1

7) Включите базовую аутентификацию:

Если конечная точка API находится за аутентификацией, что обычно имеет место, вы можете передать учетные данные при выполнении запроса с помощью параметра -u или -user. Если вы просто укажете имя пользователя, curl запросит пароль. Если эта опция используется несколько раз, только последний передается на сервер для аутентификации.

curl -u <user:password> https://my-test-api.com/endpoint1

8) Обновите разрешение имени:

Если вы хотите протестировать API перед развертыванием и хотите попасть в конечную точку на тестовой машине, а не на фактическую конечную точку, вы можете передать настраиваемое разрешение для этого запроса. Думайте об этом как об эквиваленте /etc/hosts host-resolution

curl --resolve www.test.com:80:localhost http://www.test.com/

9) Загрузите файл:

Загрузка файла через curl - это то, о чем я узнал совсем недавно. Я не был уверен, возможно ли это, но, видимо, это так. curl с -F option эмулирует заполненную форму, когда пользователь нажимает кнопку отправки. Этот параметр приводит к преобразованию данных POST с использованием Content-Type multipart / form-data.

curl -F @field_name=@path/to/local_file <upload_URL>

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

curl -F @field_name=@path/to/local_file @field_name=@path/to/local_file_2 <upload_URL>

10) Время подключения Curl:

Вы можете передать параметр -w для curl, чтобы отображать информацию в stdout после завершения передачи. Есть набор переменных, которые поддерживаются параметром -w, наиболее интересными параметрами являются получение общего времени, которое потребовалось для успешного выполнения запроса. Это удобно для синхронизации любых загрузок или загрузок, сделанных с помощью curl.

curl -w "%{time_total}\n" -o /dev/null -s www.test.com

Заключительные слова:

Вот некоторые из интересных вариантов, которые можно передать с помощью curl. Я надеюсь, что она была полезной и что вам понравилась эта статья так же, как мне понравилось писать о ней.