11 примеров использование команд cURL в режиме реального времени


Оглавление (нажмите, чтобы открыть):

5 основных примеров команды Curl

cURL может быть использован самыми различными и интересными способами. С помощью этого инструмента вы можете скачать, загрузить файлы и управлять ими, проверить свой адрес электронной почты, или даже обновлять свой статус на некоторых веб – сайтах социальных медиа или проверить погоду на улице. В этой статье мы рассмотрим пять наиболее полезных и основных видов использования инструмента cURL на любой Linux VPS.

1. Проверьте URL

Одним из наиболее распространенных и простейших применений cURL печатает саму команду, а затем URL, который вы хотите проверить

Эта команда будет отображать содержимое URL на вашем терминале

2. Сохраните вывод URL в файл

Выход команды cURL может легко сохранить в файл, добавив опцию -o в команде, как показано ниже

В этом примере, вывод будет сохранен в файл с именем ‘website’ в текущем рабочем каталоге.

3. Загрузка файлов с помощью Curl

Вы можете скачивать файлы при помощи Curl, путем добавления опции -o к команде. Он используется для сохранения файлов на локальном сервере с теми же именами, как и на удаленном сервере

В этом примере архив ‘file.zip’ будет загружен в текущий рабочий каталог.

Вы также можете загрузить файл с другим именем, добавив опцию -o к cURL.

Таким образом, архив ‘file.zip’ будет загружен и сохранен как ‘Archive.zip’.

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

Curl также можно использовать для загрузки файлов надежно через SSH с помощью следующей команды

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

4. Взять информацию из заголовка HTTP веб-сайта

Вы можете легко получить информацию заголовка HTTP из любого веб-сайта, добавив опцию -I (‘i’) к cURL.

5. Доступ к FTP-серверу

Чтобы получить доступ к FTP-серверу с помощью Curl, надо использовать следующую команду

Curl будет подключаться к FTP-серверу и выведет список всех файлов и каталогов в домашнем каталоге пользователя

Вы можете скачать файл с помощью FTP

и загрузить файл на сервер FTP

Вы можете проверить страницу Curl вручную, чтобы увидеть все доступные опции cURL и его функциональные возможности

PS. Если вам понравился этот пост, пожалуйста поделитесь им с друзьями в социальных сетях с помощью кнопок ниже или просто оставьте комментарий. Благодарю.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Примеры использования cURL в PHP

GET запрос

POST запрос

file_get_contents() так же умеет отправлять POST запросы:

PUT запрос

DELETE запрос

HTTP-метод DELETE используется в REST API для удаления объектов.

Отправка файлов на другой сервер

Отправка файлов осуществляется методом POST :


С PHP 5.5 такой метод загрузки файлов вызывает ошибку, поэтому следует применять CURLFile.

Также через curl можно отправить сразу несколько файлов:

Еще файлы можно отправить методом PUT , например так загружаются файлы в REST API Яндекс Диска.

Скачивание файлов

Curl позволяет сохранить результат сразу в файл, указав указатель на открытый файл в параметре CURLOPT_FILE .

Отправить и получить cookie

Чтобы CURL сохранял куки в файле достаточно прописать его путь в параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR .

Передать значение кук можно принудительно через параметр CURLOPT_COOKIE .

Имитация браузера

На многих сайтах есть защита от парсинга. Она основана на том что браузер передает серверу user agent , referer , cookie . Сервер проверяет эти данные и возвращает нормальную страницу. При подключение через curl эти данные не передаются и сервер отдает ошибку 404 или 500. Чтобы имитировать браузер нужно добавить заголовки:

HTTP авторизация

Если на сервере настроена HTTP авторизация, например с помощью .htpasswd, подключится к нему можно с помощью параметра CURLOPT_USERPWD .

cURL — это просто

Технология cURL

cURL — это технология, которая предназначена для передачи/получения данных посредстов URL. Технология cURL поддерживает такие распространенные протоколы, как HTTP, FTP, HTTPs и другие. Изначально cURL был инструментом командной строки, однако разработчики PHP не поленились и создали библиотеку в PHP, чем облегчили жизнь миллионам программистам. Давайте попробуем вместе разобраться с технологией cURL на примерах. Советую читать всё и по порядку.

Я знаю достаточно много примеров, где для получения сторонних web-страниц (парсеры) использовались совершенно другие способы, отличные от cURL. Например:

  • file_get_contents(«http://intop24.ru»);
  • file(«http://intop24.ru»);
  • readfile(«http://intop24.ru»);

Почему разработчики использовали их и что в них не так? А потому, что не знали, либо не хотели знать, что такое cURL. А не так в них то, что функционал ограничен: получили страницу и все на этом, в то время, как cURL может отправить форму на странице, получить ответ, обработать ошибку, начать всё занова и т.д.

Принцип работы cURL

При использовании cURL-запросов существует 4 основных шага, которые должны (обязаны) быть в вашем скрипте, это:

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

Без любого из этих шагов ваш скрипт обречен на неудачу. Итак, основные шаги:

Думаю что все шаги вам понятны за исключением второго: «Указания параметров». На этом шаге мы остановимся более подробно, т.к. именно он задает все необходимые настройки/параметры/методы.

Ошибки в ходе работы скрипта

Дабы не нагружать сервер дальнейшими вычеслениями, всегда проверяйте результат выполнения функции curl_exec:

Отмечу, что знак сравнения здесь ‘===’, а не ‘==’, т.е. сравнивается именно на наличие логического FALSE, а не пустой строки или строки ‘false’.

Результат запроса

Ну а после того, как CURL-запрос был выполнен, неплохо бы было знать, что он вернул:

А вот какие еще даные мы можем получить:

Индекс массива Значение Индекс массива Значение
url string(17) «http://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 на какую-нибудь страницу и посмотрит, что отобразилось на этой странице.


Сначала нам нужен файл, который бы принял наши данные и что-то вывел на страницу. Я расположил его по адресу http://intop24.ru/demo/curl/post.php. В нем содержится следующий код:

Теперь попробуем передать туда какие-то данные:

Результат можно посмотреть здесь: curl_post.php

Отправка файла с помощью CURL

Смысл здесь абсолютно такой же, как и в запросе POST.

Файл, который примет данные: http://intop24.ru/demo/curl/upload_file.php.

Теперь попробуем передать туда какие-то данные:

Результат можно посмотреть здесь: curl_post_file.php

Загрузка файла — это тот же самый POST-запрос, однако перед путем к файлу стоит знак «@», что и обозначает, что нужно это передать не как $_POST, а как $_FILES.

HTTP аутентификация с помощью CURL

Довольно полезная штука.

Запрос сURL через прокси

Понравилась или помогла статья? Самое лучшее, что ты можешь сделать — это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься — это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!

Взаимодействие через Интернет с помощью CURL и libcurl

Применение libcurl с языками C и Python

Разрабатывать приложения, опирающиеся на протоколы уровня приложений, такие как HTTP и FTP, не очень трудно, но и не тривиально. К тому же такая разработка не находится в центре внимания, поскольку в большинстве случаев гораздо важнее то, что лежит выше этих протоколов. Libcurl как раз и интересен тем, что делает акцент на приложение, а не на преходящий аспект разработки. Отметим, что не многие приложения имеют свой собственный стек TCP/IP – ведь повторное использование всего, что только можно, минимизирует нагрузку на программиста и повышает надежность приложения.

Эта статья начинается с краткого введения в протоколы прикладного уровня, а затем переходит к изучению cURL, libcurl и их применению.

Web-протоколы

Разработка современных приложений существенно отличается от того, что было в недавнем прошлом. Сегодня приложения должны поддерживать связь через сеть или Интернет, предоставляя в распоряжение пользователей сетевой API или интерфейс, а также обеспечивать гибкость посредством пользовательских сценариев. Как правило, современные приложения экспортируют Web-интерфейс с помощью HTTP и передают уведомления о нештатных ситуациях посредством Simple Mail Transport Protocol (SMTP). Эти протоколы позволяют передавать Web-браузеру, работающему в устройстве, конфигурацию или статус и принимать от устройств стандартные сообщения на стандартный клиент электронной почты (соответственно через HTTP и SMTP).

Эти Web-сервисы, как правило, построены поверх уровня сокетов стека сетевых протоколов (рисунок 1). Уровень сокетов реализует API, который восходит к операционной системе Berkeley Software Distribution (BSD) и изолирует детали нижележащих протоколов транспортного и сетевого уровней.

Рисунок 1. Стек сетевых протоколов и libcurl

Web-сервисы обеспечивают взаимодействие между протоколами клиента и сервера. В контексте HTTP сервер – это оконечное устройство, а клиент – браузер в удаленной точке. Для SMTP сервер – это почтовый шлюз или удаленный пользователь, а клиент – оконечное устройство. В некоторых случаях взаимодействие протоколов происходит в два этапа (запрос и ответ), а в других для поддержания связи требуется гораздо больше трафика. Такое взаимодействие может создать значительные трудности, которые преодолеваются с помощью API, таких как libcurl.

Введение в cURL

Происхождение и содержание cURL

cURL предложил Даниель Штенберг, но вклад в разработку внесли свыше 600 программистов. Бесспорно, это полезная технология с широкой областью применения.

Первоначально cURL разработан как средство перемещения файлов между конечными точками с использованием различных протоколов, таких как FTP, HTTP, SCP и другие. Сначала это была утилита командной строки, но теперь это также библиотека с привязками более чем к 30 языкам. Так что теперь, вместо того чтобы использовать cURL из командной строки, можно создавать приложения, которые включают в себя эти важные функции. Библиотека libcurl также переносима и поддерживает Linux®, IBM® AIX®, BSD, Solaris и многие другие варианты UNIX®.

Получение и установка cURL/libcurl

Получить и установить libcurl легко, но процесс зависит от дистрибутива Linux. На Ubuntu эти пакеты можно установить с помощью утилиты apt-get . Две следующие строки показывают, как установить libcurl и Python-привязки для libcurl:

Утилита apt-get гарантирует соблюдение всех зависимостей в процессе установки.

cURL в командной строке

cURL начинался как инструмент командной строки для передачи данных с использованием синтаксиса Uniform Resource Locator (URL). Ввиду популярности этой функции в форме командной строки была создана библиотека для ее интеграции в приложения. Сегодня cURL для командной строки служит оболочкой библиотеки cURL. Эта статья начинается с изучения cURL в командной строке, а затем углубляется в использование этой утилиты в качестве библиотеки.

Две типичных области применения cURL – это передача файлов с использованием протоколов HTTP и FTP. cURL предоставляет простой интерфейс к этим и другим протоколам. Чтобы извлечь файл из Web-сайта с помощью HTTP, достаточно указать cURL имя локального файла, в который нужно записать Web-страницу, а также URL Web-сайта и файл для передачи. Слишком много слов для той простой командной строки, которая приведена в листинге 1.

Листинг 1. Пример использования cURL для извлечения файла с Web-сайта

Обратите внимание: я указал домен, а не файл, так что получу корневой файл (index.html). Чтобы передать этот файл на сайт FTP с использованием cURL, нужно указать файл для загрузки с опцией -T , а затем ввести URL FTP-сайта и путь к файлу (листинг 2).

Листинг 2. Пример использования cURL для загрузки файла на FTP-сайт


Бывает ли проще? Достаточно освоить несколько простых моделей, и cURL окажется предельно простым в применении. Но многообразие имеющихся опций очень велико – запрос помощи из командной строки cURL ( —help ) выводит 129 строк. Большое число опций позволяет управлять всем – от многословия до безопасности и различных зависящих от протокола настраиваемых элементов.

С точки зрения разработчика, это не самый приятный аспект cURL. Углубимся в библиотеку cURL и посмотрим, как добавить эти протоколы передачи файлов в свое приложение.

cURL как библиотека

Если вы наблюдали за языками сценариев на протяжении последних 10 лет, то заметили явные изменения в их составе. Такие языки сценариев, как Python, Ruby, Perl и многие другие включают не только уровень сокетов, как C или C++, но и интерфейсы протокола прикладного уровня. Эти языки сценариев содержат высокоуровневые функции, которые делают тривиальным, например, создание сервера или клиента HTTP. Библиотека libcurl добавляет функциональность, схожую с такими языками, как C и C++, но таким образом, что можно работать с множеством языков. Libcurl примерно одинаково ведет себя во всех языках, которые поддерживает, хотя, так как эти языки могут значительно различаться (C и Scheme), могут различаться и способы обеспечения этого поведения.

Библиотека libcurl включает в себя функции, которые иллюстрируются в листингах 1 и 2, в форме API, поэтому ее можно использовать в высокоуровневых языках (на сегодняшний день более 30). В этой статье представлены два примера применения libcurl. Первый исследует простой клиент HTTP на языке C (подходит для создания Web-пауков), а второй представляет собой простой клиент HTTP на Python.

HTTP-клиент на языке С

API для C обеспечивает два API поверх функциональности libcurl. Простой интерфейс – это простой синхронный API (т. е. при обращении к libcurl с запросом она выполняет его до конца или до сообщения об ошибке). Мультиинтерфейс обеспечивает контроль над libcurl, позволяя приложению выполнять несколько одновременных передач и управлять тем, куда и когда libcurl переносит данные.

В этом примере используется простой интерфейс. Этот API все же предоставляет некоторый контроль над процессом перемещения данных (с использованием функций обратного вызова), но при этом соответствует своему названию. В листинге 3 приводится пример на языке С для HTTP.

Листинг 3. Клиент HTTP на языке С с использованием простого интерфейса libcurl

В верхней части расположены необходимые файлы include , в том числе корневой файл cURL. Далее я определил пару переменных для передачи. Первая, wr_buf , представляет собой буфер, в который будут записываться входные данные. wr_index отражает индекс текущей записи буфера.

Опустимся к функции main , которая выполняет установку с помощью простого API. Все вызовы cURL проходят через указатель, который хранит состояние конкретного запроса. Он определен как CURL pointer reference. Этот пример создает также специальный возвратный код, называемый CURLcode . Перед использованием любых функций libcurl нужно вызывать curl_easy_init , чтобы получить указатель CURL . Далее обратите внимание на несколько вызовов функции curl_easy_setopt . Это настройки указателей для конкретной операции. Для этих вызовов вводится указатель, команда и опция. Сначала в этом примере применяется оператор CURLOPT_URL для задания URL извлекаемых данных. Затем следует CURL_WRITEDATA для создания контекстной переменной (в нашем случае это внутренняя переменная записи ошибок). Наконец, CURLOPT_WRITEFUNCTION определяет функцию, которую нужно вызвать при наличии данных. API вызовет эту функцию один или несколько раз с данными, считанными им после сигнала запуска.

Чтобы начать передачу, вызовите функцию curl_easy_perform . Ее задача заключается в выполнении передачи с учетом предварительно заданной конфигурации. При вызове этой функции она возвращает результат только после успешной передачи или ошибки. Последние элементы main предназначены для передачи возвращаемых статусов, запуска чтения страницы и, наконец, для очистки с помощью функции curl_easy_cleanup (по завершении операции).

Теперь рассмотрим функцию write_data . Эта функция обратного вызова, которая вызывается, когда данные по конкретной операции получены. Обратите внимание, что когда данные считываются с Web-сайта, они записываются к вам ( write_data ). Обратный вызов содержит буфер (с готовыми данными), число элементов и их размер (их произведение дает общий объем данных в буфере), а также указатель контекста. Первая задача заключается в том, чтобы обеспечить достаточную емкость буфера ( wr_buf ) для записи данных. В противном случае он устанавливает указатель контекста и возвращает ноль, что указывает на наличие проблемы. Иначе, он копирует данные из буфера cURL в ваш буфер и наращивает индекс, указывая на следующее место для записи. В этом примере строка завершается, так что впоследствии к нему можно применить printf . Наконец, он возвращает в libcurl количество обработанных байтов. Это говорит libcurl о том, что данные приняты, и их можно удалить. Вот и все – не правда ли, простой способ считать файл с Web-сайта в память?

HTTP-клиент на Python

В этом разделе приводится пример, подобный HTTP-клиенту на языке С, но на этот раз написанный на Python. Python – это полезный объектно-ориентированный язык сценариев, который отлично подходит для создания прототипов и коммерческого программного обеспечения. В примере предполагается, что вы немного знакомы с Python, но он используется очень мало, так что глубокие знания не потребуются.

Код простого HTTP-клиента, написанный на языке Python с использованием pycurl , приведен в листинге 4.

Листинг 4. HTTP-клиент на Python с использованием интерфейса pycurl из libcurl
Создание прототипа на Python

Здесь иллюстрируется одно из преимуществ языка Python при создании прототипов. Довольно широкая функциональность достигается при небольшом количестве кода. На С можно получить более высокую производительность, но если вашей целью является быстрое создание кода для проверки идеи, лучше воспользоваться высокоуровневыми языками сценариев, такими как Python.

Этот код значительно проще, чем версия на C. Он начинается с импортирования необходимых модулей (стандартного системного модуля sys и модуля pycurl ). Далее определяется буфер записи ( wr_buf ). Как и в программе на C, я декларирую функцию write_data . Обратите внимание, что эта функция принимает один аргумент: буфер данных, считанных с сервера HTTP. Я просто взял этот буфер и добавил его к глобальному буферу записи. Функция main начинает с создания указателя Curl , затем использует для записи методы setopt для определения URL и WRITEFUNCTION . Она вызывает метод perform для запуска передачи и закрывает указатель. Наконец, она вызывает функцию main и передает буфер записи в stdout . Обратите внимание, что в данном случае указатель ошибки контекста не нужен, поскольку используется конкатенация строк Python, а значит, не нужно использовать строку со статически заданным размером.

Что дальше

Эта статья лишь «скребет по поверхности» libcurl, учитывая огромное количество протоколов и языков, поддерживаемых библиотекой. Но, надеюсь, она демонстрирует, как легко создавать приложения, использующие протоколы уровня приложений, такие как HTTP. Web-сайт libcurl (см. раздел Ресурсы) содержит большое количество примеров и значительный объем полезной документации. Поэтому в следующий раз при разработке Web-браузера, спайдера или другого приложения, которому требуется протокол уровня приложения, попробуйте libcurl. Это наверняка ускорит процесс разработки, и вы получите от него удовольствие.

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи (EN).
  • cURL – инструмент на основе командной строки с библиотекой, реализующий многочисленные клиентские протоколы. Поддерживает более 12 протоколов, включая FTP, HTTP, Telnet, а также их защищенные варианты. cURL работает на нескольких платформах, включая Linux, AIX, BSD и Solaris, поддерживая более 30 языков.
  • PycURL – тонкая прослойка поверх libcurl API. Как тонкая прослойка, PycURL работает очень быстро. С помощью PycURL можно разрабатывать приложения на Python, использующие библиотеку libcurl.
  • Что касается гибкости приложений, то дополнительные сведения об интеграции возможностей сценариев в приложения можно почерпнуть в руководстве Scripting with Guile .
  • Следите за developerWorks в Твиттере.

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

8 примеров использования cURL вместе с PHP


cURL и его расширение для PHP libcURL являются очень полезными инструментами при решении таких задач, как имитация веб браузера, отправка форм или регистрация на веб сервисе. В данном уроке мы рассмотрим несколько интересных применений cURL совместно с PHP.

1. Проверяем доступность определённого веб сайта

Как узнать, доступен ли определённый веб сайт? cURL поможет ответить на данный вопрос. Данный скрипт можно использовать совместно с планировщиком для мониторинга сайта.

Замените URL в строке 3 на тот, который вам нужен. Скопируйте код на свою страницу, и станет известно, доступен ли указанный сайт.

2. Замена cURL для функции file_get_contents()

Функция file_get_contents() очень полезная, но на многих хостингах она отключена. С помощью cURL можно написать функцию, которая будет работать в точности как file_get_contents() .

3. Получаем последний статус Twitter

С помощью PHP и cURL очень просто получить статус определённого пользователя. Данную информацию можно выводить в блоге.

Использовать функцию очень просто:

4. Twitter: проверяем отношения между двумя пользователями

Если вам нужно узнать, читает ли ваши твиты определенный пользователь, то можно задействовать API Twitter. Данный скрипт выводит true , если два пользователя, указанные на строчках 17 и 18, находятся в дружеских отношениях на Twitter. В противном случае возвращается false .

5. Загружаем и сохраняем изображения со страницы с помощью cURL

Данная функция может быть очень полезна: задаем ей URL страницы и она сохраняет все изображения с нее на вашем сервере.

6. Конвертируем валюту с помощью cURl и Google

Пересчет валюты достаточно простое дело, но курсы достаточно часто изменяются, поэтому приходится использовать сервисы, подобные Google, для получения текущих значений курса пересчета. Функция currency() получает 3 параметра: исходная валюта, целевая валюта и сумма.

7. Получаем информацию о размере файла с помощью cURL

Как определить размер определенного файла, расположенного на другом сервере? Поможет следующая функция. Она получает 3 параметра: URL файла, и (если требуется) имя пользователя и пароль.

8. Загрузка через FTP с помощью cURL

PHP имеет библиотеку FTP library, но также можно использовать cURL для загрузки файлов на FTP сервер. Вот рабочий пример:

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.catswhocode.com/blog/amazing-things-to-do-with-php-and-curl
Перевел: Сергей Фастунов
Урок создан: 14 Февраля 2012
Просмотров: 114455
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Утилита командной строки CURL

CURL — утилита командной строки для Linux или Windows, поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах сайтов и других операций с URL адресами. Поддержка CURL добавлена в множество различных языков программирования и платформ.

Для начала скачаем саму утилиту, для этого переходим на официальный сай утилиты, в раздел Download. После скачивания архива для своей платформы (у меня это Windows 64 bit), распаковываем архив. Чтобы иметь возможность работать с HTTPS и FTPS, устанавливаем сертификат безопасности url-ca-bundle.crt , который находится в папке curl/bin .


Запускаем командную строку, переходим в директорию curl/bin и пытаемся скачать главную страницу Google:

Опция -X позволяет задать тип HTTP-запроса вместо используемого по умолчанию GET. Дополнительные запросы могут быть POST, PUT и DELETE или связанные с WebDAV — PROPFIND, COPY, MOVE и т.п.

Следовать за редиректами

Сервер Google сообщил нам, что страница google.com перемещена (301 Moved Permanently), и теперь надо запрашивать страницу www.google.com . С помощью опции -L укажем CURL следовать редиректам:

Сохранить вывод в файл

Чтобы сохранить вывод в файл, надо использовать опции -o или -O :

  • -o ( o нижнего регистра) — результат будет сохранён в файле, заданном в командной строке;
  • -O ( O верхнего регистра) — имя файла будет взято из URL и будет использовано для сохранения полученных данных.

Сохраняем страницу Google в файл google.html :

Сохраняем документ gettext.html в файл gettext.html :

Загрузить файл, только если он изменён

Опция -z позволяет получить файлы, только если они были изменены после определённого времени. Это будет работать и для FTP и для HTTP. Например, файл archive.zip будет получен, если он изменялся после 20 августа 2020 года:

Команда ниже загрузит файл archive.zip , если он изменялся до 20 августа 2020 года:

Прохождение аутентификации HTTP

Опция -u позволяет указать данные пользователя (имя и пароль) для прохождения базовой аутентификаци (Basic HTTP Authentication):

Получение и отправка cookie

Cookie используются сайтами для хранения некой информации на стороне пользователя. Сервер сохраняет cookie на стороне клиента (т.е. в браузере), отправляя заголовки:

А браузер, в свою очередь, отправляет полученные cookie обратно на сервер при каждом запросе. Разумеется, тоже в заголовках:

Передать cookie на сервер, как будто они были ранее получены от сервера:

Чтобы сохранить полученные сookie в файл:

Затем можно отправить сохраненные в файле cookie обратно:

Файл cookie.txt имеет вид:

Получение и отправка заголовков

По умолчанию, заголовки ответа сервера не показываются. Но это можно исправить:

Если содержимое страницы не нужно, а интересны только заголовки (будет отправлен HEAD запрос):

Посмотреть, какие заголовки отправляет CURL при запросе, можно с помощью опции -v , которая выводит более подробную информацию:

  • Строка, начинающаяся с > означает заголовок, отправленный серверу
  • Строка, начинающаяся с означает заголовок, полученный от сервера
  • Строка, начинающаяся с * означает дополнительные данные от CURL

А вот так можно отправить свой заголовок:

Отправка данных методом POST

Команда ниже отправляет POST запрос на сервер аналогично тому, как пользователь, заполнив HTML форму, нажал бы кнопку «Отправить». Данные будут отправлены в формате application/x-www-form-urlencoded .

Параметр —data аналогичен —data-ascii , для отправки двоичных данных необходимо использовать параметр —data-binary . Для URL-кодирования полей формы нужно использовать —data-urlencode .

Если значение опции —data начинается с @ , то после него должно быть имя файла с данными (или дефис — тогда будут использованы данные из стандартного ввода). Пример получения данных из файла для отправки POST-запроса:

Содержимое файла data.txt :

Массив $_POST , который будет содержать данные этого запроса:


Пример URL-кодирования данных из файла перед отправкой POST-запроса:

Содержимое файла username.txt :

Массив $_POST , который будет содержать данные этого запроса:

Загрузка файлов методом POST

Для HTTP запроса типа POST существует два варианта передачи полей из HTML форм, а именно, используя алгоритм application/x-www-form-urlencoded и multipart/form-data . Алгоритм первого типа создавался давным-давно, когда в языке HTML еще не предусматривали возможность передачи файлов через HTML формы.

Со временем возникла необходимость через формы отсылать еще и файлы. Тогда консорциум W3C взялся за доработку формата POST запроса, в результате чего появился документ RFC 1867. Форма, которая позволяет пользователю загрузить файл, используя алгоритм multipart/form-data , выглядит примерно так:

Чтобы отправить на сервер данные такой формы:

Скрипт upload.php , который принимает данные формы:

Работа по протоколу FTP

Скачать файл с FTP-сервера:

Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней:

Использование curl

Привет, в этой статье рассмотрим использование curl и библиотеки Libcurl.

cURL – свободная (распространяемая по лицензии MIT), кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.

Оригинальным автором является Дэниел Стенберг (Daniel Stenberg). Общее число разработчиков превышает 1300.

Libcurl – это библиотека API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl. libcurl используется, чтобы обеспечить возможность передачи файлов (адресуемых с помощью URL) многочисленным приложениям (как открытым, так и коммерческим).

Для libcurl имеются модули интеграции для работы с более чем 30 языками программирования.

Библиотека CURL (Client URLs) позволяет передавать файлы на удаленный компьютер, используя множество Интернет протоколов. Она имеет очень гибкую настройку и позволяют выполнить практически любой удаленный запрос.

CURL поддерживает протоколы HTTP, HTTPS, FTP, FTPS, DICT, TELNET, LDAP, FILE, и GOPHER, так же как HTTP-post, HTTP-put, cookies, FTP-закачкe, продолжение прерванной передачи файлов, пароли, номера портов, сертификаты SSL, Kerberos и прокси.

Используя CURL, web-сервер может выступать полноценным клиентом любого основанного на HTTP протоколе сервисе, к примеру: XML-RPC, SOAP, или WebDAV.

В общем виде использование библиотеки сводиться к четырем шагам:

  1. Создание ресурса CURL c помощью функции curl_init.
  2. Установка параметров c помощью функции curl_setopt.
  3. Выполнение запроса c помощью функции curl_exec.
  4. Освобождение ресурса CURL c помощью функции curl_close.

Простой пример использования CURL

Использование cURL для создания GET запроса

Отправка GET запроса ничем не отличается от получения страницы. Важно заметить, что строка запроса формируется следующим образом:

— адрес страницы, nameX — название переменной, valueX — значение переменной.

Пример использования POST запроса

Отправка POST запроса не многим отличается от отправки GET запроса. Все основные шаги остаются такие же. Переменные также задаются парами:

Пример HTTP-авторизации

Пример FTP-сессии

При возникновении проблем в использование cURL необходимо добавить следующие строки перед вызовом curl_close для получения отчета о последнем выполненном запросе:

Инструменты командной строки для веб-разработчика

Жизнь веб-разработчика омрачена сложностями. Особенно неприятно, когда источник этих сложностей неизвестен. То ли это проблема с отправкой запроса, то ли с ответом, то ли со сторонней библиотекой, то ли внешний API глючит? Существует куча различных прилад, способных упростить нам жизнь. Вот некоторые инструменты командной строки, которые лично я считаю бесценными.

cURL
cURL — программа для передачи данных по различным протоколам, похожая на wget. Основное отличие в том, что по умолчанию wget сохраняет в файл, а cURL выводит в командную строку. Так можно очень просто посмотреть контент веб-сайта. Например, вот как быстро получить свой текущий внешний IP:


Параметры -i (показывать заголовки) и -I (показывать только заголовки) делают cURL отличным инструментом для дебаггинга HTTP-ответов и анализа того, что конкретно сервер вам отправляет:

Параметр -L тоже полезный, он заставляет cURL автоматически следовать по редиректам. cURL поддерживает HTTP-аутентификацию, cookies, туннелирование через HTTP-прокси, ручные настройки в заголовках и многое, многое другое.

Siege
Siege — инструмент для нагрузочного тестирования. Плюс, у него есть удобная опция -g, которая очень похожа на curl –iL, но вдобавок показывает вам ещё и заголовки http-запроса. Вот пример с google.com (некоторые заголовки удалены для краткости):

Но для чего Siege действительно великолепно подходит, так это для нагрузочного тестирования. Как и апачевский бенчмарк ab, он может отправить множество параллельных запросов к сайту и посмотреть, как он справляется с трафиком. В следующем примере показано, как мы тестируем Google с помощью 20 запросов в течение 30 секунд, после чего выводится результат:

Одна из самых полезных функций Siege — то, что он может работать не только с одним адресом, но и со списком URL’ов из файла. Это отлично подходит для нагрузочного тестирования, потому что можно моделировать реальный трафик на сайте, а не просто жать один и тот же URL снова и снова. Например, вот как использовать Siege, чтобы нагрузить сервер, используя адреса из вашего лога Apache:

Ngrep
Для серьёзного анализа трафика существует Wireshark с тысячами настроек, фильтров и конфигураций. Есть также версия для командной строки tshark. Но для простых задач функционал Wireshark я считаю избыточным. Так что до тех пор, пока мне не нужно мощное оружие, я использую ngrep. Он позволяет делать с сетевыми пакетами то же самое, что grep делает с файлами.

Для веб-трафика вы почти всегда захотите использовать параметр -W, чтобы сохранить форматирование строк, а также параметр -q, который скрывает избыточную информацию о неподходящих пакетах. Вот пример команды, которая перехватывает все пакеты с командой GET или POST:

Проверяем Время Ответа Сайта из Командной строки Linux

Узнайте скорость отклика сайта из командной строки Linux с помощью CURL.

Суммарное время ответа сайта

Используйте следующую команду, чтобы узнать скорость ответа сайта, в секундах.

Пример выполненной команды:

Краткое описание опций:

Опции Описание
-s Тихий режим. Не показывать индикатора выполнения или сообщений об ошибках
-w Определяет, что отображается на стандартный вывод после завершенной и успешной операции
-o Перенаправляет вывод в ‘/dev/null’
time_total Суммарное время, которое заняла операция, в секундах

Подробный отчет о времени отклика сайта

Следующая команда возвращает нам lookup , connect , pretransfer , starttransfer время в секундах, а так же суммарное время которое ушло на операцию.

Пример выполнения команды:

Краткое описание опций:

Опции Описание
Lookup time (time_namelookup) Время, в секундах, затраченное на преобразование доменного имени в IP адрес
Connect time (time_connect) Время, в секундах, затраченное на подключение к удаленному серверу по TCP
PreXfer time (time_pretransfer) Время, в секундах, затраченное на подготовку к обмену данными. Оно включает в себя время на ‘обмен рукопожатиями’ участников конкретного протокола.
StartXfer time (time_starttransfer) Время, в секундах, затраченное на все действия, вплоть до начала передачи первого байта данных. Оно включает в себя ‘time_pretransfer’, а так же время, необходимое серверу на подсчет результатов.

Более подробный отчет о времени отклика сайта

Следующая команда добавляет данные о времени, затраченном на appconnect и redirect . Эти опции работают только в последних версиях CURL.

Пример выполненной команды:

Краткое описание опций:

Опции Описание
AppCon time (time_appconnect) Время, в секундах, с начала замера, до завершения соединения/рукопожатия по протоколу SSL/SSH и пр. с удаленным хостом (Добавлено в 7.19.0)
Redirect time (time_redirect) Время, в секундах, затраченное на редиректы, включая name lookup, connect, pretransfer и transfer. ‘time_redirect’ показывает суммарное время всех редиректов. (Добавлено в 7.12.3)

Используйте —version , чтобы узнать версию CURL.

Время Отклика: 3 Важных Лимита

Небольшая заметка для информации.

  • 0.1 сек. — это время, за которое пользователь ощутит что система реагирует мгновенно, а это означает что никакой обратной связи, за исключением отображения результата, не требуется;
  • 1.0 сек. — это время, в течении которого поток мыслей пользователя остается непрерывным, даже если он и заметит задержку. Как правило, никакой обратной связи не требуется во время задержки более 0.1 но менее 1.0 секунды, однако пользователь теряет ощущение непосредственной работы с данными;
  • 10 сек. — это практически предел удерживания внимания пользователя на диалоге. Во время более длительных задержек, у пользователя возникнет желание заняться другими вещами, пока загрузка страницы не закончится. Поэтому возникает необходимость в организации обратной связи, которая будет показывать что все в порядке и операция выполняется. Обратная связь особенно важна если время задержки варьирует, так как пользователь не будет знать чего ожидать.

Заметки, идеи и скрипты

Как сделать мир лучше с помощью компьютера

Примеры curl запросов из командной строки

Для быстрого тестирования запросов к web сервисам очень удобно использовать curl запросы из командной строки. Простой GET запрос легко ввести прямиком в браузере, но вот с POST уже будет сложнее. Разумеется есть множество программ с удобным интерфейсом, но часто бывает что они не всегда под рукой, не установлены или надо написать универсальную инструкцию. В таком случае гораздо быстрее открыть терминал, ввести команду и сразу получить результат. Для установки curl на linux достаточно выполнить команду

Здесь я приведу несколько наиболее типичных примеров CURL запросов.

Пример CURL POST запроса и CURL GET запроса
curl -X POST http://127.0.0.1/page
curl -X GET http://127.0.0.1/page

Пример отправки данных постом
вариант 1: curl -X POST -d «data1=1&data2=2″ http://127.0.0.1/page
вариант 2: curl -X POST -d ‘<«data1″: «1″, «data2″: «2″>’ http://127.0.0.1/page
О том как программно загружать файлы с помощью curl смотрите в статье о загрузке файлов курлом

Пример отправки файла
curl -i -X POST —form datafile=@/path/to/file.pdf http://127.0.0.1/page
Обратите внимание на параметр -i, определяющий получение от сервера только заголовка. Параметр не обязательный, но ведь обычно достаточно только знать загрузился файл или нет.

Пример CURL запроса с авторизацией
curl -u username:password http://127.0.0.1/page -XPOST -d « > О полезном параметре -v ниже.

Пример CURL JSON запроса
curl -X POST http://127.0.0.1/page -d ‘<«id»: «123″>’ -H «Content-Type:application/json»
Некоторые сервисы бракуют запросы без указания content-type, поэтому в случае json запроса — лучше всегда отправлять хэдер json.

Из полезных параметров стоит рассмотреть команду -v (verbose) чтобы получить максимум информации по запросу.
О том как работать с curl запросом через прокси смотрите в данной статье.

Приведённых примеров должно хватить для использования в 95% , если понадобятся более тонкие запросы, то используйте

Мастер Йода рекомендует:  Как начать использовать Wine для запуска Windows-приложений на Android
Добавить комментарий