Curl передать файл post
Нам часто приходится загружать различные файлы из интернета, например, исполняемые файлы программ, файлы скриптов, архивы с исходниками. Но не всегда это нужно делать через браузер. Во многих ситуациях гораздо проще выполнить все действия через терминал. Поскольку таким образом вы можете автоматизировать процесс. С другой стороны, веб-мастерам время от времени приходится тестировать доступность веб-сайтов, проверять отправляемые и получаемые заголовки и многое другое.
Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.
Что такое curl?
Поддержка библиотеки curl была добавлена в множество различных языков программирования и платформ. Утилита curl - это независимая обвертка для этой библиотеки. Именно на этой утилите мы и остановимся в этой статье.
Команда curl
Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:
$ curl опции ссылка
Теперь рассмотрим основные опции:
Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.
Как пользоваться curl?
Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.
Загрузка файлов
Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:
А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:
Если загрузка была неожиданно прервана, вы можете ее возобновить:
Если нужно, одной командой можно скачать несколько файлов:
Еще одна вещь, которая может быть полезной администратору - это загрузка файла, только если он был изменен:
Данная команда скачает файл, только если он был изменен после 21 декабря 2017.
Ограничение скорости
Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:
Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:
Передача файлов
Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:
В ответе утилита сообщит где вы можете найти загруженный файл.
Отправка данных POST
Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:
Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:
Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.
Передача и прием куки
Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:
Передача и анализ заголовков
Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:
Аутентификация curl
Использование прокси
Если вам нужно использовать прокси сервер для загрузки файлов, то это тоже очень просто. Достаточно задать адрес прокси сервера в опции -x:
Выводы
В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.
Главное меню » Linux » Как сделать POST-запрос с помощью cURL
Создание POST-запроса
Общая форма команды curl для выполнения запроса POST выглядит следующим образом:
Тип тела запроса указывается его заголовком Content-Type.
Обычно запрос POST отправляется через форму HTML. Данные, отправляемые в форму, обычно закодированы в виде multipart/form-data или типе содержимого application/x-www-form-urlencoded.
Чтобы создать запрос POST, используйте параметр -F, а затем пару field=value. В следующем примере показано, как сделать POST-запрос к форме с полями «name» и «email»:
Когда опция -F используется, curl отправляет данные, используя multipart/form-dataContent-Type.
Если опция -d используется более одного раза, вы можете объединить данные, используя символ &:
Указание типа контента
Чтобы установить определенный заголовок или тип содержимого, используйте параметр -H. Следующая команда устанавливает тип запроса POST application/json и отправляет объект JSON:
Загрузка файлов
Чтобы POST файл с curl, просто добавьте символ @ перед местоположением файла. Файл может быть архивом, изображением, документом и т. д.
Вывод
Мы показали вам, как использовать curl для выполнения запросов POST. Для получения дополнительной информации curl посетите страницу 5 примеров использования команды Curl.
Читать 7 инструментов командной строки, которые сделают вашу жизнь прощеЕсли у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Я знаю достаточно много примеров, где для получения сторонних web-страниц (парсеры) использовались совершенно другие способы, отличные от cURL. Например:
Принцип работы cURL
При использовании cURL-запросов существует 4 основных шага, которые должны (обязаны) быть в вашем скрипте, это:
- Инициализация
- Назначение параметров
- Выполнение и выборка результата
- Освобождение памяти
Без любого из этих шагов ваш скрипт обречен на неудачу. Итак, основные шаги:
Думаю что все шаги вам понятны за исключением второго: "Указания параметров". На этом шаге мы остановимся более подробно, т.к. именно он задает все необходимые настройки / параметры / методы.
Ошибки в ходе работы скрипта
Дабы не нагружать сервер дальнейшими вычеслениями, всегда проверяйте результат выполнения функции curl_exec:
Отмечу, что знак сравнения здесь '===', а не '==', т.е. сравнивается именно на наличие логического FALSE, а не пустой строки или строки 'false'.
Результат запроса
Ну а после того, как CURL-запрос был выполнен, неплохо бы было знать, что он вернул:
А вот какие еще даные мы можем получить:
Индекс массива | Значение | Индекс массива | Значение |
---|---|---|---|
url | string(17) "https://intop24.ru" | content_type | string(24) "text/html; charset=utf-8" |
http_code | int(200) | header_size | int(218) |
request_size | int(49) | filetime | int(-1) |
ssl_verify_result | int(0) | redirect_count | int(0) |
total_time | float(0.009419) | namelookup_time | float(1.3E-5) |
connect_time | float(1.3E-5) | pretransfer_time | float(1.4E-5) |
size_upload | float(0) | size_download | float(46523) |
speed_download | float(4939271) | speed_upload | float(0) |
download_content_length | float(-1) | upload_content_length | float(0) |
starttransfer_time | float(0.009374) | redirect_time | float(0) |
certinfo | array(0) | redirect_url | string(0) "" |
POST запрос с помощью CURL
Давайте напишем наш первый скрипт, который отправит данные методом POST на какую-нибудь страницу и посмотрит, что отобразилось на этой странице.
Теперь попробуем передать туда какие-то данные:
Результат можно посмотреть здесь: curl_post.php
Отправка файла с помощью CURL
Смысл здесь абсолютно такой же, как и в запросе POST.
Теперь попробуем передать туда какие-то данные:
Результат можно посмотреть здесь: curl_post_file.php
Загрузка файла - это тот же самый POST-запрос, однако перед путем к файлу стоит знак "@", что и обозначает, что нужно это передать не как $_POST, а как $_FILES.
Довольно полезная штука.
Запрос сURL через прокси
Понравилась или помогла статья? Самое лучшее, что ты можешь сделать - это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься - это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!
я пишу API и я хочу обрабатывать загрузку файлов из формы POST . Разметка для формы не слишком сложна:
однако у меня возникли трудности с пониманием того, как обрабатывать эту серверную сторону и отправлять вместе с запросом cURL.
я знаком с отправкой POST запросы с cURL с массивом данных, и ресурсы, которые я прочитал при загрузке файлов, говорят мне префикс имени файла с @ символ. Но эти же ресурсы жестко закодированное имя файла, например,
Ну, какой путь к файлу это? Где я его найду? Будет ли это что-то вроде $_FILES['image']['tmp_name'] в этом случае моя $post массив должен выглядеть так:
или я иду по неправильному пути? Любой совет был бы очень признателен.
EDIT: если бы кто-нибудь мог дать мне фрагмент кода, куда я бы пошел со следующими фрагментами кода, я был бы очень благодарен. Я в основном после чего я бы отправил как параметры cURL, так и пример того, как использовать эти параметры с принимающим скриптом (назовем его curl_receiver.php ради спора).
у меня есть эта веб-форма:
и это будет script.php :
вот рабочий код, который отправляет файл на FTP (может быть хорошим решением для вас):
для людей, находящих этот пост и использующих РНР5.5+, это может помочь.
я обнаружил, что подход, предложенный netcoder, не работает. т. е. это не работает:
Я бы получил в $_POST Варе 'uploaded_file' поле - и ничего $_FILES var.
оказывается, что для рнр5.5+ есть новый curl_file_create() функции нужно использовать. Так что вышеперечисленное стало бы:
как @ формат теперь устарел.
Это должно работать:
в получающем скрипте у вас будет:
затем, если вы хотите правильно обработать загрузку файла, вы должны сделать что-то вроде этого:
для моего символа @ не работает, поэтому я делаю некоторые исследования и нашел этот способ, и он работает для меня, я надеюсь, что это поможет вам.
объект cURL file в процедурном методе:
объект cURL file в методе ООП:
мы можем загрузить файл изображения по запросу curl, преобразовав его в строку base64.Поэтому в post мы отправим строку файла, а затем скроем это в образе.
затем отправьте его в curl request
print_r ($response); //print response
здесь вы должны работать хорошо, могут быть лучшие решения, но это работает и действительно полезно, чтобы понять, как граница и multipart/from-data mime работает на php и curl library,
Сначала cURL создавался исключительно для командной строки, но позже разработчиками PHP была написана библиотека, что значительно упростило использование этого инструмента PHP программистами.
Для того, чтобы построить более сложное взаимодействие, например:
- отправка формы;
- обработка ответа;
- передача, получение или удаление файла;
- отправка или получение cookie
Итак, как правильно построить cUrl запрос и какие есть типы запросов разберем далее.
Отправка cURL запроса PHP
Формирование cURL запроса состоит из четырех этапов:
- Инициализация
- Указание параметров
- Выполнение команды и получение результата
- Освобождение памяти
Итак, как это должно выглядеть в коде:
Этапы 1,3 и 4 типовые для всех типов запросов. А на этапе 2, в зависимости от указанных параметров, как раз и формируется тот или иной тип запроса.
Получение информации о запросе cUrl
Чтобы получить исчерпывающую информацию о самом запросе используется функция curl_getinfo(). Главным образом эта информация полезна для отладки работы скрипта, в котором выполняются cURL запросы.
Функция возвращает данные в виде массива со следующими ключами:
GET запросы cUrl в PHP
Или можно использовать аналог через функцию file_get_contents():
POST запросы cUrl в PHP
Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:
Мульти запросы cURL в PHP
Обычно в скрипте PHP выполнение запросов cUrl производится последовательно, то есть друг за другом. Пока не вернется результат предыдущего запроса, новый не выполнится.
Одной из самых важных особенностью cURL в PHP является возможность осуществлять несколько асинхронных запросов одновременно.
Например, если нужно собрать независимые друг от друга данные с разных сайтов, то можно организовать их параллельный сбор. Можно также произвести несвязанные вычисления или обработку данных через асинхронные запросы к скриптам в отдельных файлах.
Эта особенность позволяет оптимизировать работу скрипта и сократить время его выполнения.
Функция curl_multi_exec() многократно вызывается в цикле с постусловием, где параметр $running имеет значение количества активных соединений.
Чем больше обработчиков в параллельной работе, тем больше сокращается время выполнения скрипта, поэтому нелишним будет внедрить привычку использовать эту возможность cURL в своих скриптах.
Отправка файлов на другой сервер используя cURL
Есть несколько вариантов передачи файлов между серверами.
Методом POST
Методом PUT
Методом FTP
Не смотря на то, что в PHP есть библиотека для работы с FTP, все же cURL также позволяет работать по этому протоколу напрямую.
Скачивание файлов
При передаче указателя на открытый файл в параметре CURLOPT_FILE результат выполнения скрипта записывается сразу в файл.
DELETE запрос для удаления файла
Запрос через proxy
Когда нужно сделать запрос, подменив при этом источник запроса на промежуточный адрес, то используйте опцию PROXY:
Для сохранения куки в файле необходимо указать путь к этому файлу в соответствующих параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.
Параметр CURLOPT_COOKIE используется для принудительной передачи значения куки:
Имитация браузера через запросы cURL в PHP
Многие сайты защищаются от парсинга, отслеживая данные переменных user agent, referer, cookie. На сервере проверяются эти данные и, если подозрений на парсинг нет, то возвращается страница сайта.
Так как запросы curl в php данные этих переменных не передают, то такая защита от парсинга сайта вернет ошибку 404 или 500. Чтобы этого не происходило, можно сымитировать запрос страницы из браузера, добавив, например, следующие заголовки:
Можно посмотреть через панель для разработчиков заголовки, которые передает браузер при обращение к страницам сайтов и использовать их для запроса cURL в PHP.
Basic Authorization
OAuth авторизация
Если на сайте реализована работа с OAuth протоколом авторизации, который позволяет
выдать права на действия, которые сам сайт сможет производить на другом ресурсе от
лица, авторизовавшегося и давшего это разрешение, пользователя, тогда запрос cURL в php будет выглядеть следующим образом:
Используя объемный арсенал возможностей, которые предоставляют запросы cURL в php, можно решить широкий круг задач, требующих использование кроссплатформенных запросов для выполнения действий или обмена данными между разными сайтами.
Читайте также: