Что такое код curl_errno


Содержание

Если curl getinfo для HTTP CODE не возвращает код?

Я делаю обычный вызов curl в webservice, и я получаю HTTP-код возврата через

Он возвращает мне $code как 200 — это хорошо. Но регистрировать звонки завитки сейчас с недели, там, где мало звонков на тот же веб-сервис, который ничего не возвращал! так что в основном я получаю $code как пустой.

Может кто-нибудь сказать мне, что должно быть неправильно в этих сценариях, и если можно отладить его больше!?

Спасибо всем за информацию. Да, я тоже думал о том, что не дошел до сервера. Я обновлю свой код, чтобы получить curl_error && curl_errno и скоро обновит вас.

Еще раз спасибо.

———————- Обновление 2 ———————— ———————————- Я обновил свой код, чтобы вернуть мне ошибку № 7 — не удалось подключиться к хосту. Я зарегистрировал все завитки, так что в основном около 90-98% звонков завитка выполняется хорошо. Но только 1-2% вызовов завитка не могут найти хоста! Может ли кто-нибудь сказать мне, что может быть причиной? и как я могу это предотвратить?

PHP CURL. Функции и примеры использования

CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.

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

Подключение библиотеки CURL в PHP

Для того чтобы использовать библиотеку CURL ее соответственно нужно подключить.

Примечание! В качестве примера мы будем использовать PHP 5.4.39 на Windows 7, а в качестве Web-сервера у нас будет выступать Apache 2.2.22.

Первое что нужно сделать, это скопировать библиотеки ssleay32.dll, libeay32.dll, libssh2.dll они расположены в директории с PHP, в системный каталог Windows, а именно в C:\Windows\System32.

Затем в php.ini подключить библиотеку php_curl.dll, т.е. раскомментировать следующую строку

Библиотека не подключена

Все, перезапускаем Apache, вызываем функцию phpinfo() и в случае успешного подключения у Вас должен появиться раздел curl

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

Пример CURL – запрашиваем удаленную страницу для вывода на экран

В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.

У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.

Код test_curl.php

Код test.php

В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3).

Пример CURL – вызываем удаленный скрипт и получаем результат

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

Код test_curl.php

Код test.php

И если мы запустим test_curl.php то на экран у нас выведется 111, т.е. 1.11 полученное в результате обращения к удаленному скрипту, умноженное на 100.

А теперь давайте поговорим о функциях и константах к ним.

Часто используемые функции CURL и константы

  • curl_init — Инициализирует сеанс;
  • curl_close — Завершает сеанс;
  • curl_exec — Выполняет запрос;
  • curl_errno — Возвращает код ошибки;
  • curl_setopt — Устанавливает параметр для сеанса, например:
    • CURLOPT_HEADER – значение 1 означает, что необходимо вернуть заголовки;
    • CURLOPT_INFILESIZE — параметр для указания ожидаемого размера файла;
    • CURLOPT_VERBOSE — значение 1 означает что CURL будет выводить подробные сообщения о всех производимых операциях;
    • CURLOPT_NOPROGRESS – отключение индикатора прогресса операции, значение 1;
    • CURLOPT_NOBODY – если Вам не нужен документ, а нужны только заголовки, то поставьте значение 1;
    • CURLOPT_UPLOAD — для закачки файла на сервер;
    • CURLOPT_POST – выполнить запрос методом POST;
    • CURLOPT_FTPLISTONLY — получение списка файлов в директории FTP сервера, значение 1;
    • CURLOPT_PUT — выполнить запрос методом PUT, значение 1;
    • CURLOPT_RETURNTRANSFER — возвратить результат, не выводя в браузер, значение 1;
    • CURLOPT_TIMEOUT – максимальное время выполнения в секундах;
    • CURLOPT_URL – указание адреса для обращения;
    • CURLOPT_USERPWD — строка с именем пользователя и паролем в виде [username]:[password];
    • CURLOPT_POSTFIELDS – данные для POST запроса;
    • CURLOPT_REFERER — задает значение HTTP заголовка «Referer: »;
    • CURLOPT_USERAGENT — задает значение HTTP заголовка «User-Agent: »;
    • CURLOPT_COOKIE — содержимое заголовка «Cookie: », который будет отправлен с HTTP запросом;
    • CURLOPT_SSLCERT- имя файла с сертификатом в формате PEM;
    • CURLOPT_SSL_VERIFYPEER – значение 0, для того чтобы запретить проверку сертификата удаленного сервера (по умолчанию 1);
    • CURLOPT_SSLCERTPASSWD — пароль к файлу сертификата.
  • curl_getinfo — Возвращает информацию об операции, вторым параметром может выступать константа для указания, что именно нужно показать, например:
    • CURLINFO_EFFECTIVE_URL — последний использованный URL;
    • CURLINFO_HTTP_CODE — последний полученный код HTTP;
    • CURLINFO_FILETIME — дата модификации загруженного документа;
    • CURLINFO_TOTAL_TIME — время выполнения операции в секундах;
    • CURLINFO_NAMELOOKUP_TIME — время разрешения имени сервера в секундах;
    • CURLINFO_CONNECT_TIME — время, затраченное на установку соединения, в секундах;
    • CURLINFO_PRETRANSFER_TIME — время, прошедшее от начала операции до готовности к фактической передаче данных, в секундах;
    • CURLINFO_STARTTRANSFER_TIME — время, прошедшее от начала операции до момента передачи первого байта данных, в секундах;
    • CURLINFO_REDIRECT_TIME — время, затраченное на перенаправление, в секундах;
    • CURLINFO_SIZE_UPLOAD — количество байт при закачке;
    • CURLINFO_SIZE_DOWNLOAD — количество байт при загрузке;
    • CURLINFO_SPEED_DOWNLOAD — средняя скорость закачки;
    • CURLINFO_SPEED_UPLOAD — средняя скорость загрузки;
    • CURLINFO_HEADER_SIZE — суммарный размер всех полученных заголовков;
    • CURLINFO_REQUEST_SIZE — суммарный размер всех отправленных запросов;
    • CURLINFO_SSL_VERIFYRESULT — результат проверки SSL сертификата, запрошенной с помощью установки параметра CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD — размер загруженного документа, прочитанный из заголовка Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD — размер закачиваемых данных;
    • CURLINFO_CONTENT_TYPE — содержимое полученного заголовка Content-type, или NULL в случае, когда этот заголовок не был получен.

PHP CURL – функции и примеры использования

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

Перед тем как приступить к рассмотрению curl хочу напомнить, что язык PHP мы с Вами уже затрагивали, например, в материале про выгрузку в Excel на PHP или возможность аутентификации на PHP, а теперь давайте поговорим о возможности посылать запросы на PHP.

Что такое CURL?

CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.

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

Подключение библиотеки CURL в PHP

Для того чтобы использовать библиотеку CURL ее соответственно нужно подключить.

Примечание! В качестве примера мы будем использовать PHP 5.4.39 на Windows 7, а в качестве Web-сервера у нас будет выступать Apache 2.2.22.

Первое что нужно сделать, это скопировать библиотеки ssleay32.dll, libeay32.dll, libssh2.dll они расположены в директории с PHP, в системный каталог Windows, а именно в C:\Windows\System32.

Затем в php.ini подключить библиотеку php_curl.dll, т.е. раскомментировать следующую строку

Библиотека не подключена

Все, перезапускаем Apache, вызываем функцию phpinfo() и в случае успешного подключения у Вас должен появиться раздел curl

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

Пример CURL – запрашиваем удаленную страницу для вывода на экран

В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.

У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.

Код test_curl.php

Код test.php

В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3).

Пример CURL – вызываем удаленный скрипт и получаем результат

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

Код test_curl.php

Код test.php

И если мы запустим test_curl.php то на экран у нас выведется 111, т.е. 1.11 полученное в результате обращения к удаленному скрипту, умноженное на 100.

А теперь давайте поговорим о функциях и константах к ним.

Часто используемые функции CURL и константы

  • curl_init — Инициализирует сеанс;
  • curl_close — Завершает сеанс;
  • curl_exec — Выполняет запрос;
  • curl_errno — Возвращает код ошибки;
  • curl_setopt — Устанавливает параметр для сеанса, например:
    • CURLOPT_HEADER – значение 1 означает, что необходимо вернуть заголовки;
    • CURLOPT_INFILESIZE — параметр для указания ожидаемого размера файла;
    • CURLOPT_VERBOSE — значение 1 означает что CURL будет выводить подробные сообщения о всех производимых операциях;
    • CURLOPT_NOPROGRESS – отключение индикатора прогресса операции, значение 1;
    • CURLOPT_NOBODY – если Вам не нужен документ, а нужны только заголовки, то поставьте значение 1;
    • CURLOPT_UPLOAD — для закачки файла на сервер;
    • CURLOPT_POST – выполнить запрос методом POST;
    • CURLOPT_FTPLISTONLY — получение списка файлов в директории FTP сервера, значение 1;
    • CURLOPT_PUT — выполнить запрос методом PUT, значение 1;
    • CURLOPT_RETURNTRANSFER — возвратить результат, не выводя в браузер, значение 1;
    • CURLOPT_TIMEOUT – максимальное время выполнения в секундах;
    • CURLOPT_URL – указание адреса для обращения;
    • CURLOPT_USERPWD — строка с именем пользователя и паролем в виде [username]:[password];
    • CURLOPT_POSTFIELDS – данные для POST запроса;
    • CURLOPT_REFERER — задает значение HTTP заголовка «Referer: »;
    • CURLOPT_USERAGENT — задает значение HTTP заголовка «User-Agent: »;
    • CURLOPT_COOKIE — содержимое заголовка «Cookie: », который будет отправлен с HTTP запросом;
    • CURLOPT_SSLCERT- имя файла с сертификатом в формате PEM;
    • CURLOPT_SSL_VERIFYPEER – значение 0, для того чтобы запретить проверку сертификата удаленного сервера (по умолчанию 1);
    • CURLOPT_SSLCERTPASSWD — пароль к файлу сертификата.
  • curl_getinfo — Возвращает информацию об операции, вторым параметром может выступать константа для указания, что именно нужно показать, например:
    • CURLINFO_EFFECTIVE_URL — последний использованный URL;
    • CURLINFO_HTTP_CODE — последний полученный код HTTP;
    • CURLINFO_FILETIME — дата модификации загруженного документа;
    • CURLINFO_TOTAL_TIME — время выполнения операции в секундах;
    • CURLINFO_NAMELOOKUP_TIME — время разрешения имени сервера в секундах;
    • CURLINFO_CONNECT_TIME — время, затраченное на установку соединения, в секундах;
    • CURLINFO_PRETRANSFER_TIME — время, прошедшее от начала операции до готовности к фактической передаче данных, в секундах;
    • CURLINFO_STARTTRANSFER_TIME — время, прошедшее от начала операции до момента передачи первого байта данных, в секундах;
    • CURLINFO_REDIRECT_TIME — время, затраченное на перенаправление, в секундах;
    • CURLINFO_SIZE_UPLOAD — количество байт при закачке;
    • CURLINFO_SIZE_DOWNLOAD — количество байт при загрузке;
    • CURLINFO_SPEED_DOWNLOAD — средняя скорость закачки;
    • CURLINFO_SPEED_UPLOAD — средняя скорость загрузки;
    • CURLINFO_HEADER_SIZE — суммарный размер всех полученных заголовков;
    • CURLINFO_REQUEST_SIZE — суммарный размер всех отправленных запросов;
    • CURLINFO_SSL_VERIFYRESULT — результат проверки SSL сертификата, запрошенной с помощью установки параметра CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD — размер загруженного документа, прочитанный из заголовка Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD — размер закачиваемых данных;
    • CURLINFO_CONTENT_TYPE — содержимое полученного заголовка Content-type, или NULL в случае, когда этот заголовок не был получен.
Илон Маск рекомендует:  Работа с файлами office 2007 из командной строки

Подробнее о функциях CURL и константах к ним можете посмотреть на официальном сайте PHP — php.net

На этом все, для начинающих я думаю достаточно Удачи!

libcurl error codes

libcurl-errors — error codes in libcurl

DESCRIPTION

This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem are also included.

CURLcode

Almost all «easy» interface functions return a CURLcode error code. No matter what, using the curl_easy_setopt option CURLOPT_ERRORBUFFER is a good >CURLcode is one of the following:

All fine. Proceed as usual.

The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you d > CURLE_FAILED_INIT (2)

Very early initialization code failed. This is likely to be an internal error or problem, or a resource problem where something fundamental couldn’t get done at init time.

The URL was not properly formatted.

A requested feature, protocol or option was not found built-in in this libcurl due to a build-time decision. This means that a feature or option was not enabled or explicitly disabled when libcurl was built and in order to get it to function you have to get a rebuilt libcurl.

Couldn’t resolve proxy. The given proxy host could not be resolved.

Couldn’t resolve host. The given remote host was not resolved.

Failed to connect() to host or proxy.

The server sent data libcurl couldn’t parse. This error code is used for more than just FTP and is aliased as CURLE_WEIRD_SERVER_REPLY since 7.51.0.

We were denied access to the resource given in the URL. For FTP, this occurs while trying to change to the remote directory.

While waiting for the server to connect back when an active FTP session is used, an error code was sent over the control connection or similar.

After having sent the FTP password to the server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned.

During an active FTP session while waiting for the server to connect, the CURLOPT_ACCEPTTIMEOUT_MS (or the internal default) timeout expired.

libcurl failed to get a sensible result back from the server as a response to either a PASV or a EPSV command. The server is flawed.

FTP servers return a 227-line as a response to a PASV command. If libcurl fails to parse that line, this return code is passed back.

An internal failure to lookup the host used for the new connection.

A problem was detected in the HTTP2 framing layer. This is somewhat generic and can be one out of several problems, see the error buffer for details.

Received an error when trying to set the transfer mode to binary or ASCII.

A file transfer was shorter or larger than expected. This happens when the server first reports an expected transfer size, and then delivers data that doesn’t match the previously given size.

This was either a weird reply to a ‘RETR’ command or a zero byte transfer complete.

When sending custom «QUOTE» commands to the remote server, one of the commands returned an error code that was 400 or higher (for FTP) or otherwise indicated unsuccessful completion of the command.

This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400.

An error occurred when writing received data to a local file, or an error was returned to libcurl from a write callback.

Failed starting the upload. For FTP, the server typically denied the STOR command. The error buffer usually contains the server’s explanation for this.

There was a problem reading a local file or an error returned by the read callback.

A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occurs.

Operation timeout. The specified time-out period was reached according to the conditions.

The FTP PORT command returned error. This mostly happens when you haven’t specified a good enough address for libcurl to use. See CURLOPT_FTPPORT.

The FTP REST command returned error. This should never happen if the server is sane.

The server does not support or accept range requests.

This is an odd error that mainly occurs due to internal confusion.

A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.

The download could not be resumed because the specified offset was out of the file boundary.

A file given with FILE:// couldn’t be opened. Most likely because the file path doesn’t > CURLE_LDAP_CANNOT_BIND (38)

LDAP cannot bind. LDAP bind operation failed.

LDAP search failed.

Function not found. A required zlib function was not found.

Aborted by callback. A callback returned «abort» to libcurl.

Internal error. A function was called with a bad parameter.

Interface error. A specified outgoing interface could not be used. Set which interface to use for outgoing connections’ source IP address with CURLOPT_INTERFACE.

Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with CURLOPT_MAXREDIRS.

An option passed to libcurl is not recognized/known. Refer to the appropriate documentation. This is most likely a problem in the program that uses libcurl. The error buffer might contain more specific information about which exact option it concerns.

A telnet option string was Illegally formatted.

Nothing was returned from the server, and under the circumstances, getting nothing is cons > CURLE_SSL_ENGINE_NOTFOUND (53)

The specified crypto engine wasn’t found.

Failed setting the selected SSL crypto engine as default!

Failed sending network data.

Failure with receiving network data.

problem with the local client certificate.

Couldn’t use specified cipher.

The remote server’s SSL certificate or SSH md5 fingerprint was deemed not OK. This error code has been unified with CURLE_SSL_CACERT since 7.62.0. Its previous value was 51.

Unrecognized transfer encoding.

Inval > CURLE_FILESIZE_EXCEEDED (63)

Maximum file size exceeded.

Requested FTP SSL level failed.

When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed.

Initiating the SSL Engine failed.

The remote server denied curl to login (Added in 7.13.1)

File not found on TFTP server.

Permission problem on TFTP server.

Out of disk space on the server.

Illegal TFTP operation.

Unknown TFTP transfer > CURLE_REMOTE_FILE_EXISTS (73)

File already exists and will not be overwritten.

This error should never be returned by a properly functioning TFTP server.

Character conversion failed.

Caller must register conversion callbacks.

Problem with reading the SSL CA cert (path? access rights?)

The resource referenced in the URL does not exist.

An unspecified error occurred during the SSH session.

Failed to shut down the SSL connection.

Socket is not ready for send/recv wait till it’s ready and try again. This return code is only returned from curl_easy_recv and curl_easy_send (Added in 7.18.2)

Failed to load CRL file (Added in 7.19.0)

Issuer check failed (Added in 7.19.0)

The FTP server does not understand the PRET command at all or does not support the given argument. Be careful when using CURLOPT_CUSTOMREQUEST, a custom LIST command will be sent with PRET CMD before PASV as well. (Added in 7.20.0)

Mismatch of RTSP CSeq numbers.

Mismatch of RTSP Session > CURLE_FTP_BAD_FILE_LIST (87)

Unable to parse FTP file list (during FTP wildcard downloading).

Chunk callback reported error.

(For internal use only, will never be returned by libcurl) No connection available, the session will be queued. (added in 7.30.0)

Failed to match the pinned key specified with CURLOPT_PINNEDPUBLICKEY.

Status returned failure when asked with CURLOPT_SSL_VERIFYSTATUS.

Stream error in the HTTP/2 framing layer.

An API function was called from ins > CURLE_AUTH_ERROR (94)

An authentication function returned an error.

These error codes will never be returned. They were used in an old libcurl version and are currently unused.

CURLMcode

This is the generic return code used by functions in the libcurl multi interface. Also cons > CURLM_CALL_MULTI_PERFORM (-1)

This is not really an error. It means you should call curl_multi_perform again without doing select() or similar in between. Before version 7.20.0 this could be returned by curl_multi_perform, but in later versions this return code is never used.

Things are fine.

The passed-in handle is not a val > CURLM_BAD_EASY_HANDLE (2)

An easy handle was not good/val > CURLM_OUT_OF_MEMORY (3)

This can only be returned if libcurl bugs. Please report it to us!

The passed-in socket is not a val > CURLM_UNKNOWN_OPTION (6)

curl_multi_setopt() with unsupported option (Added in 7.15.4)

An easy handle already added to a multi handle was attempted to get added a second time. (Added in 7.32.1)

An API function was called from ins >The «share» interface will return a CURLSHcode to indicate when an error has occurred. Also cons > CURLSHE_OK (0)

All fine. Proceed as usual.

An inval > CURLSHE_IN_USE (2)

The share object is currently in use.

An inval > CURLSHE_NOMEM (4)

Not enough memory was available. (Added in 7.12.0)

The requested sharing could not be done because the library you use don’t have that particular feature enabled. (Added in 7.23.0)

CURLUcode

An argument that should be a CURLU pointer was passed in as a NULL.

A NULL pointer was passed to the ‘part’ argument of curl_url_get.

A malformed input was passed to a URL API function.

The port number was not a decimal number between 0 and 65535.

This libcurl build doesn’t support the given URL scheme.

URL decode error, most likely because of rubbish in the input.

A memory function failed.

Credentials was passed in the URL when prohibited.

Парсинг от А до Я

Блог о программировании парсеров и web-автоматизации

Поиск по блогу

понедельник, 14 сентября 2009 г.

CURL. First steps

Как правило, изучение нового инструмента всегда откладывается: «Потом. Еще успеется. Надо собраться с мыслями и все такое». Именно так у меня когда-то откладывалось начало работы с библиотекой CURL (Client URL) . Эта статья будет для новичков. Главная ее цель — показать, что ничего страшного здесь нет. И можно получить базовые представления за те 10 минут, которые уйдут на чтение статьи. Более того — вы сразу можете опробовать новые навыки в деле, используя листинги простейших функций, которые я буду приводить по мере раскрытия темы.

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


Для того, чтобы начать работать с библиотекой CURL, ее надо установить. Инструкций установки CURL в сети найти можно много, поэтому останавливаться на этом не буду.

Перейдем сразу к работе. Разберем простой пример использования библиотеки CURL для получения кода страницы. Этот пример вы можете часто встретить в листингах скриптов (я взяла его с какого-то форума).

В эту функцию в качестве параметра передается URL, а возвращается ассоциативный массив, состоящий из заголовка и содержимого страницы. Функции CURL автоматически управляют редиректами, кукисами, декомпрессией файлов.

(Как хорошо, что в блоггере появилась простая возможность скрывать часть поста под кат! Сейчас, наконец, на главной не будет простыней листингов. А читателям, я думаю, будет не сложно один лишний раз кликнуть на «Читать далее»)

Параметры заголовка можно посмотреть в мануалах-описаниях функции curl_getinfo().

Как видим, параметров там немало:

Наиболее полезными для нас будут:
url — адрес после всех редиректов;
content_type — «тип» контента (например, «text/html; charset=utf-8»);
http_code — код ответа (если все прошло благополучно — 200. О кодах я уже писала на этом блоге раньше, в статье о HTTP-протоколе).

Дополнительными возвращаемыми параметрами приведенной выше функции будут:
errno — код ошибки CURL (если без ошибок — вернется 0);
errmsg — сообщение об ошибке (определяется по коду ошибки errno);
content — содержимое страницы (HTML-код, картинка, т.д.).

Илон Маск рекомендует:  Работа с текстом и строками

Когда все прошло удачно, errno = 0 , http_code = 200 и в переменной content находится содержимое страницы.

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

Если возникает ошибка, связанная с отсутствием страницы (404) или с недостаточными правами, errno = 0, http_code — статус-код, отличный от 200, а в переменной content будет страница сайта, сообщающая об ошибке.

Как видите, функция get_web_page() расширена. Она не просто позволяет получить контент, но еще и выявить наличие ошибок при его получении. Если вам надо просто получить контент — можно переделать ее под себя. Как правило, каждый разработчик со временем выделяет себе нужные функции в библиотечку (если поискать в сети — можно найти различные варианты классов для работы с CURL, выложенные разными разработчиками. Тут уж дело вкуса — берете чужое (и при необходимости дорабатываете) или делаете свое).

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

Но разберемся с функциями в листинге по порядку. Чтобы получить web-страницу с помощью библиотеки CURL, необходимо действовать в соответствии со следующей инструкцией:

1. Инициализируем работу CURL с помощью curl_init() . При использовании этой функции создается объект для управления запросом. Единственным аргументом функции является URL, который сохраняется до тех пор, пока curl_exec() не выполнит запрос. В приведенном в начале статьи примере в листинге мы видели строку:

После ее выполнения переменной $ch будет присвоен дескриптор объекта CURL для работы с адресом $url.

Есть еще немного другой способ выполнить то же самое.

Как видно, адрес не передается в виде параметра, а указывается уже после инициализации с помощью curl_setopt. Curl_setopt — это как раз следующий шаг, рассмотрим его подробнее.

2. С помощью curl_setopt() настраиваем параметры запроса и их значения . Параметров на самом деле немало. Все их помнить необязательно, но ознакомиться стоит (http://ru.php.net/manual/en/function.curl-setopt.php).

Наиболее важными считаются:

— CURLOPT_RETURNTRANSFER
Когда он равен true (или 1), CURL возвращает содержимое страницы с помощью curl_exec(). Когда значение этого параметра равно false, CURL выводит содержимое страницы на экран. Для парсинга нам всегда придется работать с CURLOPT_RETURNTRANSFER = 1, так как всегда требуется дальнейшая обработка содержимого.

— CURLOPT_HEADER
Когда этот параметр установлен в true (или 1), CURL включает в страницу заголовки ответа HTTP-сервера. Когда false — они не включаются, что делает результат более «удобным» для дальнейшего разбора. Причем доступ к заголовкам при CURLOPT_HEADER=false получить можно, через упоминавшуюся выше функцию curl_getinfo().

В разряд «основных» входят также следующие параметры:

— CURLOPT_FOLLOWLOCATION
Когда параметр установлен в true, редирект осуществляется CURL-ом автоматически. Когда false — после первой же попытки редиректа происходит остановка работы и возвращается ошибка.

— CURLOPT_ENCODING
Когда данный параметр пустой, CURL управляет декомпрессией и компрессией. «Сжатые» страницы автоматически распаковываются перед тем, как данные возвращаются с помощью curl_exec().

Параметры, которые еще следует указывать, чтобы серфинг по вебу с использованием CURL был «наиболее грамотным»:

— CURLOPT_USERAGENT
Ну, это понятно. User agent — идентифицирует приложение, с помощью которого выполнен запрос (например, веббраузер). Если этот параметр оставить пустым, некоторые веб-ресурсы могут не ответить на запрос.

— CURLOPT_AUTOREFERER
Реферер — URL страницы, с которой пришли с запросом. Когда разрешены редиректы, то достаточно установить этот параметр равным true (или 1) — и CURL будет автоматически заполнять рефереры при редиректе.

Параметры для выявления ошибок при выполнении запросов:

— CURLOPT_CONNECTTIMEOUT — время в секундах, через которое CURL перестанет пытаться соединиться с сервером, который не отвечает;

— CURLOPT_TIMEOUT — время в секундах, через которое CURL перестанет пытаться получить содержимое страницы с сервера, который не отвечает/не доступен/и так далее;

— CURLOPT_MAXREDIRS — устанавливает максимальное количество возможных редиректов.

Следует так же написать здесь о том, что в версиях PHP, начиная с 5.1.3, появилась функция curl_setopt_array() , которая позволяет установить все параметры разом, загнав их в массив.

3. После установки всех нужных параметров используем curl_exec() . curl_exec() отправляет запрос и возвращает веб-страницу (HTML, XML, image и т.д.).

4. curl_errno() и curl_error() мы уже рассмотрели в начале статьи.
Еще раз, в качестве резюме:

— Системные ошибки возникают из-за неверного url-а, протокола, неправильного хоста, таймаутов (соединения и ответа) и зацикливания. При таких ошибказ curl_errno() возвращает отличный от нуля код (libcurl errors) и curl_error() возвращает сообщение, описывающее ошибку.

— Ошибки сайта возникают, если страница не найдена или нет доступа. В этом случае curl_errno() вернет ноль, а код-статус страницы можно уточнить через описанный выше curl_getinfo().

5. curl_close() уничтожает объект, очищает память . curl_close() надо вызывать по окончанию работы с объектом CURL.

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

Продолжаю благодарить людей, оказавших информационную поддержку RSSAdder-у. На этот раз это автор блога о мини-бизнесе и не только :)
___

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Применение cURL и libcurl в php

Вступление

Это руководство предназначено для тех web-разработчиков, которые хотят автоматизировать передачу файлов по сети либо взаимодействовать с другими Интернет — сервисами. Для чтения этой главы вам необходимо владеть пониманием принципа работы стратегии клиент — сервер и знать основы синтаксиса PHP.

cURL и libcurl — библиотеки, позволяющие серверу передавать файлы на удаленный компьютер, используя множество Интернет протоколов. Библиотеки имеют очень гибкую настройку и позволяют выполнить практически любой удаленный запрос. Используя их, web-сервер может выступать полноценным клиентом любого основанного на HTTP протоколе сервисе, к примеру: XML-RPC, SOAP, или WebDAV.

В этой статье будет рассказано о том, что такое cURL, как его использовать из командной строки, и о его применении в PHP.

Что такое cURL и libcurl

cURL является сокращением от «Client URLs». Он был разработан Daniel Stenberg в 1998 году как утилита, работающая из командной строки. Libcurl — переносимая библиотека, предоставляющая простой API-интерфейс к функциональности cURL. Библиотека безопасна в мультипоточной среде, совместима с IPv6 и поддерживает постоянные соединения. Интерфейс взаимодействия с php был добавлен Sterling Hughes.

cURL и libcurl могут использоваться для передачи информации с использованием таких протоколов, как HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET и FILE. Реализована поддержка практически всех *nix систем, а также Windows, OS/2, BeOS и некоторых других.

Библиотека curl — Open Source продукт с оригинальной MIT/X лицензией, позволяющей использовать этот пакет в любых: как коммерческих, так и некоммерческих целях, включать ее в свой дистрибутив (даже если он распространяется без открытого исходного кода).

Необходимо понимать, что cURL не имеет ничего общего с Curl Corporation, являющейся коммерческим производителем языка программирования Curl.

Инсталляция cURL

Для работы в PHP версии 4.2.3 и выше вам необходим cURL версии не ниже 7.9.0. Для работы в PHP версии 4.3.0 и выше вам необходим cURL версии не ниже 7.9.8.

Windows

Как и любой другой дополнительный модуль, он требует проинсталлированного дистрибутива PHP. Для установки cURL скопируйте файлы php4ts.dll, ssleay32.dll, php_curl.dll, msvcrt.dll из каталога DLL в системную директорию Windows, как правило, это:

После этого необходимо раскомментировать строку

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

Ближайшее зеркало, содержащее исходные коды и откомпилированные бинарные файлы для различных операционных систем, вы можете найти на сайте http://curl.haxx.se/ .

Поскольку cURL использует библиотеку openssl для SSL соединений, вначале необходимо установить на север SSL. В случае, если при инсталляции cURL библиотека openssl найдена не будет, произойдет установка cURL без поддержки SSL соединений.

Инсталляция cURL состоит из следующих шагов: ./configure, make, make install.

После этого необходимо пересобрать PHP c опцией —with-curl

О том, включена ли поддержка cURL в php, вы можете узнать, выполнив phpinfo().

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

Использование cURL из командной строки очень просто. Следующий пример запрашивает web-страницу и выводит ее в stdout

M(опция -L разрешает переадресации)

Также возможно использование cURL из командной строки при помощи PHP. Следующий пример запрашивает 3 страницы и выводит их на экран

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

Использование libcurl в php-скрипте является достаточно простым, особенно для таких операций, как генерация POST-запросов.

Для использования libcurl необходимо выполнить следующие шаги:

  • Инициализировать сессию cURL
  • Установить опции cURL (порядок установки опций не имеет значения)
  • Выполнить запрос
  • Завершить сессию cURL

Для демонстрации вышеперечисленного приведем практические примеры использования cURL для генерации POST-запроса, HTTP-авторизации, FTP-сессии.

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

Решение о том, что использовать: cURL или libcurl, — стоит принимать в зависимости от обстоятельств. В случае, если Вы пишете выполняемый из командной строки скрипт, либо у Вашего провайдера нет поддержки libcurl, имеет смысл использовать cURL. В остальных случаях использование libcurl оказывается более удобным.

Как пользоваться curl

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

Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.

Что такое curl?

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

Поддержка библиотеки curl была добавлена в множество различных языков программирования и платформ. Утилита curl — это независимая обвертка для этой библиотеки. Именно на этой утилите мы и остановимся в этой статье.

Команда curl

Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:

$ curl опции ссылка

Теперь рассмотрим основные опции:

  • -# — отображать простой прогресс-бар во время загрузки;
  • -0 — использовать протокол http 1.0;
  • -1 — использовать протокол шифрования tlsv1;
  • -2 — использовать sslv2;
  • -3 — использовать sslv3;
  • -4 — использовать ipv4;
  • -6 — использовать ipv6;
  • -A — указать свой USER_AGENT;
  • -b — сохранить Cookie в файл;
  • -c — отправить Cookie на сервер из файла;
  • -C — продолжить загрузку файла с места разрыва или указанного смещения;
  • -m — максимальное время ожидания ответа от сервера;
  • -d — отправить данные методом POST;
  • -D — сохранить заголовки, возвращенные сервером в файл;
  • -e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;
  • -E — использовать внешний сертификат SSL;
  • -f — не выводить сообщения об ошибках;
  • -F — отправить данные в виде формы;
  • -G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
  • -H — передать заголовки на сервер;
  • -I — получать только HTTP заголовок, а все содержимое страницы игнорировать;
  • -j — прочитать и отправить cookie из файла;
  • -J — удалить заголовок из запроса;
  • -L — принимать и обрабатывать перенаправления;
  • -s — максимальное количество перенаправлений с помощью Location;
  • -o — выводить контент страницы в файл;
  • -O — сохранять контент в файл с именем страницы или файла на сервере;
  • -p — использовать прокси;
  • —proto — указать протокол, который нужно использовать;
  • -R — сохранять время последнего изменения удаленного файла;
  • -s — выводить минимум информации об ошибках;
  • -S — выводить сообщения об ошибках;
  • -T — загрузить файл на сервер;
  • -v — максимально подробный вывод;
  • -y — минимальная скорость загрузки;
  • -Y — максимальная скорость загрузки;
  • -z — скачать файл, только если он был модифицирован позже указанного времени;
  • -V — вывести версию.

Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.

Илон Маск рекомендует:  Интерфейс пользователя

Как пользоваться curl?

Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.

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

Самая частая задача — это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:

Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:

curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md

А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md

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

curl -# -C — -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Если нужно, одной командой можно скачать несколько файлов:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

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

curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Данная команда скачает файл, только если он был изменен после 21 декабря 2020.

Ограничение скорости

Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:

curl —limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:

curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md

Передача файлов

Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:

curl -T login.txt ftp://speedtest.tele2.net/upload/

Или проверим отправку файла по HTTP, для этого существует специальный сервис:

В ответе утилита сообщит где вы можете найти загруженный файл.

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

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

curl -d «field1=val&fileld2=val1″http://posttestserver.com/post.php

Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:

curl -F «password=@pass;type=text/plain» http://posttestserver.com/post.php

Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.

Передача и прием куки

Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:

curl -c cookie.txt http://posttestserver.com/post.php

Затем можно отправить cookie curl обратно:

curl -b cookie.txt http://posttestserver.com/post.php

Передача и анализ заголовков

Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:

curl -I https://losst.ru

А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:

curl -I —header ‘If-Modified-Since: Mon, 26 Dec 2020 18:13:12 GMT’ https://losst.ru

Аутентификация curl

Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:

curl -u ftpuser:ftppass -T — ftp://ftp.testserver.com/myfile_1.txt

Точно так же будет выполняться аутентификация на серверах HTTP.

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

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

curl -x proxysever.test.com:3128 http://google.co.in

Выводы

В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.

если curl getinfo для HTTP CODE не возвращает код?

Я делаю обычный вызов curl к webservice, и я получаю код HTTP возврата через

Он возвращает мне $ code как 200 – это хорошо. Но регистрировать звонки завитки сейчас с недели, там, где мало звонков на тот же веб-сервис, который ничего не возвращал! так что в основном я получаю $ code пустым.

Может кто-нибудь сказать мне, что должно быть неправильно в этих сценариях, и если можно отладить его больше !?

Спасибо всем за информацию. Да, я тоже думал о том, что не дошел до сервера. Я обновлю свой код, чтобы получить curl_error && curl_errno и скоро обновит вас.

Еще раз спасибо.

———————- Обновление 2 ————————– ——————————- Я обновил свой код, чтобы вернуть мне ошибку № 7 – не удалось подключиться к хосту , Я зарегистрировал все завитки, так что в основном около 90-98% звонков завитка выполняется хорошо. Но только 1-2% вызовов завитка не могут найти хоста! Может ли кто-нибудь сказать мне, что может быть причиной? и как я могу это предотвратить?

Еще раз спасибо, Tanmay

Если код cURL HTTP ничего не возвращает (aka ‘0’), это означает, что по какой-то причине операция cURL завершилась неудачно. Было бы полезно захватить curl_error в ваших журналах, а также дать вам больше информации о том, что произошло в этих случаях (если они повторяются).

Когда вы регистрируете его, проверьте, если он пуст, если он есть, запишите больше, используя эту функцию

Я предполагаю, что он не сможет добраться до сервера.

Вы не можете получить curl_getinfo из curl_getinfo запроса. Проверьте результат curl_exec чтобы определить, был ли выполнен фактический запрос HTTP.

Тайм-аут соединения или что-то подобное – это «неудачный запрос». В этом случае curl_exec возвращает FALSE (как указано в руководстве curl_exec ).

Я предполагаю, что это ситуация, когда HTTP-заголовки не были возвращены, т. Е. Запрос не увенчался успехом. Возможно, интернет-доступ к серверу был недоступен или по какой-то другой причине недоступен.

Если вы посмотрите на документы curl_getinfo , он предлагает проверить, произошла ли ошибка в примере:

Curl_errno возвращает 0 вместо 6

В той же ситуации multi curl возвращает 0 с функцией curl_errno, несмотря на то, что curl_error возвращает сообщение об ошибке.

Если у вас есть PHP 5.2.x или выше (здесь лучше, но лучше). В этом случае я бы предложил использовать curl_multi_info_read() . (Смотрите: curl_multi_info_read() docs.)

Вы можете увидеть вывод curl_multi_info_read() , поставив его ближе к концу вашего кода (после строки echo «\n»; ), например:

Это, кажется, дает правильное errno (в частности, «result» => 6 ):

Примечание: проверено на установке PHP 5.2.8.

Команда curl. Синтаксис. Примеры использования

Сurl – утилита командной строки для скачивания и загрузки данных. Она выросла из проекта шведского программиста Даниэля Стенберга. Изначально в середине 90-х, на заре развития Интернета, он разрабатывал бота, который должен был загружать с веб-страницы курсы валют и сообщать пользователям IRC эквивалент шведских крон в долларах США. Со временем проект развивался, появлялась поддержка различных протоколов и новые функции. Теперь curl используется для передачи любых данных и ряда других полезных задач. Рассмотрим основные моменты работы с этим инструментом.

Синтаксис и опции curl

Синтаксис команды следующий:

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

-# — отображать простой прогресс-бар во время загрузки;
-0 — использовать протокол http 1.0;
-1 — использовать протокол шифрования tlsv1;
-2 — использовать sslv2;
-3 — использовать sslv3;
-4 — использовать ipv4;
-6 — использовать ipv6;
-A — указать свой USER_AGENT;
-b — сохранить Cookie в файл;
-c — отправить Cookie на сервер из файла;
-C — продолжить загрузку файла с места разрыва или указанного смещения;
-m — максимальное время ожидания ответа от сервера;
-d — отправить данные методом POST;
-D — сохранить заголовки, возвращенные сервером в файл;
-e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;
-E — использовать внешний сертификат SSL;
-f — не выводить сообщения об ошибках;
-F — отправить данные в виде формы;
-G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
-H — передать заголовки на сервер;
-I — получать только HTTP заголовок, а все содержимое страницы игнорировать;
-j — прочитать и отправить cookie из файла;
-J — удалить заголовок из запроса;
-L — принимать и обрабатывать перенаправления;
-s — максимальное количество перенаправлений с помощью Location;
-o — выводить контент страницы в файл;
-O — сохранять контент в файл с именем страницы или файла на сервере;
-p — использовать прокси;
—proto — указать протокол, который нужно использовать;
-R — сохранять время последнего изменения удаленного файла;
-s — выводить минимум информации об ошибках;
-S — выводить сообщения об ошибках;
-T — загрузить файл на сервер;
-v — максимально подробный вывод;
-y — минимальная скорость загрузки;
-Y — максимальная скорость загрузки;
-z — скачать файл, только если он был модифицирован позже указанного времени;
-V — вывести версию.

Основные опции мы рассмотрим на простых примерах.

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

Опция -V или —version выводит не только версию curl, но и краткую информацию о поддерживаемых протоколах и функциях:

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

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

Cохранение файла под исходным именем (yourfile) в текущей рабочей директории.

Cохранение файла под именем newfile в директории /tmp/examplе/.

Возобновление прерванной загрузки

Если скачивание по какой-то причине было прервано (например, пользователь нажал Ctrl+C), вы легко можете возобновить его с момента остановки при помощи опции -C – (дефис, С, тире):

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

Следующая команда позволит вам скачать info.html с http://yoursite.com и about.html c http://mysite.com в один прием:

Если использовать curl вместе с командой xargs, можно скачивать файлы в соответствии со списком URL, заданном в файле (в данном примере listurls.txt):

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

Если вы подключены через прокси-сервер, нужно указать его команде curl при помощи следующих опций (в данном примере имя сервера proxy.yourdomain.com, порт 8080, имя пользователя user, пароль qwerty1234):

Если ваш прокси-сервер не требует аутентификации, опцию -U user:qwerty1234 указывать не нужно.

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

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

Для запроса HTTP-заголовков веб-сайта выполните команду с опцией -I:

$ curl -I https://itproffi.ru

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

cURL POST-запросы с параметрами

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

Этим приемом можно пользоваться для симуляции работы обычных веб-форм.

Следующая команда скачивает в текущую рабочую директорию файл yourfile с удаленного FTP-сервера ftp://yourftpserver (имя пользователя user, пароль qwerty1234):

Если FTP-сервер поддерживает анонимный вход, параметр –u с именем пользователя и пароля указывать не нужно.

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

Для загрузки локального файла mylocalfile.tar.gz воспользуйтесь следующей командой:

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

Агент пользователя – часть информации HTTP-запроса. Она показывает, каким браузером пользуется клиент. Можно посмотреть, что имеющаяся версия curl передает по умолчанию и установить новое значение:

Хотите посмотреть, какие файлы cookie скачиваются на ваш компьютер, когда вы заходите на определенный сайт? Опция —cookie-jar сохраняет их список в файл, который в дальнейшем можно просмотреть при помощи команды cat.

Полученные в предыдущем примере файлы cookie можно использовать в дальнейших запросах к тому же самому сайту:

Изменение разрешения имен

Если вы веб-разработчик и хотите протестировать локальную версию сайта, прежде чем загружать его на сервер, при помощи опции —resolve можно указать curl выполнять разрешение имени вашего сайта на адрес локального узла, например:

Таким образом, при запросе на http://www.yourdomain.com curl будет запрашивать сайт с локального узла, а не использовать DNS или файл /etc/hosts.

Ограничение скорости скачивания

Чтобы curl не занимал всю пропускную способность канала, можно ограничить скорость скачивания при помощи опции —limit-rate:

Заключение

Мы рассмотрели краткую историю появления curl и наиболее характерные примеры применения этой команды. Для более подробной информации можно обратиться к соответствующей man-странице.

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

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