curl_setopt
TRUE для отмены индикатора прогресса при передачах cURL.
Замечание:
PHP автоматически устанавливает этот параметр в TRUE , меняйте его только для отладочных целей.
Замечание:
Эта опция устарела, так как никогда не была реализована в cURL и не работала.
Используемые HTTP методы авторизации. Используемые параметры: CURLAUTH_BASIC , CURLAUTH_DIGEST , CURLAUTH_GSSNEGOTIATE , CURLAUTH_NTLM , CURLAUTH_ANY , and CURLAUTH_ANYSAFE .
Можно использовать побитовый оператор | (или) для комбинации нескольких методов вместе. В этом случае cURL опросит сервер на предмет поддерживаемых методов авторизации и выберет лучший из них.
CURLAUTH_ANY — это псевдоним CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.
CURLAUTH_ANYSAFE — это псевдоним CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.
Битовая маска из значений CURLPROTO_* . Данная маска ограничивает используемые libcurl протоколы. Это позволяет иметь libcurl, работающую с большим количеством протоколов, и ограничивать работу определенных передач только для некоторого их набора. По умолчанию, libcurl использует все поддерживаемые протоколы. Смотрите также параметр CURLOPT_REDIR_PROTOCOLS .
Корректные значения протоколов: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAPS , CURLPROTO_DICT , CURLPROTO_FILE , CURLPROTO_TFTP , CURLPROTO_ALL
Замечание:
Рекомендуется не устанавливать эту опцию и оставить значение по умолчанию. Установка в 2 или 3 опасно и допускает применение известных уязвимостей в SSLv2 и SSLv3.
Собственный метод запроса, используемый вместо «GET» или «HEAD» при выполнении HTTP-запроса. Это полезно при запросах «DELETE» или других, более редких HTTP-запросах. Корректными значениями будут слова наподобие «GET», «POST», «CONNECT» и так далее; т.е. не вводите здесь всю строку с HTTP-запросом. Например, указание «GET /index.html HTTP/1.0\r\n\r\n» будет неправильным.
Замечание:
Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.
Тайный пароль, необходимый для использования закрытого ключа SSL, указанного параметром CURLOPT_SSLKEY .
Замечание:
Так как этот параметр содержит ценный пароль, помните, что данный PHP-скрипт нужно хранить в безопасном месте.
Для следующих значений параметра option , параметр value должен быть массивом:
Параметр | Устанавливаемое значение value | Замечания |
---|---|---|
CURLOPT_HTTP200ALIASES | Массив HTTP 200 ответов, которые будут трактоваться корректными ответами, а не ошибочными. | Добавлен в версии cURL 7.10.3. |
CURLOPT_HTTPHEADER | Массив устанавливаемых HTTP-заголовков, в формате array(‘Content-type: text/plain’, ‘Content-length: 100’) | |
CURLOPT_POSTQUOTE | Массив FTP-команд, выполняемых на сервере, после выполнения FTP-запроса. | |
CURLOPT_QUOTE | Массив FTP-команд, выполняемых на сервере, перед выполнением FTP-запроса. |
Для следующих значений параметра option , параметр value должен быть потоковым дескриптором (возвращаемым, например, функцией fopen() ):
Параметр | Устанавливаемое значение value |
---|---|
CURLOPT_FILE | Файл, в который будет записан результат передачи. По умолчанию используется поток вывода STDOUT (окно браузера). |
CURLOPT_INFILE | Файл, из которого должно идти чтение данных, при загрузке на сервер. |
CURLOPT_STDERR | Альтернативное файл для вывода ошибок, используемый вместо потока ошибок STDERR. |
CURLOPT_WRITEHEADER | Файл, в который будут записаны заголовки текущей операции. |
Callback-функция принимает пять параметров. Первый является декскриптором cURL, второй — общим количеством байт, которое ожидается загрузить с сервера, третий — количество уже загруженных байт, четвертый — общее количество байт, которое ожидается отправить на сервер, и пятый — количество уже отправленных байт.
Замечание:
Callback-функция вызывается только, если опция CURLOPT_NOPROGRESS установлена в значение FALSE .
Можно вернуть ненулевое значение, чтобы отменить передачу. В этом случае будет выставлена ошибка CURLE_ABORTED_BY_CALLBACK .
Другие значения:
Параметр | Устанавливаемое значение value |
---|---|
CURLOPT_SHARE | Результат выполнения функции curl_share_init() . Позволяет обработчику cURL использовать данные из общего обработчика. |
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.6.0 | Опция CURL_SAFE_UPLOAD теперь имеет значение по умолчанию равное TRUE . |
5.6.0 | Удалена опция CURLOPT_CLOSEPOLICY и связанные с ней значения. |
5.5.0 | Ресурс cURL добавлен первым аргументом в callback-функцию CURLOPT_PROGRESSFUNCTION . |
5.5.0 | Добавлена опция CURLOPT_SHARE . |
5.3.0 | Добавлена опция CURLOPT_PROGRESSFUNCTION . |
5.2.10 | Добавлены параметры CURLOPT_PROTOCOLS и CURLOPT_REDIR_PROTOCOLS . |
5.1.0 | Добавлены параметры CURLOPT_AUTOREFERER , CURLOPT_BINARYTRANSFER , CURLOPT_FTPSSLAUTH , CURLOPT_PROXYAUTH и CURLOPT_TIMECONDITION . |
5.0.0 | Добавлены параметры CURLOPT_FTP_USE_EPRT , CURLOPT_NOSIGNAL , CURLOPT_UNRESTRICTED_AUTH , CURLOPT_BUFFERSIZE , CURLOPT_HTTPAUTH , CURLOPT_PROXYPORT , CURLOPT_PROXYTYPE , CURLOPT_SSLCERTTYPE и CURLOPT_HTTP200ALIASES . |
Примеры
Пример #1 Инициализация сеанса CURL и загрузка web-страницы
// создание нового ресурса cURL
$ch = curl_init ();
?php
// установка URL и других необходимых параметров
curl_setopt ( $ch , CURLOPT_URL , «http://www.example.com/» );
curl_setopt ( $ch , CURLOPT_HEADER , false );
// загрузка страницы и выдача её браузеру
curl_exec ( $ch );
// завершение сеанса и освобождение ресурсов
curl_close ( $ch );
?>
Пример #2 Закачка файла
$data = array( ‘name’ => ‘Foo’ , ‘file’ => ‘@/home/user/test.png’ );
curl_setopt ( $ch , CURLOPT_URL , ‘http://localhost/upload.php’ );
curl_setopt ( $ch , CURLOPT_POST , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $data );
Результат выполнения данного примера:
Array ( [name] => Foo ) Array ( [file] => Array ( [name] => test.png [type] => image/png [tmp_name] => /tmp/phpcpjNeQ [error] => 0 [size] => 279 ) )
Примечания
Замечание:
Передача массива в CURLOPT_POSTFIELDS закодирует данные в виде multipart/form-data, тогда как передача URL-кодированной строки закодирует данные в виде application/x-www-form-urlencoded.
Смотрите также
Использование curl в PHP для доступа к сайтам по Https(ssl/tls)
В Php для доступа к сайтам по http, https, FTP часто используется библиотека curl.
На практике, однако, наиболее часто используется протокол, HTTP особенно при соединении server-to-server . Curl же используется при таких методах доступа как
XML-RPC или REST для запроса ресурса. Либо же если производится соединение с сервером посредством какого-либо API. Ну и последним использованием curl в php можно назвать парсинг ресурсов.
Тем не менее, при попытке получить доступ к ресурсу по HTTPS, например, через API, могут возникнуть определенные проблемы в подключении, о которых и пойдет речь.
Основной проблемой при данном соединении с использованием Curl можно назвать невозможность библиотекой проверить недоверенный сертификат сайта. Смоделируем ситуацию.
Предположим мы используем следующий код
// Initialize session and set URL. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // Set so curl_exec returns the result instead of outputting it. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Get the response and close the channel. $response = curl_exec($ch); curl_close($ch);
Если $url указывает на https ресурс как результат выполнения данного кода мы получим
Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Это происходит потому, что Curl не был настроен доверять HTTPS сертификату сервера.
Понятия сертификаты и PKI вращается вокруг доверия сертификатов (CA), и по умолчанию, Curl настроен не доверять CA, таким образом, он не будет доверять сертификату любого веб-сервера. Так почему же не у нас не возникли проблемы посещения HTTPs сайтов через веб-браузер? Разработчики браузера включают в себя список корневых доверенных центров сертификации, у которых может быть приобретен сертификат сайта.
Таким образом необходимо либо разрешить Curl доверять нашему сертификату, либо запретить проверку доверия к сертификату при использовании библиотеки.
Обратимся к более простому решению – запретим Curl проверять сертификат, фактически настроив на доверие к любому полученному сертификату.
Это не очень верное решение с точки зрения безопасности, но действенно. Для выполнения данной настройки перед вызовом curl curl_exec() достаточно вставить следующую строку
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Это заставляет библиотеку Curl принимать любые сертификаты, но если Вы обеспокоены, что у Вас принимаются все сертификаты без разбора необходимо сделать немного больше действий.
Оговоримся, что будем использовать такой параметр Curl CURLOPT_CAINFO и сертификат, полученный с сайта.
Давайте извлечем сертификат, используя наш броузер.
Откроем сайт и увидим следующую картинку в нижней части броузера.
Нажмем «просмотреть сертификат»
И далее в пункте «Детали» на странице сертификатов выберем наш сертификат. Это доверенный корневой сертификат.
Нам необходимо его экспортировать для дальнейшего использования Curl
Нажмем “Экспорт”, и сохраним наш корневой сертификат как X.509 Certificate (PEM).
Далее нам необходимо модифицировать настройки cURL для использования CA сертификата с параметром CURLOPT_CAINFO, где мы укажем место сохранения сертификата .
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt");
Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed