PHP CURL – функції та приклади використання. Просунуте використання cURL у PHP Curl параметри командного рядка
(PHP 4> = 4.0.2, PHP 5, PHP 7)
curl_setopt - Встановлює параметр для сеансу CURL
Список параметрів
Дескриптор cURL, отриманий з curl_init().
Встановлюваний параметр CURLOPT_XXX.
Значення параметра option.
bool:
Параметр | Зауваження | |
---|---|---|
CURLOPT_AUTOREFERER | TRUEдля автоматичного встановлення поля Referer:у запитах, перенаправлених заголовком Location:. | |
CURLOPT_BINARYTRANSFER | TRUEдля повернення необробленої відповіді під час використання константи CURLOPT_RETURNTRANSFER. | З PHP 5.1.3 ця опція більше не потрібна: необроблений висновок завжди повертається під час використання опції CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | TRUEдля вказівки поточного сеансу розпочати нову "сесію" cookies. Це змусить libcurl проігнорувати всі "сесійні" cookies, які вона мала б завантажити, отримані з попередньої сесії. За замовчуванням, libcurl завжди зберігає та завантажує всі cookies, незалежно від того, чи є вони сесійними чи ні. "Сесійні" cookie - це cookie без терміну закінчення, які повинні існувати тільки для поточної "сесії". | |
CURLOPT_CERTINFO | TRUEдля виведення інформації про сертифікат SSL у потік STDERRпри безпечних з'єднаннях. | Додано до cURL 7.19.1. Доступна з версії PHP 5.3.2. Для коректної роботи вимагає увімкненої опції CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | TRUEповідомляє бібліотеці, щоб вона провела необхідні аутентифікацію проксі та налаштування з'єднання, але не передавала дані. Ця опція реалізована для HTTP, SMTP та POP3. | Додано до 7.15.2. Доступна з версії PHP 5.5.0. |
CURLOPT_CRLF | TRUEдля перетворення кінців рядків Unix на CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | TRUEвикористання глобального кешу DNS. Цей параметр не є безпечним і за замовчуванням увімкнено. | |
CURLOPT_FAILONERROR | TRUEдля докладного звіту при невдачі, якщо отриманий HTTP-код більше або дорівнює 400. Стандартна поведінка повертає сторінку як звичайно, ігноруючи код. | |
CURLOPT_FILETIME | TRUEдля спроби отримання дати модифікації віддаленого документа. Це значення можна отримати за допомогою параметра CURLINFO_FILETIME з функції curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | TRUEдля дотримання будь-якого заголовка "Location: ", відправленому сервером у своїй відповіді (врахуйте, що це відбувається рекурсивно, PHP буде слідувати за всіма заголовками, що посилаються) "Location: ", за винятком випадку, коли встановлено константу CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | TRUEдля примусового закриття з'єднання після завершення обробки так, щоб його не можна було використовувати повторно. | |
CURLOPT_FRESH_CONNECT | TRUEдля примусового використання нового з'єднання замість закешованого. | |
CURLOPT_FTP_USE_EPRT | TRUEдля використання EPRT (і LPRT) при активних завантаженнях FTP. Використовуйте FALSEдля того, щоб вимкнути EPRT та LPRT та використовувати тільки PORT. | |
CURLOPT_FTP_USE_EPSV | TRUEдля початкової спроби команди EPSV під час FTP передач. Якщо команда не вдалася, буде здійснено зворотний відкат до PASV. Встановіть у FALSEдля вимкнення EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | TRUEдля створення відсутніх директорій, якщо FTP операція виявляє неіснуючий шлях. | |
CURLOPT_FTPAPPEND | TRUEдля запису віддаленого файлу в кінець, замість перезаписування його поверх існуючого файлу. | |
CURLOPT_TCP_NODELAY | Задає на постійній основі чи опція TCP_NODELAY встановлена чи очищена (1 = встановлена, 0 = очищена). За замовчуванням опція очищується. | Доступна з версії PHP 5.2.1 для версій, зібраних з libcurl 7.11.2 або новіших. |
CURLOPT_FTPASCII | Псевдонім CURLOPT_TRANSFERTEXT. Використовуйте його натомість. | |
CURLOPT_FTPLISTONLY | TRUEдля повернення тільки списку імен із FTP директорії. | |
CURLOPT_HEADER | TRUEдля включення заголовків у висновок. | |
CURLINFO_HEADER_OUT | TRUEдля відстеження рядка запиту дескриптора. | Доступний з версії PHP 5.1.3. Префікс CURLINFO_вжито спеціально. |
CURLOPT_HTTPGET | TRUEдля скидання методу HTTP-запиту метод GET. Оскільки GET використовується за умовчанням, цей параметр необхідний лише у випадку, якщо метод запиту було змінено раніше. | |
CURLOPT_HTTPPROXYTUNNEL | TRUEдля тунелювання через вказаний HTTP-проксі. | |
CURLOPT_MUTE | TRUEдля повного вимкнення повідомлень функцій cURL. | Видалено в cURL 7.15.5 (Можна використовувати опцію CURLOPT_RETURNTRANSFER) |
CURLOPT_NETRC | TRUEдля зчитування файлу ~/.netrc на предмет логіну та пароля для віддаленого сайту, з яким встановлюється з'єднання. | |
CURLOPT_NOBODY | TRUEдля виключення тіла відповіді з виводу. Метод запиту встановлюється у HEAD. Зміна цього параметра FALSEне змінює його назад у GET. | |
CURLOPT_NOPROGRESS | TRUEдля скасування індикатора прогресу під час передачі cURL.
|
|
CURLOPT_NOSIGNAL | TRUEдля ігнорування будь-якої функції cURL, що надсилає сигнали PHP процесу. Цей параметр увімкнено за замовчуванням у багатопотокових SAPIs для коректної роботи таймів параметрів. | |
CURLOPT_POST | TRUEдля використання звичайного HTTP POST. Цей метод POST використовує звичайний , що зазвичай використовується в HTML-формах. | |
CURLOPT_PUT | TRUEдля завантаження файлу за допомогою HTTP PUT. Файл, що використовується, повинен бути встановлений за допомогою параметрів CURLOPT_INFILEі CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | TRUEдля повернення результату передачі як рядок з curl_exec()замість прямого виведення у браузер. | |
CURLOPT_SAFE_UPLOAD | TRUEдля відключення підтримки префікса @ для завантажуваних файлів у CURLOPT_POSTFIELDS, Що означає, що значення, передані з @ можуть безпечно передаватися як полів. Замість префікса можна використовувати опцію CURLFile d. | Додана до PHP 5.5.0 зі значенням за замовчуванням FALSE. У PHP 5.6.0 стала за умовчанням рівна TRUE. |
CURLOPT_SSL_VERIFYPEER | FALSEдля зупинки URL від перевірки сертифіката вузла мережі. Альтернативні сертифікати можуть бути вказані за допомогою параметра CURLOPT_CAINFOабо директорії із сертифікатами, що вказується параметром CURLOPT_CAPATH. | За замовчуванням одно TRUEз версії cURL 7.10. Стандартний дистрибутив встановлюється починаючи з версії cURL 7.10. |
CURLOPT_TRANSFERTEXT | TRUEдля використання режиму ASCII при FTP передачах. За допомогою LDAP дані повертаються простим текстом замість HTML. У Windows системах потік STDOUTне встановлюється у бінарний режим. | |
CURLOPT_UNRESTRICTED_AUTH | TRUEдля продовження посилки логіну та паролю при редиректах (при використанні CURLOPT_FOLLOWLOCATION), навіть за зміни імені хоста. | |
CURLOPT_UPLOAD | TRUEдля підготовки до завантаження файлу на сервер. | |
CURLOPT_VERBOSE | TRUEдля виведення додаткової інформації. Записує виведення у потік STDERR, або файл, вказаний параметром CURLOPT_STDERR. |
Для наступних значень параметра option параметр value повинен бути типу integer:
Параметр | Встановлюване значення value | Зауваження |
---|---|---|
CURLOPT_BUFFERSIZE | Розмір буфера, який використовується при кожному читанні. Однак, немає жодної гарантії, що цей запит буде завершено. | Доданий до версії cURL 7.10. |
CURLOPT_CLOSEPOLICY | Одна з констант CURLCLOSEPOLICY_*.
|
Видалено в PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Кількість секунд очікування під час спроби з'єднання. Використовуйте 0 для нескінченного очікування. | |
CURLOPT_CONNECTTIMEOUT_MS | Кількість мілісекунд очікування під час спроби з'єднання. Використовуйте 0 для нескінченного очікування. Якщо бібліотека libcurl скомпільована з використанням стандартного системного перетворювача імен, то з'єднання як і раніше використовуватиме повносекундне очікування як тайм-аут з мінімально допустимим тайм-аутом в 1 секунду. | Доданий до версії cURL 7.16.2. Доступно з версії PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Кількість секунд, протягом яких у пам'яті зберігаються записи DNS. За промовчанням цей параметр дорівнює 120 (2 хвилини). | |
CURLOPT_FTPSSLAUTH | Метод FTP аутентифікації (в активному режимі): CURLFTPAUTH_SSL(спочатку перевіряється SSL), CURLFTPAUTH_TLS(спочатку перевіряється TLS) або CURLFTPAUTH_DEFAULT(CURL вирішує сама). | Доданий до версії cURL 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (за замовчуванням, CURL сама вибирає використовувану версію), CURL_HTTP_VERSION_1_0 (примусове використання HTTP/1.0), або CURL_HTTP_VERSION_1_1 (примусове використання HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Можна використовувати побітовий оператор | (або) для комбінації кількох методів разом. У цьому випадку cURL опитає сервер на предмет підтримуваних методів авторизації та вибере найкращий із них. CURLAUTH_ANY – це псевдонім CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE – це псевдонім CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Очікуваний розмір файлу в байтах при завантаженні файлу на віддалений сервер. Врахуйте, що використання цієї опції не зупинить подальшу посилку даних, що перевищують це значення, оскільки дані, що посилаються, залежать від результату CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Верхній поріг швидкості передачі даних у байтах за секунду. Перевірка відбувається протягом CURLOPT_LOW_SPEED_TIMEсекунд, після чого PHP вважає передачу надто повільною та перериває її. | |
CURLOPT_LOW_SPEED_TIME | Максимальна кількість секунд, протягом яких швидкість передачі не повинна перевищувати CURLOPT_LOW_SPEED_LIMIT, інакше PHP помітить передачу як надто повільну та припинить її. | |
CURLOPT_MAXCONNECTS | Максимальна кількість постійних з'єднань. При досягненні ліміту для визначення з'єднання, що закривається, використовується параметр CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Максимальна кількість редиректів, що приймаються. Використовуйте цей параметр разом із параметром CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Альтернативний порт з'єднання. | |
CURLOPT_POSTREDIR | Бітова маска, що містить 1 (301 Moved Permanently), 2 (302 Found) і 4 (303 See Other), щоб задавати чи повинен метод HTTP POST оброблятися при включеній опції CURLOPT_FOLLOWLOCATION, якщо вказаний тип перенаправлення. | Додано до cURL 7.19.1. Доступно з PHP 5.3.2. |
CURLOPT_PROTOCOLS |
Бітова маска із значень CURLPROTO_*. Ця маска обмежує використовувані протоколи libcurl. Це дозволяє мати libcurl, що працює з великою кількістю протоколів, і обмежувати роботу певних передач тільки для деякого їхнього набору. За замовчуванням, libcurl використовує всі протоколи, що підтримуються. Дивіться також параметр CURLOPT_REDIR_PROTOCOLS. Коректні значення протоколів: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_TOP TO_TFTP , CURLPROTO_ALL |
|
CURLOPT_PROXYAUTH | Методи авторизації HTTP, які використовуються при з'єднанні з проксі-сервером. Використовуйте ті ж бітові маски, які були описані у параметра CURLOPT_HTTPAUTH. На даний момент для авторизації проксі підтримуються лише CURLAUTH_BASIC та CURLAUTH_NTLM. | Доданий до версії cURL 7.10.7. |
CURLOPT_PROXYPORT | Номер порту проксі-сервера, до якого здійснюється з'єднання. Цей номер також можна встановити за допомогою параметра CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Або CURLPROXY_HTTP (за замовчуванням), або CURLPROXY_SOCKS5 . | Доданий до версії cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Бітова маска із значень CURLPROTO_*. Дана бітова маска обмежує протоколи, що використовуються libcurl при редиректі (при включеному параметрі CURLOPT_FOLLOWLOCATION). Це дозволяє обмежити набір протоколів, що використовуються при редиректах для деяких передач. За замовчуванням libcurl підтримує всі протоколи, крім FILE і SCP. У версіях, що передували 7.19.4, перенаправлення використовувалося всім протоколів без винятку. Дивіться також опис параметра CURLOPT_PROTOCOLSдля списку констант із значеннями протоколів. | Доданий до версії cURL 7.19.4. |
CURLOPT_RESUME_FROM | Усунення початку передачі, в байтах. | |
CURLOPT_SSL_VERIFYHOST | Використовуйте 1 для перевірки загального імені в сертифікаті SSL. Використовуйте 2 для перевірки існування спільного імені та його збігу з зазначеним хостом. У бойовому оточенні значення цього параметра має бути 2 (за замовчуванням). | Підтримка значення 1 прибрана до cURL 7.28.1 |
CURLOPT_SSLVERSION | Одна з констант CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1(5) або CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Спосіб трактування параметра CURLOPT_TIMEVALUE. Використовуйте CURL_TIMECOND_IFMODSINCE для повернення сторінки, тільки якщо вона була змінена з часу, вказаного у параметрі CURLOPT_TIMEVALUE. Якщо сторінку не було змінено, повернеться заголовок "304 Not Modified", маючи на увазі, що параметр CURLOPT_HEADERвстановлений в TRUE. Використовуйте CURL_TIMECOND_IFUNMODSINCE для зворотного ефекту. За промовчанням використовується CURL_TIMECOND_IFMODSINCE . | |
CURLOPT_TIMEOUT | Максимально дозволена кількість секунд для виконання функцій cURL. | |
CURLOPT_TIMEOUT_MS | Максимально дозволена кількість мілісекунд для виконання cURL-функцій. Якщо libcurl зібрана з використанням звичайного системного розпізнавача імен, цей проміжок з'єднання все ще буде використовувати секундне округлення таймаутів, з мінімально дозволеним таймаутом в одну секунду. | Доданий до версії cURL 7.16.2. Доступний з версії PHP 5.2.3. |
CURLOPT_TIMEVALUE | Кількість секунд починаючи з 1 січня 1970 року. Цей час буде використано параметром CURLOPT_TIMECONDITION. За промовчанням використовується параметр CURL_TIMECOND_IFMODSINCE . | |
CURLOPT_MAX_RECV_SPEED_LARGE | Якщо швидкість стрибки перевищить це значення (зазначене в байтах на секунду) в середньому протягом усієї передачі, то стрибка буде призупинена для підтримки середньої швидкості менше або дорівнює цьому параметру. За замовчуванням швидкість не обмежується. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Якщо завантаження на сервер перевищить це значення (зазначене в байтах на секунду) в середньому протягом усієї передачі, то завантаження буде призупинено для підтримки середньої швидкості менше або дорівнює цьому параметру. За замовчуванням швидкість не обмежується. | Доданий до версії cURL 7.15.5. Доступний починаючи з версії PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Бітова маска, що складається з однієї або більше констант: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Встановіть CURLSSH_AUTH_ANYдля того, щоб libcurl вибрав одну з них самостійно. | Додано до cURL 7.16.1. |
CURLOPT_IPRESOLVE | Дозволяє застосунку вибрати вид IP-адреси, з якою визначається ім'я хоста. Це необхідно, якщо використовується ім'я хоста, яке виходить з використанням більш ніж однієї версії IP адреси. Можливими значеннями можуть бути CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, і за замовчуванням CURL_IPRESOLVE_WHATEVER. | Додано до cURL 7.10.8. |
Для наступних значень параметра option параметр value повинен бути типу string:
Параметр | Встановлюване значення value | Зауваження |
---|---|---|
CURLOPT_CAINFO | Ім'я файлу, який містить один або більше сертифікатів, з якими звірятимуться вузли. Цей параметр має сенс лише при використанні спільно з CURLOPT_SSL_VERIFYPEER. | Потребує абсолютний шлях. |
CURLOPT_CAPATH | Директорія містить кілька CA сертифікатів. Використовуйте цей параметр разом із CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Вміст заголовка "Cookie:", який використовується в HTTP-запиті. Зверніть увагу, що кілька cookies розділяються крапкою з комою з наступним пробілом (наприклад, " fruit = apple; colour=red") | |
CURLOPT_COOKIEFILE | Ім'я файлу, що містить cookies. Цей файл має бути у форматі Netscape або просто заголовками HTTP, записаними у файл. Якщо в якості імені файлу передано порожній рядок, то cookies зберігатися не будуть, але їхня обробка все ще буде включена. | |
CURLOPT_COOKIEJAR | Ім'я файлу, в якому будуть збережені всі внутрішні cookie поточної передачі після закриття дескриптора, наприклад, після виклику curl_close. | |
CURLOPT_CUSTOMREQUEST | Власний метод запиту, який використовується замість "GET"або "HEAD"під час виконання HTTP-запиту. Це корисно при запитах "DELETE"або інших, більш рідкісних HTTP-запитах. Коректними значеннями будуть слова на кшталт "GET", "POST", "CONNECT"і так далі; тобто. не вводьте тут весь рядок із HTTP-запитом. Наприклад, вказівка "GET /index.html HTTP/1.0\r\n\"буде неправильним.
|
|
CURLOPT_EGDSOCKET | На кшталт CURLOPT_RANDOM_FILE, крім того, що ім'я файлу встановлюється в сокет Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Вміст заголовка "Accept-Encoding: ". Це дозволяє декодувати запит. Підтримуваним кодуванням є "identity", "deflate"і "gzip". Якщо передано порожній рядок, "" , посилається заголовок, що містить всі типи кодувань, що підтримуються. | Доданий до версії cURL 7.10. |
CURLOPT_FTPPORT | Значення, яке використовуватиметься для визначення IP-адреси для команди "PORT" FTP-протоколу. Команда "PORT" повідомляє серверу, з якою IP-адресою він повинен встановлювати з'єднання. Це може бути IP-адреса, ім'я хоста, ім'я мережного інтерфейсу (під Unix), або просто "-" для використання системної IP-адреси за промовчанням. | |
CURLOPT_INTERFACE | Ім'я мережного інтерфейсу. Може бути ім'ям інтерфейсу, IP-адресою або ім'ям хоста. | |
CURLOPT_KEYPASSWD | Пароль, який потрібний для використання приватного ключа CURLOPT_SSLKEYабо CURLOPT_SSH_PRIVATE_KEYFILE. | Додано до cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Рівень безпеки KRB4 (Kerberos 4). Будь-яке з наступних значень (у порядку від слабкого до найсильнішого) коректно: "clear", "safe", "confidential", "private".. Якщо цей рядок відрізняється від даних значень, буде використано значення "private". Встановлення цього параметра NULLповністю відключить безпеку KRB4. На даний момент безпека KRB4 працює лише з FTP транзакціями. | |
CURLOPT_POSTFIELDS | Усі дані, що передаються в HTTP POST-запиті. Щоб надіслати файл, вкажіть перед ім'ям файлу @ , а також використовуйте повний шлях до файлу. Тип файлу також можна вказати за допомогою формату " ;type=mimetype", наступним за ім'ям файлу. Цей параметр може бути переданий як url-закодований рядок, на кшталт " para1=val1¶2=val2&...", і у вигляді масиву, ключами якого будуть імена полів, а значеннями - їх вміст. Якщо value є масивом, заголовок Content-Typeбуде встановлений у значення multipart/form-data. Починаючи з версії PHP 5.2.0, при передачі файлів із префіксом @ , value має бути масивом. З версії PHP 5.5.0, префікс @ застарілий і файли можна надсилати за допомогою CURLFile. Префікс @ можна вимкнути, щоб можна було передавати значення, що починаються з @ , задавши опцію CURLOPT_SAFE_UPLOADна значення TRUE. | |
CURLOPT_PROXY | HTTP-проксі, через який надсилаються запити. | |
CURLOPT_PROXYUSERPWD | Логін та пароль, записані у вигляді ":" , що використовуються при з'єднанні через проксі. | |
CURLOPT_RANDOM_FILE | Ім'я файлу, який використовується для ініціалізації генератора випадкових чисел для SSL. | |
CURLOPT_RANGE | Діапазон даних, які потрібно завантажити у форматі "X-Y", причому X, або Y можуть бути опущені. Протокол HTTP також підтримує передачу кількох діапазонів, розділених комами, вони задаються у форматі "X-Y, N-M". | |
CURLOPT_REFERER | Вміст заголовка "Referer:", який буде використаний у HTTP-запиті. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Рядок, що містить 32 шістнадцяткових цифри. Рядок повинен бути контрольною сумою за алгоритмом MD5 публічного ключа віддаленого комп'ютера і libcurl буде скидати з'єднання до віддаленого хоста до тих пір, поки контрольна сума не буде відповідати публічному ключу. Ця опція призначена лише для передачі даних за допомогою SCP та SFTP. | Додано до cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Ім'я файлу для вашого публічного ключа. Якщо не встановлено, libcurl використовує за промовчанням файл $HOME/.ssh/id_dsa.pub, якщо змінна оточення HOME встановлена і файл "id_dsa.pub" у поточній директорії, якщо змінна HOME не встановлена. | Додано до cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Ім'я файлу для приватного ключа. Якщо не встановлено, libcurl використовує за замовчуванням файл $HOME/.ssh/id_dsa, якщо змінна оточення HOME встановлена і файл "id_dsa" в поточній директорії, якщо змінна HOME не встановлена. Якщо файл захищений паролем, установіть пароль за допомогою CURLOPT_KEYPASSWD. | Додано до cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Список шифрів, що використовується у SSL-передачах. Наприклад, RC4-SHAі TLSv1є правильними списками шифрів. | |
CURLOPT_SSLCERT | Назва файлу з коректно відформатованим PEM-сертифікатом. | |
CURLOPT_SSLCERTPASSWD | Пароль, необхідний для використання сертифіката CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Формат сертифікату. Підтримуються формати "PEM"(за замовчуванням), "DER"і "ENG". | Доданий до версії cURL 7.9.3. |
CURLOPT_SSLENGINE | Ідентифікатор механізму шифрування для закритого ключа SSL, вказаного у параметрі CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Ідентифікатор механізму шифрування, який використовується для асиметричних операцій шифрування. | |
CURLOPT_SSLKEY | Ім'я файлу із закритим ключем SSL. | |
CURLOPT_SSLKEYPASSWD | Таємний пароль, необхідний для використання закритого ключа SSL, вказаного параметром CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Тип закритого ключа SSL, вказаного у параметрі CURLOPT_SSLKEY. Підтримуються такі типи ключів: "PEM"(за замовчуванням), "DER"і "ENG". | |
CURLOPT_URL | URL, що завантажується. Цей параметр також може бути встановлений при ініціалізації сеансу за допомогою curl_init(). | |
CURLOPT_USERAGENT | Вміст заголовка "User-Agent: ", що надсилається в HTTP-запиті. | |
CURLOPT_USERPWD | Логін та пароль, які використовуються при з'єднанні, вказані у форматі ":" . |
Для наступних значень параметра 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 | Файл, до якого буде записано заголовки поточної операції. |
Для наступних значень параметра option , параметр value має бути правильним ім'ям функції або замиканням:
Параметр | Встановлюване значення value |
---|---|
CURLOPT_HEADERFUNCTION | Callback-функція приймає два параметри. Першим параметром є дескриптор cURL, другим параметром є рядок із заголовками, що записуються. Заголовки повинні бути записані за допомогою цієї callback-функції. Повинна повернути кількість записаних байт. |
CURLOPT_PASSWDFUNCTION | Callback-функція приймає три параметри. Першим параметром є дескриптор cURL, другим параметром є рядок із запитом пароля, третім параметром є максимальна довжина пароля. Повинна повернути рядок, який містить пароль. |
CURLOPT_PROGRESSFUNCTION |
Callback-функція приймає п'ять параметрів. Перший є декскриптором cURL, другий – загальною кількістю байт, яку очікується завантажити з сервера, третій – кількість вже завантажених байт, четвертий – загальна кількість байт, яку очікується відправити на сервер, та п'ятий – кількість вже відправлених байт.
Щоб скасувати передачу, можна повернути ненульове значення. У цьому випадку буде виставлено помилку CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Callback-функція приймає три параметри. Першим параметром є дескриптор cURL, другим параметром є ресурс потоку, переданий cURL через опцію CURLOPT_INFILE, а третім параметром є максимально дозволена кількість даних для читання. Callback-функція повинна повернути рядок, що з довжиною не перевищує запитаної кількості даних, зазвичай за допомогою читання з переданого потокового ресурсу. Повинна повернути порожній рядок для сигналу про кінець файлу EOF. |
CURLOPT_WRITEFUNCTION | Callback-функція приймає два параметри. Першим параметром є дескриптор 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 /* http://localhost/upload.php: $ ch = curl_init (); $data = array("name" => "Foo" , "file" => "@/home/user/test.png" ); Curl_setopt ($ch, CURLOPT_URL, "http://localhost/upload.php"); Curl_exec ($ ch); Результат виконання цього прикладу: Array ( => Foo) Array ( => Array ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) Зауваження: Передача масиву в CURLOPT_POSTFIELDSзакодує дані у вигляді multipart/form-data, тоді як передача URL-кодованого рядка закодує дані у вигляді application/x-www-form-urlencoded. cURL – це інструмент, що дозволяє взаємодіяти з різними серверами та підтримує безліч протоколів: HTTP, FTP, TELNET та ін. Спочатку cURL – це службова програма для командного рядка. Але, на щастя для нас, PHP підтримує роботу з бібліотекою cURL. У статті ми розглянемо нетривіальні приклади роботи з cURL. Насправді, є багато інших способів відправити запит на інший сервер, щоб, наприклад, отримати вміст сторінки. Багато, в основному через лінощі, використовують прості PHP функції замість cURL: $content = file_get_contents("http://www.example.com"); // чи $lines = file("http://www.example.com"); // або readfile("http://www.example.com"); Однак вони не дозволяють ефективно опрацьовувати помилки. Також є ряд завдань, які їм зовсім не під силу - наприклад, робота з cookies, авторизація, запити, завантаження файлів. cUrl – потужний інструмент, який підтримує безліч протоколів та надає повну інформацію про запит. Перш ніж перейти до складних прикладів, розглянемо базову структуру cURL запиту PHP. Для виконання cURL запиту в PHP необхідно зробити 4 основні кроки: Здебільшого у цій статті ми розглядатимемо крок №2, оскільки там відбувається основна магія. Список cURL опцій дуже великий, тому всі опції розглядати сьогодні ми не будемо, а використовуємо ті, які стануть у нагоді для вирішення конкретних завдань. При необхідності, ви можете додати такі рядки для відстеження помилок: // ... $ output = curl_exec ($ ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ... Зверніть увагу, ми використовуємо "===" замість "==", т.к. треба відрізняти порожню відповідь сервера від булевського значення FALSE, яке повертається у разі помилки. Інший необов'язковий крок — отримання інформації про запит cURL, після його виконання. // ... curl_exec ($ ch); $info = curl_getinfo($ch); echo "Took". $info["total_time"] . "seconds for url". $info["url"]; // ... В результаті ви отримаєте масив із наступною інформацією: У цьому прикладі ми напишемо скрипт, який визначатиме перенаправлення в залежності від різних налаштувань браузера. Наприклад, деякі сайти перенаправляють відвідувачів із мобільних пристроїв, відвідувачів з інших країн. Ми будемо використовувати опцію CURLOPT_HTTPHEADER для встановлення наших власних заголовків, включаючи User-Agent та мову та подивимося, куди перенаправляють нас сайти. // URLs $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // браузери $browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6)) Gecko/20091201 Firefox/3.5. 6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => array ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU використовується для Mac OS X; > "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls as $url) ( echo "URL: $url\n"; foreach ($browsers as $test_name => $browser) ( $ch = curl_init(); // встановимо адресу curl_setopt($ch, CURLOPT_URL, $url); ")); // вміст сторінки нам не потрібний curl_setopt($ch, CURLOPT_NOBODY, 1); // потрібні тільки заголовки curl_setopt($ch, CURLOPT_HEADER, 1); // повернемо результат, замість його виведення curl_setopt($ch, CURLOPT_RETURNTRAN , 1);$output = curl_exec($ch);curl_close($ch);// визначимо перенаправлення в HTTP заголовках?if (preg_match("! echo "$test_name: redirects to $matches\n"; ) else ( echo "$test_name: no redirection\n"; ) ) echo "\n\n"; У циклі перевіряємо браузери для кожного урла. Спочатку ми встановлюємо опції для нашого запиту: URL-адресу та тестований браузер і мову. Т.к. ми встановили спеціальну опцію, результат виконання запиту міститиме лише HTTP заголовки. За допомогою простого регулярного виразу ми можемо перевірити, чи містить відповідь рядок «Location:». Результат виконання скрипту: URL: http://www.cnn.com standard: redirects to http://edition.cnn.com/ iphone: redirects to http://edition.cnn.com/ french: redirects to http://edition.cnn .com/ URL: http://www.mozilla.com standard: redirects to https://www.mozilla.org/firefox/ iphone: redirects to https://www.mozilla.org/firefox/ french: redirects to https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: redirects to https://www.facebook.com/ iphone: redirects to http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr french: no redirection При виконанні запитів GET дані можна передавати в рядку запиту. Наприклад, коли ви шукаєте в гугле, ваш запит передається в URL: Http://www.google.com/search?q=google Щоб отримати результат цього запиту, вам навіть не знадобиться cURL, ви можете бути лінивим і використовувати "file_get_contents()". Але деякі HTML форми використовують метод POST. У такому разі дані надсилаються в тілі повідомлення запиту, а не URL. Напишемо скрипт, який надсилатиме POST запити. Для початку створимо простий PHP файл, який прийматиме ці запити і повертатиме відправлені йому дані. Назвемо його post_output.php : $url = "http://localhost/post_output.php"; $post_data = array ("foo" => "bar", "query" => "FooBar", "action" => "Submit"); $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // робимо запит POST curl_setopt($ch, CURLOPT_POST, 1); // додаємо дані curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Цей скрипт виведе: Array (=> bar => FooBar => Submit) Цей скрипт надіслав запит POST файлу post_output.php. який вивів вміст масиву $_POST і ми отримали цю відповідь за допомогою cURL. Як і в попередньому прикладі, створимо файл, який прийматиме запити, upload_output.php : Print_r($_FILES); І сам скрипт, що завантажує файли: $url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // файл для завантаження "upload" => "@/tmp/desert.jpg"); $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Якщо ви хочете завантажити файл, все що необхідно - це передати шлях до нього, так само як звичайний параметр запиту POST, поставивши спочатку @. Результат роботи скрипту: Array ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Одна з просунутих можливостей cURL в PHP - це можливість виконання кількох запитів одночасно та асинхронно. У звичайних умовах скрипт зупиняється і чекає на виконання запиту. І якщо вам потрібно виконати багато запитів, це може тривати багато часу, т.к. ви виконуватимете послідовно. Це обмеження можна уникнути: // створюємо обробники $ch1 = curl_init(); $ ch2 = curl_init(); // встановлюємо налаштування curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); //create the multiple cURL handle $mh = curl_multi_init(); // додаємо обробники curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $ running = null; // виконуємо запити do ( curl_multi_exec($mh, $running); ) while ($running > 0); // звільнимо ресурси curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Ідея полягає в тому, що ви можете створити безліч cURL дескрипторів, об'єднати їх під одним мультидескриптором і виконувати їх асинхронно. Спочатку все як і зі звичайним cURL запитом - створюється дескриптор ( curl_init()
), задаються параметри ( curl_setopt()
). Далі створюється мультидескриптор ( curl_multi_init()
) і додаються раніше створені звичайні дескриптори ( curl_multi_add_handle()
). Замість звичайного виклику curl_exec() ми будемо багаторазово викликати curl_multi_exec()
Ця функція інформує нас про кількість активних з'єднань за допомогою другого параметра $running. Тому цикл працює поки $ running не стане рівним 0. І, звичайно, після закінчення роботи необхідно звільнити ресурси. У цьому прикладі ми просто виводимо результат запитів у STDOUT. Розглянемо нетривіальний випадок застосування multiCURL. Уявіть блог з великою кількістю постів, що містять посилання на зовнішні сайти. Деякі з цих посилань можуть бути не робітниками. Напишемо скрипт, який знайде всі неробочі посилання та покаже їх нам. Для початку нам необхідно витягнути всі зовнішні посилання з бази даних: // CONFIG $ db_host = "localhost"; $ db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "сайт"); $max_connections = 10; $url_list = array(); $working_urls = array(); $dead_urls = array(); $not_found_urls = array(); $active = null; // з'єднаємося з MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Could not connect: ". not select db: " . mysql_error()); ) // беремо всі пости з посиланнями в тексті $q = "SELECT post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post" "; $r = mysql_query($q) або die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // збираємо всі посилання за допомогою регулярки if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($matches as $url) ( // фільтруємо непотрібні домени $tmp = parse_url($url); if (isset($tmp["host"])) && in_array($tmp["host"], $ excluded_domains)) ( continue; ) // збираємо разом $url_list = $url; ) ) ) // видаляємо повторення $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("No URL to check"); ) У цій частині скрипта ми просто витягуємо з бази всі зовнішні посилання. Перевіримо їх: $mh = curl_multi_init(); // 1. додамо посилання for ($i = 0; $i< $max_connections; $i++) {
add_url_to_multi_handle($mh, $url_list);
}
// основной цикл
do {
curl_multi_exec($mh, $curRunning);
// 2. один из потоков завершил работу
if ($curRunning != $running) {
$mhinfo = curl_multi_info_read($mh);
if (is_array($mhinfo) && ($ch = $mhinfo["handle"])) {
// 3. один из запросов выполнен, можно получить информацию о нем
$info = curl_getinfo($ch);
// 4. нерабочая ссылка
if (!$info["http_code"]) {
$dead_urls = $info["url"];
// 5. 404?
} else if ($info["http_code"] == 404) {
$not_found_urls = $info["url"];
// 6. верная ссылка
} else {
$working_urls = $info["url"];
}
// 7. удаляем отработавший дескриптор
curl_multi_remove_handle($mh, $mhinfo["handle"]);
curl_close($mhinfo["handle"]);
// 8. добавим новый урл
add_url_to_multi_handle($mh, $url_list);
$running = $curRunning;
}
}
} while ($curRunning >0); curl_multi_close($mh); echo "==Dead URLs==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Working URLs==\n"; echo implode("\n", $working_urls); echo "\n"; // 9. додає дескриптор із заданим урлом function add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // якщо ще є посилання if (isset($url_list[$index]))) ( // все як звичайно $ ch = curl_init(); // встановлюємо опції curl_setopt($ch, CURLOPT_URL, $url_list[$index]);// повертаємо, а не виводимо результат curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ch, CURLOPT_FOLLOWLOCATION, 1);// отримуємо тільки заголовки для економії часу curl_setopt($ch, CURLOPT_NOBODY, 1); Розглянемо код докладніше (нумерація відповідає коментарям у коді): Запустимо скрипт: Dead URLs== xample1234.com/ ==404 URLs== www.google.com/dsfasdfafd ==Working URLs== ru.php.net/manual/ru/function.time.php www.cssbuttongenerator.com/ csslint. net/codex.wordpress.org/Plugin_API/Action_Reference fortawesome.github.io/Font-Awesome/fortwesome.github.io/Font-Awesome/ www.oracle.com/technetwork/java/javafx/downloads/index.html codex. wordpress.org/Plugin_API/Filter_Reference codex.wordpress.org/Roles_and_Capabilities code.google.com/p/google-api-php-client/wiki/OAuth2#Google_APIs_Console jplayer.org/ code.google.com/p/google-api -php-client/ developers.google.com/+/ accounts.google.com/ServiceLogin?service=devconsole&passive=1209600&continue=https%3A%2F%2Fcode.google.com%2Fapis%2Fconsole%2F&followup=https%3A%2F %2Fcode.google.com%2Fapis%2Fconsole%2F daneden.github.io/animate.css/ github.com/daneden/animate.css ru2.php.net/manual/ru/function.autoload.php www.google. com/recaptcha/api/verify phpunit.de/ phpunit.de/manual/current/en/phpunit-book.html Перевірка зайняла близько двох секунд. Запуск одночасно по 10 потоків продуктивність зростає в 10 разів, порівняно зі звичайними cURL запитами. Щоб отримати вміст відповіді сервера, використовуйте функцію curl_multi_getcontent($ch)
, де $ch - дескриптор, отриманий з curl_multi_info_read()
. Якщо запит HTTP вимагає автентифікації, використовуйте наступний код: $url = "http://www.somesite.com/members/"; $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // відправляємо ім'я та пароль curl_setopt($ch, CURLOPT_USERPWD, "myusername: mypassword"); // якщо дозволити редирект curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL відправить пароль і після перенапруження curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); У PHP є своя бібліотека для роботи з FTP, але можна використовувати cURL: // Читаємо файл $file = fopen("/path/to/file", "r"); // урл вже містить необхідні дані $url = "ftp://username: [email protected]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // опції curl_setopt($ch, CURLOPT 1); curl_setopt($ch, CURLOPT_INFILE, $fp); ch);curl_close($ch); Запити можна виконувати через певний proxy: $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // адреса проксі curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // якщо потрібна авторизація curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:pass"); $output = curl_exec($ch); curl_close ($ ch); Є можливість використовувати колбеки під час виконання запиту, не чекаючи на його завершення. Наприклад, під час завантаження сервера ми можемо використовувати вже отримані дані, не чекаючи повного завантаження. $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_function"); curl_exec($ch); curl_close ($ ch); function progress_function($ch,$str) ( echo $str; return strlen($str); ) Функція колбека повинна повертати довжину рядка для правильної роботи запиту. Щоразу, коли буде отримано чергову частину відповіді сервера, буде викликаний колбек. У цій статті ми розглянули просунуті можливості cURL у PHP. Наступного разу, коли вам знадобиться робити URL-адреси, використовуйте cURL. Нам часто доводиться завантажувати різні файли з інтернету, наприклад, файли програм, що виконуються, файли скриптів, архіви з вихідниками. Але не завжди це потрібно робити через браузер. Багато ситуаціях набагато простіше виконати всі дії через термінал. Оскільки в такий спосіб ви можете автоматизувати процес. З іншого боку, веб-майстрам іноді доводиться тестувати доступність веб-сайтів, перевіряти заголовки, що відправляються і одержуються, і багато іншого. Для вирішення таких завдань та завдань подібного кола можна скористатися утилітою curl. Вона дозволяє вирішити набагато ширше коло завдань, серед яких навіть імітація дій користувача на сайті. У цій статті ми розглянемо, як користуватися curl, що це таке і навіщо потрібна ця програма. Насправді, curl - це більше, ніж просто утиліта командного рядка для Linux або Windows. Це набір бібліотек, в яких реалізуються базові можливості роботи з URL-адресами сторінками та передачі файлів. Бібліотека підтримує роботу з протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а також POP3, IMAP та SMTP. Вона відмінно підходить для імітації дій користувача на сторінках та інших операцій з URL-адресами. Підтримка бібліотеки curl була додана до різних мов програмування і платформ. Утиліта curl – це незалежна обгортка для цієї бібліотеки. Саме на цій утиліті ми і зупинимося у цій статті. Перед тим як перейти до опису того, як може використовуватися команда curl linux, давайте розберемо саму утиліту та її основні опції, які нам знадобляться. Синтаксис утиліти дуже простий: $ curl опції посилання Тепер розглянемо основні опції: Це далеко не всі параметри curl linux, але тут перераховано все основне, що вам доведеться використати. Ми розглянули все, що стосується теорії роботи з утилітою curl, тепер настав час перейти до практики і розглянути приклади команди curl. Найчастіше завдання - це. Завантажити файл просто. Для цього достатньо передати утиліті у параметрах ім'я файлу або html сторінки: curl https://raw.githubusercontent.com/curl/curl/master/README.md Але тут на вас чекає одна несподіванка, весь вміст файлу буде відправлено на стандартний висновок. Щоб записати його в будь-який файл, використовуйте: 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 Ви можете обмежити швидкість завантаження до необхідної межі, щоб не перевантажувати мережу за допомогою опції -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 curl -T login.txt ftp://speedtest.tele2.net/upload/ Або перевіримо відправку файлу по HTTP, для цього існує спеціальний сервіс: curl -T ~/login.txt http://posttestserver.com/post.php У відповіді утиліта повідомить, де ви можете знайти завантажений файл. Ви можете надсилати не лише файли, але й будь-які дані методом 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 використовуються сайтами для зберігання інформації на стороні користувача. Це може бути необхідним, наприклад, для аутентифікації. Ви можете приймати та передавати 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://сайт А опція -H дозволяє або кілька на сервер, наприклад, можна передати заголовок If-Modified-Since, щоб сторінка поверталася тільки якщо вона була змінена: Якщо на сервері потрібна автентифікація одного з найпоширеніших типів, наприклад, 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, навіщо потрібна ця утиліта та основні її можливості. Незважаючи на свою схожість з , вони дуже відрізняються. Команда curl linux призначена більше для аналізу та імітації різних дій на сервері, тоді як wget більше підходить для завантаження файлів та краулінгу сайтів. У цій статті йтиметься про такий потужний інструмент як cURL, а також про бібліотеку для php, яка надає доступ до цього інструменту - libcurl. Навіщо все це потрібно? Для зв'язку з сервером протоколів передачі даних, наприклад, http або ftp. Інші протоколи нам не надто цікаві, якщо хтось хоче заглиблюватися в цю тему, то доведеться вже копати англомовні ресурси, а в цій статті будуть основи та приклади використання. Отже, бібліотека libcurl надає можливість передачі даних на сервер, і отримання відповідей від нього. Що це нам дає? Можливість емуляції поведінки користувача або! Ви можете отримувати вміст сторінок для наступного парсингу, можете отримувати заголовки відповідей сервісу та програмно авторизуватися на сайтах, робити скрипти постінгу повідомлень (наприклад, у твіттері або на форумах) або інформації. Все обмежується лише вашою фантазією! Перше, що ми маємо зробити, це встановити бібліотеку. На локальному комп'ютері я користуюся збіркою Denwer, як і переважна більшість вебмастерів-початківців, на яких і розрахована стаття. Досвідчені користувачі, які самостійно встановлюють зв'язку php+apache+mysql зможуть встановити cURL, не мені пояснювати їм як це робиться;) А ми, новачки, користуємося готовими рішеннями, щоб було простіше. Тому встановлюємо libcurl наступним чином: і прибираємо крапку з комою на початку терміни: ;extension=php_curl.dll Готово. Щоб перевірити працездатність бібліотеки, можете викликати функцію phpinfo() і знайти там рядок: cURL support enabled. Вітаю із першою перемогою. Для початку роботи з інструментом, його потрібно ініціалізувати. Робиться це так: $ ch = curl_init(); Ми використовували функцію ініціалізації сесії cURL. При цьому можна задати URL відразу, ось так: $ch = curl_init("https://сайт"); А можна зробити це згодом, в опціях. Порядок встановлення опцій не має значення. Робиться це іншою функцією: Curl_setopt (resource ch, string option, mixed value) Перший параметр цієї функції, тобто resource ch, ми вже створили трохи вище, а ось параметрів option і value дуже багато. Я думаю, що не варто копіпастить сюди їх усі, а достатньо лише дати посилання на докладний опис функції, сподіваюся ніхто не образиться: curl_setopt . Наведу приклад установки опцій на прикладі URL: $url = "https://сайт"; curl_setopt($ch, CURLOPT_URL, $url); Ще кілька прикладів завдання опцій: давайте отримаємо заголовок відповіді сервера, при цьому не будемо отримувати саму сторінку: Curl_setopt ($ ch, CURLOPT_HEADER, 1); // читати заголовок curl_setopt ($ ch, CURLOPT_NOBODY, 1); // читати ТІЛЬКИ заголовок без тіла Отже, ми ініціалізували сесію, задали потрібні нам параметри, тепер виконуємо запит, що вийшов, закриваємо сесію і виводимо результат: $result = curl_exec($ch); curl_close($ch); echo $result; У результаті одержуємо наш перший повністю робочий приклад використання бібліотеки libcurl: $ ch = curl_init(); $url = "https://сайт"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); // читати заголовок curl_setopt ($ ch, CURLOPT_NOBODY, 1); // читати ТІЛЬКИ заголовок без тіла $result = curl_exec($ch); curl_close($ch); echo $result; Як воно працює, сподіваюся, зрозуміло, адже ми розглянули кожен крок окремо:) В результаті ми отримуємо заголовок HTTP відповіді від сервера, який трохи нижче обов'язково розберемо, щоб краще розуміти всі етапи взаємодії браузера та сервера: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Чудово! Ми отримали заголовок відповіді від сервера та випробували бібліотеку у дії. Чим нам це корисно? Тим, що тепер ви приблизно уявляєте собі послідовність дій під час роботи з cURL: Для прикладу я звернувся до сторінки ya.ru і переглянув сформований запит браузера і отриману від сервера відповідь. Ось і вони: Я вважаю, що після того, як деякі загальні моменти вже зрозумілі і начебто все зрозуміло, саме час переходити до практики і на прикладі вже відточувати свою майстерність. Особисто у мене завжди відразу руки сверблять все спробувати на практиці:) Якщо cURL такий гарний для парсерів, то розглянемо функцію отримання коду сторінки за її адресою. При цьому на виході отримаємо масив із заголовком, вмістом сторінки та навіть коди помилок, якщо щось піде не так. Function get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURRAN) // повертає веб-сторінку curl_setopt($ch, CURLOPT_HEADER, 0); // не повертає заголовки curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходить по редиректам curl_setopt($ch, CURLOPT_ENCODING, всі кодування curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймати з'єднання curl_setopt($ch, CURLOPT_TIMEOUT, 120); , 10);// зупинятися після 10-го редиректу $content = curl_exec($ch); $err = curl_errno($ch); $ch); $header["errno"] = $err; $header["errmsg"] = $errmsg; Вхідні параметри: Використовуємо функцію, наприклад, так: $result = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["content "]; echo $page; ) Все має пройти без помилок і ви отримаєте код сторінки в змінній $page. Якщо ж спробувати отримати неіснуючу сторінку yaaaaaaaaaaaa.ru, то отримаємо помилку: Could not resolve host: yaaaaaaaaaaaa.ru; Host not found Все обробляється коректно та красиво:) У Вас у браузері заблокований JavaScript. Дозвольте JavaScript для роботи сайту! PHP підтримує libcurl, бібліотеку, створену Daniel "Stenberg", яка дає можливість з'єднуватися з серверами різних типів і за різними протоколами. Ці функції були введені у PHP 4.0.2. curl_init – ініціалізує CURL-сесію. resource curl_init() Функція curl_init()ініціалізує нову сесію та поверне CURL-дескриптор для використання у функціях , та . Якщо необов'язковий параметр urlнадано, то опція CURLOPT_URL отримає значення цього параметра. Ви можете вручну встановлювати його за допомогою функції. curl_setopt - встановлює настройки для CURL-трансфера/transfer. bool curl_setopt(Resource ch, string option, mixed value) Функція curl_setopt()встановлює опції для CURL-сесії, що ідентифікується параметром ch. Параметр optionє опцією, яку ви хочете встановити, а valueце значення опції option . Параметр valueмає бути long для наступних опцій (специфікованих параметром option): Параметр valueмає бути рядком для наступних значень параметра option : Наступні опції чекають на дескриптор файлу, який виходить за допомогою функції fopen() : Параметр value long write_callback (resource ch, string data)(... return strlen($data);) option : Параметр valueмає бути функцією наступного виду string read_callback (resource ch, resource fd, long length)()для наступних значень параметра option : curl_exec – виконує CURL-сесію. bool curl_exec(Resource ch) Ця функція повинна викликатись після того, як ви ініціалізуєте сесію CURL і всі опції цієї сесії вже встановлені. Її призначення в тому, щоб просто виконати певну CURL-сесію (задану у параметрі ch). curl_close – закриває CURL-сесію. void curl_close(Resource ch) Ця функція закриває сесію CURL та звільняє всі ресурси. CURL-дескриптор chтакож видаляється. curl_errno – повертає ціле число, що містить номер останньої помилки. Якщо Вам потрібно буде відправити в POST запиті багатовимірний масив і файл, ви зіткнетеся з нерозв'язною проблемою. Якщо передавати в CURLOPT_POSTFIELDS багатовимірний масив, другий рівень буде переданий як рядок "Array". Якщо перетворити за допомогою http_build_query, Ви не зможете передати файл. Нижче представлена функція кодування двовимірного масиву з підвантаженням файлів для Curl, яка працюватиме як у старих версіях PHP 5.3, PHP 5.4, так і PHP 5.6 /** перетворює багатовимірний масив в одномірний, використовуючи складні індекси і замінює @ в префіксі на CurlFile для використання в Curl * @param $inputArray * @param string $inputKey * @return array $requestVars = array("id" => array( 1, 2, "id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); отримаємо: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ function convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray as $key => $value) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? new CurlFile(ltrim($value, "@")) : $value; ) else ( $resultArray[$tmpKey] = $value; ) ) return $resultArray; ) // перевіряємо $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "сайт"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Прикладні приклади використання
$ ch = curl_init ();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt ($ ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
?>
Примітки
Чому cURL?
Основи cUrl
// 1. ініціалізація $ ch = curl_init(); // 2. встановлюємо налаштування, включаючи урл curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. виконання запиту та отримання відповіді $output = curl_exec($ch); // 4. очищення ресурсів curl_close ($ ch); Відстеження помилок
Отримання інформації про запит
Відстеження редиректів, залежно від браузера
Надсилаємо POST запити
Завантаження файлів
Multi Curl
Перевірка зовнішніх посилань у WordPress
Інші можливості cURL у PHP
HTTP автентифікація
Завантаження по FTP
Використання проксі
Колбеки (callback functions)
Висновок
Команда curl
Як користуватись curl?
Обмеження швидкості
Передача файлів
Надсилання даних POST
Передача та прийом куки
Передача та аналіз заголовків
Аутентифікація curl
Використання проксі
Висновки
Що взагалі таке cURL та libcurl? Загальні моменти
Установка URL на Denwer (Денвер). Як почати користуватися libcurl?
Опис cURL та перші кроки
Структура заголовка HTTP запиту
Запит
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: yandexuid=ХХХХХ — Куки, за потреби.
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. Йдемо далі.Приклад роботи з бібліотекою
url – адреса сторінки або сайту.
Значення вихідних параметрів (масив із трьома елементами):
header['errno'] - якщо щось пішло не так, то буде код помилки.
header['errmsg'] — тут буде текст помилки.
header['content'] - власне сама сторінка\файл\картинка і т.д.
Далі з кодом сторінки можна робити все, що завгодно, наприклад, парсить регулярками. Але це все на наступних уроках, а поки що зупинимося на цьому.Curl
libcurl в даний час підтримує протоколи http, https, ftp, gopher, telnet, dict, file та ldap.
libcurl також підтримує сертифікати HTTPS, HTTP POST, HTTP PUT, завантаження по FTP (це можна зробити також РНР-розширенням ftp), завантаження на основі форм HTTP, проксі, куки та автентифікацію user+password.curl_init
Опис
curl_setopt
Опис
curl_exec
Опис
curl_close
Опис
curl_errno
Опис
Приклад 1. Ініціалізація нової сесії CURL та отримання веб-сторінки.
Приклад 2. Використання модуля РНР CURL для отримання example.com
Приклад 3. Перевірка доступності URL за допомогою CURL РНР
Приклад 4. Відділення заголовка від тіла отриманого за допомогою CURL РНР
Приклад 5. Визначення адреси переходу URL-адреси за допомогою CURL РНР
питання: curl_setopt($ch,FOLLOW_LOCATION,1); Помилка: вірно з Open_basedir and safe_mode the solution: a function already developed by someone the solution n 2: the same function, modifed, works great for me..= $curl_max_loops) ( $curl_loops = 0; return FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $ data = curl_exec ($ ch); list($header, $data) = explode("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop($matches)));, if (!$url) ( //couldn"t process url to redirect to $curl_loops = 0; return $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; if (!$url["host"]) $url["host"] = $last_url[ "host"]; if (!$url["path"]) $url["path"] = $last_url["path"]; url["host"] . $url["path"] . ($url["query"]?"?".$url["query"]:""); debug("Redirecting to", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
Just use this function without de FOLLOW_LOCATION and should work. Проблема була, якщо ви збираєтеся до лінії, де ви повертаєтеся, якщо http_code було різним, ніж 301 oe 302, $data has obsolete information or none. so $debbbb does the job. Приклад 6. Розбір cookie із заголовка за допомогою CURL РНР
Певні часи ви можете використовувати CURLOPT_COOKIEJAR і CURLOPT_COOKIEFILE becoz of the server php-settings(They say u may grab any files з сервера використовуючи ці options). CURLOPT_HEADER, 1) 3)Grab з headers cookies як це: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4) Set them using curl_setopt ($ ch, CURLOPT_COOKIE, $ cookies); Приклад 7. Розбір cookie із заголовка за допомогою CURL РНР
Як ЄВГЕН mentioned earlier sometimes we can"t use CURLOPT_COOKIEJAR and CURLOPT_COOKIEFILE. Below is header callback function I wrote back in January that lets you maintain cookies between curl requires to all use it together with CURLOPT_FOLLOWLOCATION.This is the code: function read_header($ch, $string) ( global $location; #keep track of location/redirects global $cookiearr; $ch # this is okay because we need to # update the global $ch with # new cookies $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep track of last redirect $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get the cookie $cookiestr = trim(substr( $string, 11, -1)); $cookie = explode(";", $cookiestr); $cookie = explode("=", $cookie); [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute тільки на кінці заголовка ($cookiearr as $key=>$value) ( $cookie .= "$key=$value; "; ) curl_setopt($ ch, CURLOPT_COOKIE, $cookie);) return $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Цей код обумовлює, що ви будете використовувати $ch без запуску її протягом усього часу (call curl_init only once, in the beginning). Якщо ви потребуєте нову $ch на будь-який час у вашому коді ви можете використовувати поточно збережені cookies в $cookiearr і включати їх в новий $ch. I wrote this function before I had enough experience with regular expressions with you won"t find any preg_match calls here. go через login і кілька сторінок перед тим, як йти на те, що я мав на увазі. Приклад 8. Установка обробника завантаження заголовка за допомогою CURL РНР
Використовуючи URL, я потребую за допомогою третього-party script, який був відновлений binary data як посилання на pass on retrieved data again as attachment. Проблема була те, що третій-party script оcasssionally відновлено HTTP errors і я хотів би, щоб пограти на zero-length attachment в такому випадку. З'єднання з використанням CURLOPT_FAILONERROR and CURLOPT_HEADERFUNCTION callback helped to process the third-party script HTTP errors можливі: функція curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i ); header("Content-Disposition: attachment; filename="file-name.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://сайт/"); curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1); curl_setopt($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); curl_setopt($resURL, CURLOPT_FAILONERROR, 1); curl_exec ($ resURL); $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE); curl_close ($ resURL); if ($intReturnCode != 200) ( print "Помилка з кодом: " . $intReturnCode; ) Приклад 9. Збереження сторінки у файл із підрахунком швидкості передачі за допомогою CURL РНР
WritePageToFile("http://es.php.net", "es.php.net.txt"); функція WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt(_SH 0); curl_exec ($sh); "; echo "Average speed download == " . $sAverageSpeedDownload ."
"; curl_close($sh); FClose ($hFile); echo "( Натисніть на файлі "".$sTxtfile."" в той же час, як hosting". " to where this script PHP).
"; echo "Average Speed upload == " . $sAverageSpeedUpload ."
"; echo"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Приклад 9. Отримання сторінки через з'єднання SSL (https)
$ch=curl_init("https://сайт"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Вимкнути помилку "SSL certificate problem, verify that the CA cert is OK" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Вимкнути помилку "SSL: Certificate subject name "hostname.ru" не дає змоги target host name "123.123"" curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $out=curl_exec($ch); //$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //echo "http_code=".$http_code,", err=".curl_error($ch); curl_close($ch); Приклад 10. Використання сесій та cookie у curl
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://сайт"); curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename); // зберігати отримані COOKIE у файл curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //надсилаємо серверу COOKIE отримані від нього при авторизації $out=curl_exec($curl); Приклад 11. Надсилання файлу та багатовимірний масив у Curl. CURLOPT_POSTFIELDS + CurlFile