curl_setopt
true для отмены индикатора прогресса при передачах cURL.
Замечание:
PHP автоматически устанавливает этот параметр в true , меняйте его только для отладочных целей.
Используемые HTTP-методы авторизации. Используемые параметры: CURLAUTH_BASIC , CURLAUTH_DIGEST , CURLAUTH_GSSNEGOTIATE , CURLAUTH_NTLM , CURLAUTH_ANY и 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
Метод аутентификации SOCKS5, который нужно использовать. Варианты: CURLAUTH_BASIC , CURLAUTH_GSSAPI , CURLAUTH_NONE .
Побитовый оператор | (или) можно использовать для объединения нескольких методов. Если это будет сделано, cURL будет опрашивать сервер, чтобы выяснить, какие методы он поддерживает, и выбрать наилучший.
CURLAUTH_BASIC разрешает аутентификацию по constant пользователя/пароля.
CURLAUTH_GSSAPI разрешает аутентификацию GSS-API.
CURLAUTH_NONE не разрешает аутентификацию.
По умолчанию CURLAUTH_BASIC|CURLAUTH_GSSAPI . Установите действительное имя пользователя и пароль с помощью параметра CURLOPT_PROXYUSERPWD .
Замечание:
Рекомендуется не устанавливать эту опцию и оставить значение по умолчанию. Установка в 2 или 3 опасно и допускает применение известных уязвимостей в SSLv2 и SSLv3.
Замечание:
Лучше всего не устанавливать это и разрешать использовать значение по умолчанию CURL_SSLVERSION_DEFAULT , которое попытается выяснить версию протокола удалённого SSL.
Собственный метод запроса, используемый вместо «GET» или «HEAD» при выполнении HTTP-запроса. Это полезно при запросах «DELETE» или других, более редких HTTP-запросах. Корректными значениями будут такие как «GET» , «POST» , «CONNECT» и так далее; т.е. не вводите здесь всю строку с HTTP-запросом. Например, указание «GET /index.html HTTP/1.0\r\n\r\n» будет неправильным.
Замечание:
Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.
Протокол по умолчанию, если он отсутствует в схеме URL.
Устанавливает имя сетевого интерфейса, к которому привязан DNS. Это должно быть имя интерфейса, а не адрес.
Установить локальный IPv4-адрес, по которому доступне DNS. Адрес должен быть представлен в виде строки, содержащий одно число.
Установить локальный IPv6-адрес, по которому доступне DNS. Адрес должен быть представлен в виде строки, содержащий одно число.
Замечание:
Аутентификация Secure Remote Password (SRP) для TLS обеспечивает взаимную аутентификацию, если обе стороны имеют общий секрет. Чтобы использовать TLS-SRP, вы также должны установить параметры CURLOPT_PROXY_TLSAUTH_USERNAME и CURLOPT_PROXY_TLSAUTH_PASSWORD .
Тайный пароль, необходимый для использования закрытого ключа SSL, указанного параметром CURLOPT_SSLKEY .
Замечание:
Так как этот параметр содержит ценный пароль, помните, что данный PHP-скрипт нужно хранить в безопасном месте.
Для следующих значений параметра option , параметр value должен быть массивом:
Параметр | Устанавливаемое значение value | Замечания |
---|---|---|
CURLOPT_CONNECT_TO | Соединяться с указанный хостом по указанному порту, игнорируя URL. Принимает массив строк формата HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT . | Добавлено в cURL 7.49.0. Доступно с PHP 7.0.7. |
CURLOPT_HTTP200ALIASES | Массив HTTP 200 ответов, которые будут трактоваться корректными ответами, а не ошибочными. | Добавлен в cURL 7.10.3. |
CURLOPT_HTTPHEADER | Массив устанавливаемых HTTP-заголовков, в формате array(‘Content-type: text/plain’, ‘Content-length: 100’) | |
CURLOPT_POSTQUOTE | Массив FTP-команд, выполняемых на сервере, после выполнения FTP-запроса. | |
CURLOPT_PROXYHEADER | Массив пользовательских HTTP-заголовков для отправки на прокси | Добавлено в cURL 7.37.0. Доступно с PHP 7.0.7. |
CURLOPT_QUOTE | Массив FTP-команд, выполняемых на сервере, перед выполнением FTP-запроса. | |
CURLOPT_RESOLVE | Предоставляет адрес для определённой пары хоста и порта. Массив, содержащий строки состоящие из имени хоста, порта и IP-адреса, разделённых двоеточием. Пример: array(«example.com:80:127.0.0.1») | Добавлено в cURL 7.21.3. |
Для следующих значений параметра 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 в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
8.0.0 | handle теперь ожидает экземпляр CurlHandle ; раньше, ожидался ресурс ( resource ). |
7.3.15, 7.4.3 | Добавлено CURLOPT_HTTP09_ALLOWED . |
7.3.0 | Введены CURLOPT_ABSTRACT_UNIX_SOCKET , CURLOPT_KEEP_SENDING_ON_ERROR , CURLOPT_PRE_PROXY , CURLOPT_PROXY_CAINFO , CURLOPT_PROXY_CAPATH , CURLOPT_PROXY_CRLFILE , CURLOPT_PROXY_KEYPASSWD , CURLOPT_PROXY_PINNEDPUBLICKEY , CURLOPT_PROXY_SSLCERT , CURLOPT_PROXY_SSLCERTTYPE , CURLOPT_PROXY_SSL_CIPHER_LIST , CURLOPT_PROXY_SSLKEY , CURLOPT_PROXY_SSLKEYTYPE , CURLOPT_PROXY_SSL_OPTIONS , CURLOPT_PROXY_SSL_VERIFYHOST , CURLOPT_PROXY_SSL_VERIFYPEER , CURLOPT_PROXY_SSLVERSION , CURLOPT_PROXY_TLSAUTH_PASSWORD , CURLOPT_PROXY_TLSAUTH_TYPE , CURLOPT_PROXY_TLSAUTH_USERNAME , CURLOPT_SOCKS5_AUTH , CURLOPT_SUPPRESS_CONNECT_HEADERS , CURLOPT_DISALLOW_USERNAME_IN_URL , CURLOPT_DNS_SHUFFLE_ADDRESSES , CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS , CURLOPT_HAPROXYPROTOCOL , CURLOPT_PROXY_TLS13_CIPHERS , CURLOPT_SSH_COMPRESSION , CURLOPT_TIMEVALUE_LARGE и CURLOPT_TLS13_CIPHERS . |
7.0.7 | Добавлены CURL_HTTP_VERSION_2 , CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE , CURL_HTTP_VERSION_2TLS , CURL_REDIR_POST_301 , CURL_REDIR_POST_302 , CURL_REDIR_POST_303 , CURL_REDIR_POST_ALL , CURL_VERSION_KERBEROS5 , CURL_VERSION_PSL , CURL_VERSION_UNIX_SOCKETS , CURLAUTH_NEGOTIATE , CURLAUTH_NTLM_WB , CURLFTP_CREATE_DIR , CURLFTP_CREATE_DIR_NONE , CURLFTP_CREATE_DIR_RETRY , CURLHEADER_SEPARATE , CURLHEADER_UNIFIED , CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE , CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE , CURLMOPT_MAX_HOST_CONNECTIONS , CURLMOPT_MAX_PIPELINE_LENGTH , CURLMOPT_MAX_TOTAL_CONNECTIONS , CURLOPT_CONNECT_TO , CURLOPT_DEFAULT_PROTOCOL , CURLOPT_DNS_INTERFACE , CURLOPT_DNS_LOCAL_IP4 , CURLOPT_DNS_LOCAL_IP6 , CURLOPT_EXPECT_100_TIMEOUT_MS , CURLOPT_HEADEROPT , CURLOPT_LOGIN_OPTIONS , CURLOPT_PATH_AS_IS , CURLOPT_PINNEDPUBLICKEY , CURLOPT_PIPEWAIT , CURLOPT_PROXY_SERVICE_NAME , CURLOPT_PROXYHEADER , CURLOPT_SASL_IR , CURLOPT_SERVICE_NAME , CURLOPT_SSL_ENABLE_ALPN , CURLOPT_SSL_ENABLE_NPN , CURLOPT_SSL_FALSESTART , CURLOPT_SSL_VERIFYSTATUS , CURLOPT_STREAM_WEIGHT , CURLOPT_TCP_FASTOPEN , CURLOPT_TFTP_NO_OPTIONS , CURLOPT_UNIX_SOCKET_PATH , CURLOPT_XOAUTH2_BEARER , CURLPROTO_SMB , CURLPROTO_SMBS , CURLPROXY_HTTP_1_0 , CURLSSH_AUTH_AGENT и CURLSSLOPT_NO_REVOKE . |
Примеры
Пример #1 Инициализация сеанса CURL и загрузка веб-страницы
// создание нового ресурса 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 );
?>
Примечания
Замечание:
Передача массива в CURLOPT_POSTFIELDS закодирует данные в виде multipart/form-data, тогда как передача URL-кодированной строки закодирует данные в виде application/x-www-form-urlencoded.
Смотрите также
CURL — если сервер отдает редирект
Бывает так что сервер перенаправляет на другой URL. Например Google, если перейти на https://google.com c IP из РФ он делает 302-й редирект на https://www.google.ru . Чтобы CURL сам переходил на новый URL, нужно добавить параметр:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
function curl_redir_exec($ch) < static $curl_loops = 0; static $curl_max_loops = 20; if ($curl_loops >= $curl_max_loops) < $curl_loops = 0; return false; >curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); $dd = explode("\r\n\r\n", $data); // или $dd = explode("\r\n", $data); $header = $dd[0]; $data = @$dd[1]; $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) < $matches = array(); preg_match('/Location:(.*?)\n/', $header, $matches); $url = @parse_url(trim(array_pop($matches))); if (!$url) < $curl_loops = 0; return $data; >$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); if (empty($url['scheme'])) < $url['scheme'] = $last_url['scheme']; >if (empty($url['host'])) < $url['host'] = $last_url['host']; >if (empty($url['path'])) < $url['path'] = $last_url['path']; >$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query'] ? '?' . $url['query'] : ''); curl_setopt($ch, CURLOPT_URL, $new_url); return curl_redir_exec($ch); > else < $curl_loops = 0; return $data; >> $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://google.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_redir_exec($ch); curl_close($ch); echo $html;
PHP: Following redirects with cURL.
This is a short guide on how to force PHP’s cURL functions to follow a HTTP redirect. By default, cURL will not follow any redirect headers that are sent by the server.
301 Moved.
If you send a cURL request that doesn’t follow redirects, you may end receiving the following response from the server:
301 Moved. The document has moved here.
Note that you might also receive a 302 header. This all depends on the server and the URL that you are sending a request to.
Take the following PHP example:
//The URL of the page that we want to retrieve. $url = 'http://google.com'; //Initiate cURL and pass it the URL we want to retrieve. $ch = curl_init($url); //Tell cURL to return the output as a string. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //Execute the cURL request and return the output to a string. $response = curl_exec($ch); //Print out the response to the browser. echo $response;
The above code will output “301 Moved” response because Google has a 301 redirect on the URL in question and our cURL client has not been configured to follow it.
PHP and the CURLOPT_FOLLOWLOCATION option.
This is where the CURLOPT_FOLLOWLOCATION option comes in useful. This option tells the cURL client that it should automatically follow any redirects specified in the “Location:” header. Hence the name “follow location”.
In PHP, you can use this option like so:
//Tell cURL that it should follow any redirects. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
If you add the line above to our original code, you will see that our cURL client now follows Google’s 301 redirect.
Using the CURLOPT_MAXREDIRS option.
If your cURL client follows redirects, then it is a good idea to also use the CURLOPT_MAXREDIRS option. This allows us to specify the maximum number of redirects that we should follow before stopping. If we do not set this option, then a simple server misconfiguration could kill our client by sending it too many redirect headers. The CURLOPT_FOLLOWLOCATION option is recursive, which means that you could get stuck in an endless redirect loop.
//Tell cURL that it should only follow 3 redirects at most. curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
The PHP code above tells cURL that it should only follow 3 redirects. If a 4th redirect is encountered, a “CURLE_TOO_MANY_REDIRECTS” error will be thrown.