Что такое код curl_version


Содержание

curl_version — Возвращает версию cURL

(PHP 4 >= 4.0.2, PHP 5, PHP 7)

curl_version — Возвращает версию cURL

Описание

Возвращает информацию о версии cURL.

Список параметров

Возвращаемые значения

Возвращает ассоциативный массив со следующими элементами:

Индекс Описание значения
version_number 24-битный номер версии cURL
version Номер версии cURL, в виде строки
ssl_version_number 24-битный номер версии OpenSSL
ssl_version Номер версии OpenSSL, в виде строки
libz_version Номер версии zlib, в виде строки
host Информация о хосте, где была собрана cURL
age
features Битовая маска констант CURL_VERSION_XXX
protocols Массив поддерживаемых протоколов cURL

Примеры

Пример #1 Пример использования curl_version()

Этот пример проверит какие возможности поддерживает данная сборка cURL с помощью битовой маски ‘features’, возвращаемой функцией curl_version() .

// Получаем массив с информацией о версии curl
$version = curl_version ();

// Это битовые поля, которые можно использовать
// для проверки возможностей сборки curl
$bitfields = Array(
‘CURL_VERSION_IPV6’ ,
‘CURL_VERSION_KERBEROS4’ ,
‘CURL_VERSION_SSL’ ,
‘CURL_VERSION_LIBZ’
);

foreach( $bitfields as $feature )
<
echo $feature . ( $version [ ‘features’ ] & constant ( $feature ) ? ‘ есть’ : ‘ нет’ );
echo PHP_EOL ;
>
?>

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.

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
Просмотров: 114537
Правила перепечатки

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 сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

ez code

Просто о сложном.

Продвинутое использование cURL в PHP

cURL — это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP, TELNET и др. Изначально cURL — это служебная программа для командной строки. Но, к счастью для нас, PHP поддерживает работу с библиотекой cURL. В этой статье мы рассмотрим нетривиальные примеры работы с cURL.

Почему cURL?

На самом деле, есть много других способов отправить запрос на другой сервер чтобы, например, получить содержимое страницы. Многие, в основном из-за лени, используют простые PHP функции, вместо cURL:

Однако они не позволяют эффективно обрабатывать ошибки. Также есть ряд задач, которые им вовсе не под силу — например, работа с cookies, авторизация, post запросы, загрузка файлов.

cUrl — мощный инструмент, который поддерживает множество протоколов и предоставляет полную информацию о запросе.

Основы cUrl

Прежде чем перейти к сложным примерам, рассмотрим базовую структуру cURL запроса в PHP. Для выполнения cURL запроса в PHP необходимо сделать 4 основных шага:

  1. Инициализация.
  2. Установка опций.
  3. Выполнение запроса.
  4. Очистка ресурсов.

В основном в этой статье мы будем рассматривать шаг №2, так как там происходит основная магия. Список cURL опций очень большой, поэтому все опции рассматривать сегодня мы не будем, а используем те, которые пригодятся для решения конкретных задач.

Отслеживание ошибок

При необходимости, вы можете добавить следующие строки для отслеживания ошибок:

Обратите внимание, мы используем «===» вместо «==», т.к. надо отличать пустой ответ сервера от булевского значения FALSE, которое возвращается в случае ошибки.

Получение информации о запросе

Другой необязательный шаг — получение информации о cURL запросе, после его выполнения.

В результате вы получите массив со следующей информацией:

  • «url»
  • «content_type»
  • «http_code»
  • «header_size»
  • «request_size»
  • «filetime»
  • «ssl_verify_result»
  • «redirect_count»
  • «total_time»
  • «namelookup_time»
  • «connect_time»
  • «pretransfer_time»
  • «size_upload»
  • «size_download»
  • «speed_download»
  • «speed_upload»
  • «download_content_length»
  • «upload_content_length»
  • «starttransfer_time»
  • «redirect_time»

Отслеживание редиректов, в зависимости от браузера

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

Мы будем использовать опцию CURLOPT_HTTPHEADER для установки наших собственных заголовков, включая User-Agent и язык и посмотрим, куда перенаправляют нас сайты.

В цикле проверяем браузеры для каждого урла. Сперва мы устанавливаем опции для нашего запроса: URL и тестируемый браузер и язык.

Т.к. мы установили специальную опцию, результат выполнения запроса будет содержать только HTTP заголовки. С помощью простого регулярного выражения мы можем проверить содержит ли ответ строку «Location:».

Результат выполнения скрипта:

Отправляем POST запросы

При выполнении GET запросов данные можно передавать в строке запроса. Например, когда вы ищете в гугле, ваш запрос передается в URL:

Чтобы получить результат этого запроса, вам даже не понадобится cURL, вы можете быть ленивым и использовать «file_get_contents()».

Но некоторые HTML формы используют метод POST. В таком случае данные отправляются в теле сообщения запроса, а не в самом URL.

Напишем скрипт, который будет отправлять POST запросы. Для начала создадим простой PHP файл, который будет принимать эти запросы и возвращать отправленные ему данные. Назовем его post_output.php :

Далее напишем PHP скрипт, который отправит cURL запрос:

Данный скрипт выведет:

Данный скрипт отправил POST запрос файлу post_output.php. который вывел содержимое массива $_POST и мы получили этот ответ с помощью cURL.

Загрузка файлов

Загрузка файлов очень похожа на предыдущий скрипт, т.к. загрузка файлов всегда выполняется с помощью POST запросов.

Так же как и в предыдущем примере, создадим файл, который будет принимать запросы, upload_output.php :

И сам скрипт, загружающий файлы:

Если вы хотите загрузить файл, все что необходимо — это передать путь к нему, так же как обычный параметр POST запроса, поставив вначале «@». Результат работы скрипта:

Multi cURL

Одна из продвинутых возможностей cURL в PHP — это возможность выполнения нескольких запросов одновременно и асинхронно.

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

Идея состоит в том, что вы можете создать множество cURL дескрипторов, объединить их под одним мульти-дескриптором и выполнять их асинхронно.

Сначала все как и с обычным cURL запросом — создается дескриптор (curl_init()), задаются параметры (curl_setopt()). Далее создается мульти-дескриптор (curl_multi_init()) и добавляются ранее созданные обычные дескрипторы (curl_multi_add_handle()). Вместо обычного вызова curl_exec() мы будем многократно вызывать curl_multi_exec() данная функция информирует нас о количестве активных соединений с помощью второго параметра — $running. Поэтому цикл работает пока $running не станет равным 0. И, конечно, после окончания работы необходимо освободить ресурсы.

В данном примере мы просто выводим результат запросов в STDOUT. Рассмотрим нетривиальный случай применения multi cURL.

Проверка внешних ссылок в WordPress

Представьте себе блог с большим количеством постов, содержащих ссылки на внешние сайты. Некоторые из этих ссылок могут быть не рабочими.

Напишем скрипт, который найдет все нерабочие ссылки и покажет их нам.

Для начала нам необходимо вытащить все внешние ссылки из базы данных:

В этой части скрипта мы просто вытаскиваем из базы все внешние ссылки. Проверим их:

Рассмотрим код подробнее (нумерация соответствует комментариям в коде):

  1. Добавляем начальное количество дескрипторов, чтобы не перегружать систему потоками. Количество регулируется переменной $max_connections.
  2. В переменной $curRunning хранится количество работающих потоков, в $running — предыдущее значение, если они станут не равными, то один из потоков завершил работу.
  3. Получаем информацию о выполненном запросе.
  4. Если нет ответа сервера — ссылка не рабочая.
  5. Ответ сервера — 404.
  6. Иначе ссылка работает.
  7. Запрос выполнен, освобождаем ресурсы.
  8. Добавим новый урл к мульти дескриптору.
  9. Функция add_url_to_multi_handle() добавляет новый дескриптор с заданным урлом к мульти-дескриптору.

Проверка заняла около 2 секунд. Запуская одновременно по 10 потоков производительность возрастает в 10 раз, по сравнению с обычными cURL запросами. Чтобы получить содержимое ответа сервера используйте функцию curl_multi_getcontent($ch), где $ch — дескриптор, полученный из curl_multi_info_read().

Другие возможности cURL в PHP

HTTP аутентификация

Если HTTP запрос требует аутентификацию, используйте следующий код:

Загрузка по FTP

В PHP есть своя библиотека для работы с FTP, но можно использовать и cURL:

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

Запросы можно выполнять через определенный proxy:

Колбэки (callback functions)

Есть возможность использовать колбэки во время выполнения запроса, не дожидаясь его завершения. Например, во время того как ответ сервера загружается мы можем использовать уже полученные данные, не дожидаясь полной загрузки.

Колбэк функция должна возвращать длину строки для правильной работы запроса.

Каждый раз, когда будет получена очередная часть ответа сервера, будет вызван колбэк.

Заключение

В этой статье мы рассмотрели продвинутые возможности cURL в PHP. В следующий раз, когда вам понадобится делать URL запросы — используйте cURL.

Получение curl для вывода кода состояния HTTP?

Я использую curl в командной строке Linux для выполнения HTTP-запросов. Тела ответов печатаются в standard out, что нормально, но я не вижу на справочной странице, как заставить curl печатать код состояния HTTP из ответа (404, 403 и т. д.). Такое возможно?

15 ответов

Это должно работать для вас if веб-сервер способен отвечать на запросы головы (это не будет выполнять GET ):

в качестве дополнения, чтобы cURL следовал перенаправлениям (статусы 3xx), добавьте-L.

более конкретный способ печати просто код состояния HTTP-это что-то вроде:

намного проще работать со скриптами, так как не требует никакого парсинга: -)

параметр-I может быть добавлен для повышения производительности загрузки ответа. Этот параметр просто запрашивает состояние / заголовки ответа, без тела ответа загрузки. (% возвращает первую строку полезных данных HTTP)

Если вы хотите увидеть заголовок, а также результат, вы можете использовать опцию verbose:

статус появится в заголовке. Например:

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

хорошая вещь о -i он работает с -X POST Как хорошо.

если вы хотите записать код состояния HTTP в переменной, но перенаправить содержимое в STDOUT, необходимо создать два stdout. Вы можете сделать это с помощью процесс замещения >() и команда подстановки $().

сначала создайте файловый дескриптор 3 для вывода текущего процесса с exec 3>&1 .

затем используйте керла -o опция для перенаправления содержимого ответа на временный fifo с помощью подстановки команд, и затем в этой подстановке команд перенаправьте выходные данные обратно в текущий файловый дескриптор процесса STDOUT 3 С -o >(cat >&3) .

положить все это вместе в bash 3.2.57(1)-release (стандарт macOS ):

обратите внимание, что это не работает в /bin/sh as SamK отмечено в комментариях ниже.

переопределить вывод curl:

может использоваться с любым типом запроса.

это отправит запрос на url, получит только первую строку ответа, разделит ее на блоки и выберет вторую.

содержит код ответа

код состояния только

все заслуга в этом GIST

для POST запроса сработало следующее:

Это больно curl —fail ограничения. От man curl :

-f, —fail (HTTP) сбой молча (без вывода вообще) на ошибки сервера

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

этот функция ведет себя точно так же, как curl , но вернет 127 (код возврата не используется curl ) В случае HTTP кода в диапазоне [400, 600[.

возвращает следующую информацию:

  1. данные ответа, если какие-либо данные возвращаются API, как ошибка
  2. код состояния

вот команда curl, использующая GET и это возвращает код HTTP.

пожалуйста, помните, что подход ниже использует HEAD , который быстрее, но он не может хорошо работать с некоторыми веб-менее совместимых серверов HTTP.

используйте следующую команду cURL и передайте ее grep следующим образом:

вот что делает каждый флаг:

  • -I : показывать только заголовки ответов
  • -s : Silent-не показывать прогресс бар
  • -L : за Location: заголовки

запуск из командной строки. Этот curl работает в автоматическом режиме, следует за любыми перенаправлениями, получает HTTP заголовки. grep выведет код состояния HTTP на стандартный вывод.

OP хочет знать код состояния. Часто при загрузке файла вы также Хотите почувствовать его размер, поэтому я использую curl сначала, чтобы показать код состояния и размер файла, а затем отключить подробный и прямой файл в место и имя, которое я хочу:

тогда я жду окончания curl

перед запуском следующей команды. Выше, когда используется в сценарии многих команд, как выше, дает хороший ответ, как:

обратите внимание, что после-o в curl должен следовать полный путь к файлу + имя файла. Это позволяет вам thusly сохранять файлы в разумной структуре имен, когда вы d / l их с curl. Также обратите внимание, что-s и-S, используемые вместе, заставляют замолчать вывод, но показывают ошибки. Обратите внимание также, что-R пытается установить метку времени файла на веб-файл.

мой ответ основан на том, что @pvandenberk первоначально предложил, но кроме того, он фактически сохраняет файл где-то, вместо того, чтобы просто направлять в /dev/null.

Примеры использования 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 .

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

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

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

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

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

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

ИТ База знаний

ShareIT — поделись знаниями!

Полезно

Узнать IP — адрес компьютера в интернете

Онлайн генератор устойчивых паролей


Онлайн калькулятор подсетей

Калькулятор инсталляции IP — АТС Asterisk

Руководство администратора FreePBX на русском языке

Руководство администратора Cisco UCM/CME на русском языке

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Похожие статьи

Что такое Domain Name System?

Первичная настройка Ansible

Как сбросить root пароль на MySQL?

No transaction is active: решение проблемы с SQL

15 примеров CURL в Linux

4 минуты чтения

В середине 1990-х годов, когда Интернет еще только начинал развиваться, шведский программист по имени Даниэль Стенберг начал проект, который в конечном итоге превратился в то, что мы сегодня знаем, как Curl. Первоначально он стремился разработать бота, который бы периодически загружал курсы валют с веб-страницы и предоставлял пользователям IRC эквиваленты шведских крон в долларах США. Проект процветал, добавлялись новые протоколы и функции, и в конце концов мы получили тот функционал, который имеем сейчас.

Посмотреть версию curl

Опции -V или —version будут возвращать не только версию, но также поддерживаемые протоколы и функции в текущей версии.

Скачать файл

Если вы хотите загрузить файл, вы можете использовать curl с опциями -O или -o. Первый сохранит файл в текущем рабочем каталоге с тем же именем, что и в удаленном местоположении, тогда как второй позволяет вам указать другое имя файла и/или местоположение.

Возобновить прерванную загрузку

Если загрузка по какой-либо причине была прервана (например, с помощью Ctrl + c), вы можете возобновить ее очень легко. Использование -C — (тире C, пробел, тире) указывает curl возобновить загрузку с того места, где она остановилась.

Скачать несколько файлов

С помощью следующей команды вы сразу загрузите info.html и about.html с http://merionet.ru и http://wiki.merionet.ru соответственно.

Скачать URL из файла

Если вы комбинируете curl с xargs, вы можете загружать файлы из списка URL-адресов в файле.

Использовать прокси с аутентификацией или без нее

Если вы находитесь за прокси-сервером, прослушивающим порт 8080 на proxy.yourdomain.com, сделайте это:

где вы можете пропустить -U user: пароль, если ваш прокси не требует аутентификации.

Заголовки запроса HTTP

Заголовки HTTP позволяют удаленному веб-серверу отправлять дополнительную информацию о себе вместе с фактическим запросом. Это предоставляет клиенту подробную информацию о том, как обрабатывается запрос.

Чтобы запросить заголовки HTTP с сайта, выполните:

Эта информация также доступна в инструментах разработчика вашего браузера.

Сделать запрос POST с параметрами

Следующая команда отправит параметры firstName и lastName вместе с соответствующими значениями на https://merionet.ru/info.php.

Вы можете использовать этот совет для имитации поведения обычной формы HTML.

Загрузка файлов с FTP-сервера с аутентификацией или без нее

Если удаленный FTP-сервер ожидает подключения по адресу ftp://yourftpserver, следующая команда загрузит yourfile.tar.gz в текущий рабочий каталог.

где вы можете пропустить -u username: password, если FTP-сервер разрешает анонимный вход.

Загрузить файлы на FTP-сервер с аутентификацией или без

Чтобы загрузить локальный файл mylocalfile.tar.gz в ftp://yourftpserver с помощью curl, выполните:

Указание пользовательского агента

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

Хранение Cookies

Хотите узнать, какие файлы cookie загружаются на ваш компьютер, когда вы заходите на https://www.cnn.com? Используйте следующую команду, чтобы сохранить их в cnncookies.txt. Затем вы можете использовать команду cat для просмотра файла.

Отправить файлы cookie сайта

Вы можете использовать файлы cookie, полученные в последнем совете, при последующих запросах к тому же сайту.

Изменить разрешение имени

Если вы веб-разработчик и хотите протестировать локальную версию merionet.ru, прежде чем запускать ее в живую версию, вы можете настроить разрешение curl http://www.merionet.ru для своего локального хоста следующим образом:

Таким образом, запрос к http://www.merionet.ru скажет curl запрашивать сайт у localhost вместо использования DNS или файла /etc /hosts.

Ограничить скорость загрузки

Чтобы предотвратить потерю пропускной способности, вы можете ограничить скорость загрузки до 100 КБ/с следующим образом.

Полезна ли Вам эта статья?

Пожалуйста, расскажите почему?

Нам жаль, что статья не была полезна для вас :( Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

Утилита командной строки 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 на сервер, как будто они были ранее получены от сервера:

Чтобы сохранить полученные с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 путь является директорией, то по умолчанию будет выведен список файлов в ней:

Почему я получаю HTTP_CODE 0 от curl?

Я использовал curl с PHP некоторое время. Сегодня я пытался получить http://www.webhostingstuff.com/category/Best-Hosting.html, и я продолжаю получать http-код 0, который для меня новичок.

Я устанавливаю заголовки

и у меня есть файл cookie (который не имеет ничего, когда script заканчивает загрузку)

Здесь функция завитка

Я также пытался выполнить через SSH с другого сервера (в случае его блокировки IP)

Как я могу это решить?

Код состояния 0 означает, что соединение было закрыто (изящно) до того, как был возвращен любой результат.

Наверное, я начну с выяснения, можно ли вообще подключиться к машине. Если у вас есть доступ к удаленному компьютеру, это, скорее всего, поможет отлаживать.

должен был быть:

cURL считает, что вы указываете опцию -u, которая используется для указания имени пользователя, и, следовательно, сообщение об ошибке, которое вы получили. Вам нужно указать -url (две тире).

Надеюсь, что это по крайней мере помогает при отладке.

В моем случае код http 0 возвращался из-за таймаута соединения. Добавив

Мне удалось избавиться от ошибки

Возможно, это была некоторая внутренняя ошибка сервера? Сейчас он работает:

Я использую HTTP_Request2 пакет pear как обертка для завитушек, код:

0 код означает, что curl не может найти сервер, который вы искали. «yahoo.com/whatever» вернет 404, а «yahoo.comwhatever» вернется 0.

Вчера я столкнулся с подобной проблемой. Я потратил 2 часа на эту проблему. Я был в системе RHEL. Код проверки зависания был ниже блока для проверки подлинности:

Этот код использовался для аутентификации. В лабораторной среде он возвратил 200, но на производстве он вернул 0.

Затем я сделал аналогичный script (который использовал curl) и запускался, если из командной строки, как php test3.php . Результатом этого прогона стал 200 код состояния.

Тогда из любопытства я решил временно отключить SELinux , выполнив эту команду:

И угадайте, что это сработало. Затем вы можете правильно настроить контекст, запустив setsebool httpd_can_network_connect on

Урок 20. Работа с cURL в PHP

В этой статье речь пойдет о таком мощном инструменте как cURL, а также о библиотеке для php, которая предоставляет доступ к этому инструменту — libcurl. Для чего все это нужно? Для связи с сервером по протоколам передачи данных, например, http или ftp. Остальные протоколы нам не особо интересны, если кто-то хочет углубляться в эту тему, то придется уже копать англоязычные ресурсы, а в этой статье будут основы и примеры использования.

Что вообще такое cURL и libcurl? Общие моменты

Итак, библиотека libcurl предоставляет нам возможность передачи данных на сервер, и получения ответов от него. Что нам это дает? Возможность эмуляции поведения пользователя или браузера! Вы можете получать содержимое страниц для последующего парсинга, можете получать заголовки ответов сервиса и программно авторизироваться на сайтах, делать скрипты постинга сообщений (например, в твиттер или на форумах) или грабберы информации. Все ограничивается лишь вашей фантазией!

Установка cURL на Denwer (Денвер). Как начать пользоваться libcurl?

Первое, что мы должны сделать, это установить библиотеку. На локальном компьютере я пользуюсь сборкой Denwer, как и подавляющее большинство начинающих вебмастеров, на которых и рассчитана статья. Опытные пользователи, которые самостоятельно устанавливают связку php+apache+mysql смогут установить и cURL, не мне объяснять им как это делается ;) А мы, новички, пользуемся готовыми решениями, чтобы было проще. Поэтому, устанавливаем libcurl следующим образом:

  • Скачиваем готовый пакет расширений «PHP5: дополнительные модули».
  • Соответственно, устанавливаем его. Ничего сложного, согласитесь :)
  • Открываем в блокноте (я всегда рекомендую Notepad++) файл:

и убираем точку с запятой в начале сроки:

  • Делаем рестарт сервера Денвер.
  • Готово. Чтобы проверить работоспособность библиотеки можете вызвать функцию phpinfo() и найти там строчку: cURL support enabled. Поздравляю с первой победой.

    Описание cURL и первые шаги

    Для началом работы с инструментом, его нужно инициализировать. Делается это следующим образом:

    Мы использовали функцию инициализации сессии cURL. При этом, можно задать URL сразу, вот так:

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

    Первый параметр этой функции, то есть resource ch мы уже создали чуть выше, а вот параметров option и value очень много. Я думаю, что не стоит копипастить сюда их все, а достаточно лишь дать ссылку на подробное описание функции, надеюсь никто не обидится: curl_setopt.

    Приведу пример установки опций как раз на примере URL:

    Еще парочка примеров задания опций: давайте получим заголовок ответа сервера, при этом не будем получать саму страницу:

    Итак, мы инициализировали сессию, задали нужные нам параметры, теперь выполняем получившийся запрос, закрываем сессию и выводим результат:

    В итоге получаем наш первый полностью рабочий пример использования библиотеки libcurl:

    Как оно работает, надеюсь, понятно, ведь мы рассмотрели каждый шаг по отдельности :) В результате мы получаем заголовок HTTP ответа от сервера, который чуть ниже обязательно разберем, чтобы лучше понимать все этапы взаимодействия браузера и сервера:

    Великолепно! Мы получили заголовок ответа от сервера и опробовали библиотеку в действии. Чем это нам полезно? Тем, что теперь вы примерно представляете себе последовательность действий при работе с cURL:

    • Инициализировать сессию (curl_init)
    • Задать нужные нам опции (curl_setopt)
    • Выполнить полученный запрос (curl_exec)
    • Завершить сессию (curl_close)

    Двигаемся дальше, но перед тем как делать с libcurl что-то более серьезное, как я и обещал, разберем подробно из чего состоит заголовок HTTP запроса к серверу и ответ на него.

    Структура заголовка HTTP запроса

    Для примера я обратился к странице ya.ru и в Opera Dragonfly просмотрел сформированный запрос браузера и полученный от сервера ответ. Вот и они:
    Запрос
    GET / HTTP/1.1 — Пытаемся получить страницу по адресу /, то есть главную, находящуюся в корне папки. Используем протокол версии 1.1.
    User-Agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14 — Представляемся серверу, мы — браузер Опера.
    Host: ya.ru — Доменное имя запрашиваемого ресурса.
    Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 — Список допустимых форматов ресурса.
    Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 — Список поддерживаемых языков.
    Accept-Encoding: gzip, deflate — Поддерживаемые способы кодирования.
    Cookie: yandexu > — Куки, при необходимости.
    Connection: Keep-Alive — Просим не разрывать соединение и оставаться на связи.
    Ответ
    HTTP/1.1 200 Ok — Получаем ответ с кодом 200, значит все ОК.
    Server: nginx — Сервер представился — это nginx.
    Date: Sun, 10 Mar 2013 14:10:50 GMT — Текущие дата и время на сервере.
    Content-Type: text/html; charset=UTF-8 — Тип контента и кодировка.
    Connection: close — Сервер не хочет поддерживать с нами постоянного соединения, поэтому сразу же его закрывает. Для следующего запроса будет установлено новое соединение.
    Cache-Control: no-cache,no-store,max-age=0,must-revalidate — Управление кэшированием. В данном случае оно отключено.
    Expires: Sun, 10 Mar 2013 14:10:50 GMT — Дата предполагаемого истечения срока действия сессии. В нашем случае оно совпадает с временем открытия, так как сервер тут же его закрыл, сразу после обработки.
    Last-Modified: Sun, 10 Mar 2013 14:10:50 GMT — Время последней модификации.
    Content-Encoding: gzip — Способ кодирования информации.
    Полный список всех параметров, которые можно встретить в заголовке HTTP запроса можно посмотреть на википедии.
    Теперь вы примерно представляете как общаются между собой ваш браузер и web-сервер. Это очень полезно знать и понимать, ведь мы будем пытаться эмулировать действия браузера с помощью библиотеки libcurl. Идем дальше.

    Пример работы с библиотекой

    Я считаю, что после того, как некоторые общие моменты уже ясны и вроде бы все понятно, то самое время переходить к практике и на примере уже оттачивать свое мастерство. Лично у меня всегда сразу руки чешутся все попробовать на практике :)

    Раз уж cURL так хорош для парсеров, то рассмотрим функцию получения кода страницы по ее адресу. При этом на выходе получим массив с заголовком, содержимым страницы и даже коды ошибок, если что-то пойдет не так.

    Входные параметры:
    url — адрес страницы или сайта.
    Значения выходных параметров (массив с тремя элементами):
    header[‘errno’] — если что-то пошло не так, то тут будет код ошибки.
    header[‘errmsg’] — здесь при этом будет текст ошибки.
    header[‘content’] — собственно сама страница\файл\картинка и т.д.

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

    Все должно пройти без ошибок и вы получите код страницы в переменной $page . Если же попробовать получить несуществующую страницу yaaaaaaaaaaaa.ru , то получим ошибку:

    Все обрабатывается корректно и красиво :)
    Дальше с кодом страницы можно делать все что угодно, например, парсить регулярками. Но это все в следующих уроках, а пока что остановимся на этом.

    Комментарии:

    1. Tetsu — 03.05.2013 18:20

    Можете ли вы сообщить сколько еще уроков вы собираетесь сделать и на какие темы они будут?

    Tetsu, буду писать пока будет время :) Есть какие то пожелания?

    Tetsu — 04.05.2013 05:31

    Не совсем… просто хотелось бы освоить это дело побыстрее, поэтому и интересуюсь какие еще темы мне стоит изучить в продолжение этим.

    Alex — 09.08.2013 18:31

    А на MAC OS X нассали? У меня MAMP, что мне делать?

    Kostya — 09.09.2013 04:48

    Автор, спасибо огромное всё сразу стало на свои места в голове:)

    Valek — 11.11.2013 01:08

    Привет
    Забыл ты про функцию iconv у меня бяки отобразились
    Есть парочка тем если интересно.
    1)Чем отличаются echo от print(понимаю что тема затерта в нете но вот подробностей так и не встречал)
    Если хочешь я могу тебе написать массу огромную тем по которой не только мне интересно будет, но и публике тоже интересно будет!
    И еще вот что еще….Спасибо за урок очень хороший но очень сжат,мне кажется что новичку (совсем начинающему)будет трудновато понять что и как делается.

    Михаил — 21.11.2013 17:08

    Большое спасибо. Помог очень))

    Всем остальным, кто не дружит с регулярками, хочу посоветовать PHP Simple HTML DOM Parser.
    http://habrahabr.ru/post/176635/

    Виктория — 15.01.2014 00:11

    У меня, как и у Valek, вылезли кракозябры (с кодировкой проблемы). Valek написал про функцию
    string iconv ( string $in_charset , string $out_charset , string $str )
    но я никак не могу с ней разобраться. Как понять из какой кодировки в какую переделывать (первые два параметра), чтобы получился нормальный русский язык?

    myblaze — 15.01.2014 12:43

    проверьте, точно файл сохранен в кодировке UTF-8? В коде страницы присутствует meta-тег content=»text/html; charset=UTF-8″? И в заключении, после всего этого в самом браузере стоит автоопределение кодировки или жестко задана (может там, например, windows-1251)?

    Михаил — 19.01.2014 14:24

    Виктория, myblaze дело говорит. Ещё раз повторюсь, если позволите.
    1) Чтобы узнать кодировку html документа, нужно посмотреть в сам html документ и обратить внимание на тег
    2) Возможно вы пытаетесь вывести эту строку без учёта её кодировки. Советую сохранить в файл и просмотреть через файл эту строку. Возможно в файле всё откроется без кракозябр.
    3) Советую скачать текстовый редактор Notepad++. Там в меню есть возможность преобразовать и перекодировать. Поэкспериментируйте. Скопируйте и вставте свои кракозябры и попробуйте преобразовать или перекодировать. После каждой неудачной перекодировки нужно заново открывать файл. Это поможет быстрей разобраться с кодировками.

    Jack — 31.01.2014 21:26

    >>Alex — 09.08.2013 18:31
    А на MAC OS X нассали? У меня MAMP, что мне делать?
    —————-
    Для начала научится гуглить, у меня тоже мак c MAMP и проблемы найти мануал по подключению curl не составило труда.

    Jack, кто ищет, тот всегда найдет ;) А Aleх’у только удачи пожелать можно, может тоже когда-нибудь научится гуглить.

    Сергей — 03.10.2014 11:43

    М — 10.04.2015 12:44

    Денис — 24.01.2020 15:06

    Возникает проблема с Curl, когда сайт находится на сервере http выдается пустой лист, если смотрим смотри ошибки — culdnt connect to host, что делать?

    Dmitriy — 16.09.2020 19:39

    Fatal error: Call to undefined function curl_init()

    Илон Маск рекомендует:  Что такое код asp binaryread
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL