Как сделать curl запрос
cURL запросы в php
cURL — очень мощный инструмент, который позволяет передавать данные с помощью различных протоколов. Очень часто его используют для передачи данных между веб-сайтами. Как пример таких запросов можно привести взаимодействие с API или oAuth.
сURL безграничен в своих возможностях, начиная от базовых HTTP запросов, продолжая передачей данных через протокол FTP и т.д. Список протоколов, с которыми работает cURL: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP.
В этой статье мы рассмотрим разницу между передачей запроса методом GET и POST, разберем как работать с ответом и рассмотрим несколько частно используемых параметров
Основы
Настройки
Параметры cURL нужны для того, чтобы более точно сконфигурировать Ваш запрос. С помощью параметров можно получить те самые, почти безграничные, возможности работы с запросами.
Ниже приведен список часто используемых параметров, а их полный список можно просмотреть в документации php.
Параметр | Описание |
CURLOPT_RETURNTRANSFER | Возвращает ответ как строку (если передать true), вместо вывода на экран |
CURLOPT_CONNECTTIMEOUT | Позволяет задать количество секунд для ожидания соединения. |
CURLOPT_TIMEOUT | Задает количество секунд, которые будет выполняться запрос. |
CURLOPT_USERAGENT | Содержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе. |
CURLOPT_URL | URL, куда будет отправлен запрос. |
CURLOPT_POST | true, если нужно отправить POST запрос |
CURLOPT_POSTFIELDS | Массив параметров для POST запроса |
Как задавать параметры
Пример 1: Установим значение URL, куда будет отправлен запрос:
К слову, установить этот параметр можно в одну строку при инициализации ресурса:
Пример 2: Установим время выполнения запроса в 10 секунд:
Альтернативный способ задавать настройки
Отправка запроса cURL
Как написано выше, при помощи cURL можно отправлять различные запросы. В данной статье мы рассмотрим варианты отправки GET и POST запросов.
Отправить GET запрос
GET запрос используется по умолчанию. Как вы увидите в примере ниже, он достаточно прост для понимания.
Если есть необходимость использовать параметры, их можно просто перечислить в url: http://testsite.com/?param=value¶m2=value2
Отправим простой GET запрос с параметрами:
Отправка POST запроса
Синтаксис для GET и POST запросов немного отличается. В случае, если запрос не содержит параметров, разница будет только в параметре CURLOPT_POST (в POST этот параметр устанавливаем в true или 1). Если необходимо передавать параметры POST запроса, дополнительно указываем параметр CURLOPT_POSTFIELDS (массив, где название параметра — ключ массив).
В данном примере отправляется тот-же запрос, который рассматривался в выше, отличается лишь метод отправки.
Завершение запроса
Реальные примеры использования cURL
Давайте рассмотрим реальный пример отправки cURL запроса на языке php. Предлагаю подключиться к публичному API приватбанка и узнать курс валют на сегодня:
Код для этого примера будет выглядеть примерно следующим образом:
cURL в PHP: примеры POST, GET запросов с headers, cookie, JSON и многопоточностью
В этой статье мы рассмотрим эффективные приемы работы с cURL, отправление POST, GET и т.д. запросов, работу с cookie, заголовки, JSON а также в конце статьи будут некоторые полезные инструменты, которые могут значительно облегчить вам работу с HTTP запросами.
GET запрос при помощи cURL
Для того, чтобы отправить запрос, нужно создать объект при помощи функции curl_init(), а затем следует настроить его.
Все настройки, которые вы можете найти по этой ссылке. Там вы найдете опции, которые мы будем устанавливать функцией curl_setopt, в дальнейших примерах.
Пример простого GET запроса при помощи cURL:
Если в результате сервер вернет нам редирект, то мы по нему автоматически не перейдем. А иногда это бывает полезно. Чтобы cURL автоматически шел по редиректу нужно установить опцию CURLOPT_FOLLOWLOCATION.
С установленной опцией скрипт автоматически перейдет по вернувшемуся редиректу и вернет ответ уже с итоговой страницы.
POST запрос при помощи cURL
Теперь давайте отправим post запрос на адрес https://httpbin.org/anything
Отлично, с GET и POST запросами в cURL мы немного освоились. Теперь разберемся с заголовками, которые мы можем отсылать в запросе.
Заголовки устанавливаются при помощи опции CURLOPT_HTTPHEADER Чтобы получше узнать, для чего нужна эта опция давайте попробуем отправить POST запрос в формате JSON
cURL: POST запрос в формате JSON
Отличия конфигурации JSON запроса от обычного POST запроса заключается в том, что мы кодируем поля при помощи json_encode() И добавляем заголовок Content-Type: application/json
cURL: GET запрос в формате JSON
GET запрос в формате JSON отправляется так же как и POST запрос, просто нужно CURLOPT_CUSTOMREQUEST установить в ‘GET’
cURL и другие виды HTTP запросов: PUT, DELETE, HEAD, PATCH, OPTIONS, CONNECT и т.д.
Стоп, Дмитрий, прекрати выдумывать виды запросов!
Ничего я не выдумываю: HTTP протокол предполагает множество типов HTTP запросов просто POST и GET являются более распространенными.
Чтобы отправить PUT запрос, нужно установить опцию CURLOPT_PUT таким образом:
Это делается по тому же принципу, как и CURLOPT_POST. Но что делать с остальным зоопарком запросов? Разве у cURL есть CURLOPT_DELETE или CURLOPT_HEAD? Нет.
Для того, чтобы отправлять другие виды запросов есть другая опция: CURLOPT_CUSTOMREQUEST
Вместо строки curl_setopt($curl, CURLOPT_POST, true); мы явно задаем имя запроса опцией CURLOPT_CUSTOMREQUEST:
Замечание: Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.
Как получить заголовки ответа
В предыдущем примере мы научились посылать заголовки. Самый правильный способ принять заголовки:
Иногда можно встретить другой вариант получения заголовков ответа. К сожалению, они не совсем правильные и могут работать некорректно в некоторых случаях.
Рассмотрим такой пример:
Мы сначала определяем размер заголовка, с помощью CURLINFO_HEADER_SIZE затем вырезаем его из ответа. К сожалению, это может не срабатывать, когда используется прокси или в некоторых случаях редиректа.
Скачивание больших файлов с помощью cURL
Для того, чтобы скачать большой файл пригодится этот способ:
Обратите внимание, если вы будете использовать file_get_contents для скачивания файлов, то файл сначала загружается в оперативную память, а потом сохраняется на диск. Поэтому если файл действительно большой, то скорее всего вашему серверу не хватит памяти. Также к памяти будет требователен следующий код:
Здесь мы скачиваем файл при помощи cURL в оперативную память, а затем сохраняем его на диск. Не смотря на то, что этот способ не годится для скачивания больших файлов, с помощью него можно вполне сохранить простую веб страницу.
Параллельные cURL запросы в PHP
Для чего могут потребоваться многопоточные запросы? Например у нас есть много URL адресов:
И если мы будем по очереди отправлять запросы, то второй запрос начнется только после того, как закончился первый и так далее, а это существенно увеличивает время работы скрипта.
Как выполнить 3 запроса одновременно? В этом нам поможет curl_multi_
Давайте решим конкретную задачу при помощи параллельных curl запросов. Нам нужно отправить одновременно 3 запроса.
Такие параллельные запросы выполняются значительно быстрее чем поочередные.
cURL запросы с сохранением и загрузкой cookie из файла
cURL позволяет нам установить cookie при передачи запросов, а также автоматически принимать и устанавливать cookie, которые нам возвращает сервер, сохраняя их между запросами.
Давайте рассмотрим такой пример:
Теперь cookie у нас хранятся в файле cookie.txt в директории со скриптом (если вы ничего не меняли). Если мы совершаем повторные запросы, то cURL автоматически берет и отправляет cookie на сервер, как и обычный браузер. Таким образом мы можем авторизироваться на сайте и сохранить сеанс между запросами.
Передача cookie без файлов
Иммитация браузера с помощью cURL
Иногда сайт, к которому мы обращаемся может фильтровать запросы, защищаясь от парсинга. Если для этого используются упрощенные способы защиты, например проверка User-Agent, то мы можем легко притвориться, что являемся реальным польователем, который взаимодействует с сайтом через браузер, мы можем послать заголовки и cookie, которые обычно посылает браузер.
В данном примере установлены заголовки, которые посылает Chrome.
В простых ситуациях этого хватает. Но если используется защита при помощи javascript или что-то более продвинутое, то здесь cURL бессилен, и следует использовать либо BAS либо Zennoposter. Либо если вы хотите попытать счастье с PHP, то Selenium.
Не используйте эти знания в противоправных целях.
cURL запросы через прокси
Простой пример для отправки запросов через proxy. Если ваш прокси предполагает авторизацию, то раскомментируйте соответствующие строчки.
Отправка файлов
Авторизация с помощью cURL
HTTP Авторизация
Чтобы с помощью cURL авторизироваться на сайте, который использует Basic HTTP-аутентификацию нужно установить опцию CURLOPT_USERPWD, в которой будет наш логин и пароль.
OAuth авторизация
Авторизация через форму
Давайте применим полученные нами знания и авторизируемся на каком-нибудь сайте. Для этого нужно посмотреть куда форма отправляет данные и отправить туда то же самое.
Допустим на сайте есть такая форма:
Тогда наш cURL запрос должен быть сформирован так:
Автоматическое построение запросов
Перевод консольной команды curl в PHP
И вот еще один сервис, который переводит консольную команду curl в PHP: https://incarnate.github.io/curl-to-php/
Так вы можете создать простые запросы на cURL в PHP не создавая их вручную.
Лайфхак
В консоли браузера, во вкладке сеть, вы можете кликнуть правой кнопкой мыши и скопировать любой запрос в виде команды cURL, а потом с помощью сервиса curl-to-php перевести запрос в PHP. Теперь вы вообще можете сконвертировать в cURL абсолютно любой запрос, который посылает ваш браузер.
Как работать с cURL гораздо проще
Вы можете спросить: почему у cURL такие кривые и страшные методы? У вас может возникнуть желание взять и создать обертку для работы с cURL, чтобы вы могли не писать каждый раз большие куски некрасивого кода, а писать все проще, например так:
К счастью, такая обертка уже написана и найти ее можно здесь: https://github.com/php-curl-class/php-curl-class
Просто установите ее при помощи: composer require php-curl-class/php-curl-class и не работайте с кривыми кусками кода, которые таковы вероятно потому, что cURL изначально консольное приложение.
POST и GET запросы без cURL
С помощью PHP мы можем отправить простой GET запрос используя функцию file_get_contents.
При помощи file_get_contents мы также можем отправить POST запрос.
Подробнее о том, какие опции можно передавать в stream_context_create, вы можете изучить здесь: http://docs.php.net/manual/ru/context.http.php
Другие инструменты для работы с запросами в PHP
Для работы с запросами есть еще более мощный инструмент: Guzzle
Несколько примеров на Guzzle
GET запросы на Guzzle
Разные типы запросов на Guzzle
Асинхронные запросы на Guzzle
Если интересно, то читайте: Guzzle Quick Start
Пишите комментарии, если что-то осталось непонятно.
Как пользоваться curl
Нам часто приходится загружать различные файлы из интернета, например, исполняемые файлы программ, файлы скриптов, архивы с исходниками. Но не всегда это нужно делать через браузер. Во многих ситуациях гораздо проще выполнить все действия через терминал. Поскольку таким образом вы можете автоматизировать процесс. С другой стороны, веб-мастерам время от времени приходится тестировать доступность веб-сайтов, проверять отправляемые и получаемые заголовки и многое другое.
Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.
Что такое curl?
Команда curl
Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:
$ curl опции ссылка
Теперь рассмотрим основные опции:
Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.
Как пользоваться curl?
Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.
Загрузка файлов
Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:
Если загрузка была неожиданно прервана, вы можете ее возобновить:
Если нужно, одной командой можно скачать несколько файлов:
Данная команда скачает файл, только если он был изменен после 21 декабря 2017.
Ограничение скорости
Передача файлов
Или проверим отправку файла по HTTP, для этого существует специальный сервис:
В ответе утилита сообщит где вы можете найти загруженный файл.
Отправка данных POST
Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.
Передача и прием куки
Затем можно отправить cookie curl обратно:
Передача и анализ заголовков
Аутентификация curl
Точно так же будет выполняться аутентификация на серверах HTTP.
Использование прокси
Выводы
В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.
Глубокое понимание curl
Почти каждый API показывает, как взаимодействовать с API с помощью curl. Поэтому, прежде чем двигаться дальше, давайте немного остановимся и узнаем больше о curl.
Почему curl?
Каждый язык программирования имеет свой способ совершать веб-вызовы. Вместо того, чтобы тратить силы, пытаясь показать, как совершать веб-вызовы на Java, Python, C ++, JavaScript, Ruby и т.д., можно просто использовать curl.
curl предоставляет общий, независимый от языка способ демонстрации HTTP-запросов и ответов. Пользователи могут видеть формат запроса, включая любые заголовки и другие параметры. Можно перевести результат в определенный формат для используемого языка.
Используем curl для получения веб-страницы
Как упоминалось ранее, одна из причин, по которой API REST настолько знакомы, заключается в том, что REST следует той же модели, что и веб (см. Что такое REST API?). При вводе http-адреса в адресную строку браузера мы говорим браузеру сделать HTTP-запрос к ресурсу на сервере. Сервер возвращает ответ, а наш браузер преобразует ответ в более визуальное отображение. Но мы также можем увидеть и сырой код.
Чтобы увидеть пример того, как curl извлекает веб-ресурс, откройте терминал и введите следующее:
Запросы и ответы содержат заголовки
При вводе адреса веб-сайта мы видим только текст ответа. Но на самом деле происходит гораздо больше процессов. Когда мы делаем запрос, мы отправляем заголовок запроса, который содержит информацию о запросе. Ответ также содержит заголовок ответа.
Заголовок будет включен над телом ответа:
При посещении веб-сайта мы отправляем запрос, используя метод GET. Существуют и другие методы HTTP, которые можно использовать при взаимодействии с REST API. Вот общие методы, используемые при работе с конечными точками REST:
HTTP метод | Описание |
---|---|
POST | Создание ресурса |
GET | Чтение (получение) ресурса |
PUT | Обновление ресурса |
DELETE | Удаление ресурса |
Распаковка curl запроса API сервиса прогноза погоды
Рассмотрим подробнее запрос, который сделали в API сервиса прогноза погоды в предыдущем разделе Создание curl запроса:
У curl есть сокращенные имена для различных опций, которые вы включаете в свой запрос.
Вот расшифровка команд:
Строки запроса и параметры
Общие команды curl, связанные с REST
У curl много возможных команд, но при работе с REST API наиболее распространены следующие:
В документации curl есть полный список команд curl.
Пример curl команды
Вот пример запроса curl, который объединяет некоторые из этих команд:
Запрос также может быть отформатирован с разрывом строки, чтобы быть более читабельным:
Разрывы строк является проблемой для Windows, поэтому лучше не форматировать запросы curl.
Заголовок Accept сообщает серверу, что в ответе мы принимаем только формат JSON.
👨💻 Опрос
Проверьте свою внимательность. Что означают следующие параметры?
Для более подробного изучения curl в документировании REST API можно посмотреть REST-esting with curl.
Как сделать POST-запрос с помощью cURL
Главное меню » Linux » Как сделать POST-запрос с помощью cURL
cURL используется разработчиками для тестирования API, просмотра заголовков ответов и выполнения HTTP-запросов.
В этой статье мы собираемся объяснить, как использовать cURL для выполнения запросов POST. Метод HTTP POST используется для отправки данных на удаленный сервер.
Создание POST-запроса
Общая форма команды curl для выполнения запроса POST выглядит следующим образом:
Тип тела запроса указывается его заголовком Content-Type.
Обычно запрос POST отправляется через форму HTML. Данные, отправляемые в форму, обычно закодированы в виде multipart/form-data или типе содержимого application/x-www-form-urlencoded.
Указание типа контента
Загрузка файлов
Чтобы POST файл с curl, просто добавьте символ @ перед местоположением файла. Файл может быть архивом, изображением, документом и т. д.
Вывод
Мы показали вам, как использовать curl для выполнения запросов POST. Для получения дополнительной информации curl посетите страницу 5 примеров использования команды Curl.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.