Все о 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¶m2=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. Я надеюсь, что она была полезной и что вам понравилась эта статья так же, как мне понравилось писать о ней.