PHP CURL - funksiyalar va foydalanishga misollar. PHP Curl buyruq qatori parametrlarida cURL dan kengaytirilgan foydalanish

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

curl_setopt — CURL sessiyasi uchun parametrni o'rnatadi

Parametrlar ro'yxati

cURL dastagidan olingan curl_init().

O'rnatilishi kerak bo'lgan parametr CURLOPT_XXX.

Variant parametrining qiymati.

bool:

Parametr Eslatmalar
CURLOPT_AUTOREFERER TO'G'RI maydonni avtomatik sozlash uchun Yo'naltiruvchi: sarlavha tomonidan qayta yo'naltirilgan so'rovlarda Manzil:.
CURLOPT_BINARYTRANSFER TO'G'RI doimiydan foydalanganda xom javobni qaytarish uchun CURLOPT_RETURNTRANSFER. PHP 5.1.3 dan boshlab bu parametr endi talab qilinmaydi: opsiyadan foydalanganda xom mahsulot har doim qaytariladi CURLOPT_RETURNTRANSFER.
CURLOPT_COOKIESESSION TO'G'RI joriy sessiyaga cookie-fayllarning yangi "sessiyasi" ni boshlashga ko'rsatma berish. Bu libcurl oldingi seansdan yuklangan har qanday "sessiya" cookie-fayllarini e'tiborsiz qoldirishiga olib keladi. Odatiy bo'lib, libcurl "sessiya" bo'ladimi yoki yo'qmi, har doim barcha cookie-fayllarni saqlaydi va yuklaydi. "Session" cookie-fayllari muddati tugamaydigan va faqat joriy "sessiya" uchun mavjud bo'lishi kerak bo'lgan cookie-fayllardir.
CURLOPT_CERTINFO TO'G'RI oqim uchun SSL sertifikat ma'lumotlarini chiqarish uchun STDERR xavfsiz ulanishlar bilan. cURL 7.19.1 da qo'shilgan. PHP 5.3.2 dan boshlab mavjud. To'g'ri ishlashi uchun ushbu parametr yoqilishini talab qiladi CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY TO'G'RI kutubxonaga kerakli proksi autentifikatsiya va ulanishni sozlashni amalga oshirishni aytadi, lekin ma'lumotlarni uzatmaydi. Ushbu parametr HTTP, SMTP va POP3 uchun amalga oshiriladi. 7.15.2 da qo'shilgan. PHP 5.5.0 dan mavjud.
CURLOPT_CRLF TO'G'RI Unix satr oxirlarini CRLF ga aylantirish uchun.
CURLOPT_DNS_USE_GLOBAL_CACHE TO'G'RI global DNS keshini ishlatish uchun. Ushbu parametr tarmoq uchun xavfsiz emas va sukut bo'yicha yoqilgan.
CURLOPT_FAILONERROR TO'G'RI Agar qabul qilingan HTTP kodi 400 dan katta yoki unga teng bo'lsa, muvaffaqiyatsizlik haqida batafsil hisobot uchun. Standart xatti-harakatlar kodni e'tiborsiz qoldirib, sahifani normal holatga qaytaradi.
CURLOPT_FILETIME TO'G'RI masofaviy hujjatning o'zgartirish sanasini olishga harakat qilish. Bu qiymatni funksiyadan CURLINFO_FILETIME parametri yordamida olish mumkin curl_getinfo().
CURLOPT_FOLLOWLOCATION TO'G'RI har qanday sarlavhaga amal qilish "Manzil: " server tomonidan o'z javobida yuborilgan (bu rekursiv ravishda sodir bo'lishini unutmang, PHP yuborilgan har qanday sarlavhalarni kuzatib boradi. "Manzil: ", doimiy o'rnatilgandan tashqari CURLOPT_MAXREDIRS).
CURLOPT_FORBID_REUSE TO'G'RI ulanishni qayta ishlashni tugatgandan so'ng uni qayta ishlatib bo'lmasligi uchun yopishga majburlash.
CURLOPT_FRESH_CONNECT TO'G'RI keshlangan ulanish o'rniga yangi ulanishdan foydalanishga majburlash.
CURLOPT_FTP_USE_EPRT TO'G'RI faol FTP yuklash uchun EPRT (va LPRT) dan foydalanish. Foydalanish FALSE EPRT va LPRT ni o'chirish va faqat PORT dan foydalanish uchun.
CURLOPT_FTP_USE_EPSV TO'G'RI FTP uzatish paytida EPSV buyrug'ini dastlabki sinovdan o'tkazish uchun. Agar buyruq bajarilmasa, u PASV-ga qaytadi. O'rnatish FALSE EPSVni o'chirish uchun.
CURLOPT_FTP_CREATE_MISSING_DIRS TO'G'RI Agar FTP operatsiyasi mavjud bo'lmagan yo'lga duch kelsa, etishmayotgan kataloglarni yaratish.
CURLOPT_FTPAPPEND TO'G'RI masofaviy faylni mavjud fayl ustiga yozish o'rniga oxirigacha yozish uchun.
CURLOPT_TCP_NODELAY TCP_NODELAY opsiyasi o'rnatilishi yoki tozalanishi kerakligini doimiy ravishda belgilaydi (1 = o'rnatilgan, 0 = tozalangan). Odatiy bo'lib, parametr o'chiriladi. PHP 5.2.1 dan libcurl 7.11.2 yoki undan keyingi versiyalari bilan tuzilgan versiyalar uchun mavjud.
CURLOPT_FTPASCII Taxallus CURLOPT_TRANSFERTEXT. Buning o'rniga foydalaning.
CURLOPT_FTPLISTONLY TO'G'RI FTP katalogidan faqat nomlar ro'yxatini qaytarish uchun.
CURLOPT_HEADER TO'G'RI sarlavhalarni chiqishga kiritish uchun.
CURLINFO_HEADER_OUT TO'G'RI dastagi so'rovlar qatorini kuzatish uchun. PHP 5.1.3 dan boshlab mavjud. Prefiks CURLINFO_ maxsus ishlatiladi.
CURLOPT_HTTPGET TO'G'RI HTTP so'rov usulini GET usuliga qaytarish uchun. GET standart bo'lgani uchun, bu parametr faqat so'rov usuli ilgari o'zgartirilgan bo'lsa kerak bo'ladi.
CURLOPT_HTTPPROXYTUNNEL TO'G'RI belgilangan HTTP proksi-server orqali tunnel qilish.
CURLOPT_MUTE TO'G'RI cURL funktsiyasi xabarlarini butunlay o'chirish uchun. cURL 7.15.5 da olib tashlangan (CURLOPT_RETURNTRANSFER opsiyasidan foydalanish mumkin)
CURLOPT_NETRC TO'G'RI ulanish o'rnatilayotgan masofaviy sayt uchun login va parol uchun ~/.netrc faylini o'qish uchun.
CURLOPT_NOBODY TO'G'RI javob tanasini chiqishdan chiqarib tashlash. So‘rov usuli HEAD ga o‘rnatilgan. Bu sozlamaga oʻzgartirish FALSE uni GET ga qaytarmaydi.
CURLOPT_NOPROGRESS

TO'G'RI cURL o'tkazmalarida progress indikatorini o'chirish uchun.

Izoh:

PHP ushbu parametrni avtomatik ravishda o'rnatadi TO'G'RI, uni faqat disk raskadrovka maqsadida o'zgartiring.

CURLOPT_NOSIGNAL TO'G'RI PHP jarayoniga signal yuboradigan har qanday cURL funksiyasini e'tiborsiz qoldirish. Vaqt tugashi parametrlarining to'g'ri ishlashiga ruxsat berish uchun bu parametr ko'p tarmoqli SAPI'larda sukut bo'yicha yoqilgan.
CURLOPT_POST TO'G'RI muntazam HTTP POST dan foydalanish. Ushbu POST usuli odatdagidan foydalanadi , odatda HTML shakllarida qo'llaniladi.
CURLOPT_PUT TO'G'RI HTTP PUT usuli yordamida faylni yuklab olish uchun. Amaldagi fayl parametrlar yordamida o'rnatilishi kerak CURLOPT_INFILE Va CURLOPT_INFILESIZE.
CURLOPT_RETURNTRANSFER TO'G'RI dan satr sifatida uzatish natijasini qaytarish uchun curl_exec() brauzerga to'g'ridan-to'g'ri chiqish o'rniga.
CURLOPT_SAFE_UPLOAD TO'G'RI prefiksni qo'llab-quvvatlashni o'chirish uchun @ Yuklab olingan fayllar uchun CURLOPT_POSTFIELDS, bu qiymatlar bilan o'tganligini anglatadi @ maydonlar sifatida xavfsiz tarzda uzatilishi mumkin. Prefiks o'rniga siz variantdan foydalanishingiz mumkin CURLFile d. Standart qiymat bilan PHP 5.5.0 da qo'shilgan FALSE. PHP 5.6.0 da u sukut bo'yicha teng bo'ldi TO'G'RI.
CURLOPT_SSL_VERIFYPEER FALSE cURL xost sertifikatini tekshirishni to'xtatish uchun. Tekshiriladigan muqobil sertifikatlar parametr yordamida belgilanishi mumkin CURLOPT_CAINFO yoki parametr tomonidan belgilangan sertifikatlarga ega katalog CURLOPT_CAPATH. Standart TO'G'RI cURL 7.10 versiyasidan beri. Standart tarqatish cURL 7.10 versiyasidan boshlab o'rnatiladi.
CURLOPT_TRANSFERTEXT TO'G'RI FTP uzatish uchun ASCII rejimidan foydalanish. LDAP dan foydalanganda ma'lumotlar HTML o'rniga oddiy matnda qaytariladi. Windows tizimlarida ip STDOUT ikkilik rejimga o'rnatilmaydi.
CURLOPT_UNRESTRICTED_AUTH TO'G'RI qayta yo'naltirish paytida login va parolni yuborishni davom ettirish uchun ( CURLOPT_FOLLOWLOCATION), xost nomi o'zgargan bo'lsa ham.
CURLOPT_UPLOAD TO'G'RI faylni serverga yuklashga tayyorlanish.
CURLOPT_VERBOSE TO'G'RI qo'shimcha ma'lumotlarni ko'rsatish uchun. Chiqishni oqimga yozadi STDERR, yoki parametr tomonidan belgilangan fayl CURLOPT_STDERR.

Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri turdagi bo'lishi kerak butun son:

Parametr Qiymat qiymatini o'rnating Eslatmalar
CURLOPT_BUFFERSIZE Har bir o'qish uchun ishlatiladigan bufer hajmi. Biroq, bu so'rovning bajarilishiga kafolat yo'q. cURL 7.10 da qo'shilgan.
CURLOPT_CLOSEPOLICY Konstantalardan biri CURLCLOSEPOLICY_*.

Izoh:

Ushbu parametr eskirgan, chunki u hech qachon cURL da qo'llanilmagan va ishlamagan.

PHP 5.6.0 da olib tashlangan.
CURLOPT_CONNECTTIMEOUT Ulanishga urinayotganda kutish uchun soniyalar soni. Cheksiz kutish uchun 0 dan foydalaning.
CURLOPT_CONNECTTIMEOUT_MS Ulanishga urinayotganda kutish uchun millisekundlar soni. Cheksiz kutish uchun 0 dan foydalaning. Agar libcurl tizimning standart nom echuvchisi yordamida kompilyatsiya qilingan bo'lsa, u holda ulanish hali ham taym-aut sifatida to'liq soniya kutishdan foydalanadi, minimal ruxsat etilgan vaqt 1 soniya. cURL 7.16.2 versiyasiga qo'shilgan. PHP 5.2.3 dan boshlab mavjud.
CURLOPT_DNS_CACHE_TIMEOUT DNS yozuvlari xotirada saqlanadigan soniyalar soni. Odatiy bo'lib, bu parametr 120 (2 daqiqa).
CURLOPT_FTPSSLAUTH FTP autentifikatsiya usuli (faol rejimda): CURLFTPAUTH_SSL(SSL avval tekshiriladi), CURLFTPAUTH_TLS(TLS avval tekshiriladi) yoki CURLFTPAUTH_DEFAULT(cURL o'zi uchun qaror qiladi). cURL 7.12.2 versiyasiga qo'shilgan.
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (sukut boʻyicha, CURL qaysi versiyadan foydalanishni tanlaydi), CURL_HTTP_VERSION_1_0 (majburiy HTTP/1.0) yoki CURL_HTTP_VERSION_1_1 (majburiy HTTP/1.1).
CURLOPT_HTTPAUTH

Bitwise operatoridan foydalanishingiz mumkin | (yoki) bir nechta usullarni birlashtirish. Bunday holda, cURL qo'llab-quvvatlanadigan avtorizatsiya usullari uchun serverni so'raydi va eng yaxshisini tanlaydi.

CURLAUTH_ANY taxallus CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE taxallus CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE Faylni masofaviy serverga yuklashda kutilgan fayl hajmi, baytlarda. Shuni esda tutingki, ushbu parametrdan foydalanish boshqa ma'lumotlarning ushbu qiymatdan oshib ketishini to'xtatmaydi, chunki yuborilgan ma'lumotlar natijaga bog'liq CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT Ma'lumot uzatish tezligining yuqori chegarasi, soniyada baytlarda. Tekshiruv ichida amalga oshiriladi CURLOPT_LOW_SPEED_TIME soniya, shundan so'ng PHP uzatishni juda sekin deb hisoblaydi va uni bekor qiladi.
CURLOPT_LOW_SPEED_TIME O'tkazish tezligi oshmasligi kerak bo'lgan maksimal soniyalar soni CURLOPT_LOW_SPEED_LIMIT, aks holda PHP uzatishni juda sekin deb belgilaydi va uni to'xtatadi.
CURLOPT_MAXCONNECTS Doimiy ulanishlarning maksimal soni. Cheklovga erishilganda, parametr qaysi ulanishni yopish kerakligini aniqlash uchun ishlatiladi. CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS Qabul qilingan qayta yo'naltirishlarning maksimal soni. Ushbu parametrdan opsiya bilan birga foydalaning CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Muqobil ulanish porti.
CURLOPT_POSTREDIR Variant yoqilganda HTTP POST usuli qayta ishlanishi kerakmi yoki yoʻqligini koʻrsatish uchun 1 (301 doimiy koʻchirildi), 2 (302 topildi) va 4 (303 boshqasiga qarang) ni oʻz ichiga olgan bit niqobi CURLOPT_FOLLOWLOCATION agar ko'rsatilgan qayta yo'naltirish turi sodir bo'lsa. cURL 7.19.1 da qo'shilgan. PHP 5.3.2 dan beri mavjud.
CURLOPT_PROTOCOLS

Qiymatlarning bit niqobi CURLPROTO_*. Ushbu niqob libcurl tomonidan ishlatiladigan protokollarni cheklaydi. Bu sizga libcurl-ning ko'p sonli protokollar bilan ishlashiga imkon beradi va ma'lum o'tkazmalarning ishlashini faqat ularning kichik to'plami bilan cheklaydi. Odatiy bo'lib, libcurl barcha qo'llab-quvvatlanadigan protokollardan foydalanadi. Shuningdek, parametrga qarang CURLOPT_REDIR_PROTOCOLS.

To'g'ri protokol qiymatlari: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLPROTO_HTTPS , CURLPROTO_HTTPS , CURLPROTO_FTP , LP ROTO_TFTP, CURLPROTO_ALL

CURLOPT_PROXYAUTH Proksi-serverga ulanishda ishlatiladigan HTTP avtorizatsiya usullari. Parametr uchun tavsiflangan bir xil bit niqoblaridan foydalaning CURLOPT_HTTPAUTH. Hozirda proksi avtorizatsiya uchun faqat CURLAUTH_BASIC va CURLAUTH_NTLM qo‘llab-quvvatlanadi. cURL 7.10.7 versiyasiga qo'shilgan.
CURLOPT_PROXYPORT Ulanish amalga oshirilgan proksi-serverning port raqami. Ushbu raqam parametr yordamida ham o'rnatilishi mumkin CURLOPT_PROXY.
CURLOPT_PROXYTYPE CURLPROXY_HTTP (standart) yoki CURLPROXY_SOCKS5 . cURL 7.10 da qo'shilgan.
CURLOPT_REDIR_PROTOCOLS Qiymatlarning bit niqobi CURLPROTO_*. Ushbu bit maskasi libcurl tomonidan qayta yoʻnaltirishda foydalaniladigan protokollarni cheklaydi (parametr yoqilgan holda) CURLOPT_FOLLOWLOCATION). Bu sizga ba'zi uzatishlar uchun qayta yo'naltirishda foydalaniladigan protokollar to'plamini cheklash imkonini beradi. Odatiy bo'lib, libcurl FILE va SCPdan tashqari barcha protokollarni qo'llab-quvvatlaydi. 7.19.4 dan oldingi versiyalarda qayta yo'naltirish istisnosiz barcha protokollar uchun ishlatilgan. Shuningdek, parametr tavsifiga qarang CURLOPT_PROTOCOLS protokol qiymatlari bilan doimiylar ro'yxati uchun. cURL 7.19.4 versiyasiga qo'shilgan.
CURLOPT_RESUME_FROM Etkazish boshlanishi ofset, baytlarda.
CURLOPT_SSL_VERIFYHOST SSL sertifikatida umumiy nom mavjudligini tekshirish uchun 1 dan foydalaning. Umumiy nom mavjudligini va belgilangan xostga mos kelishini tekshirish uchun 2 dan foydalaning. Jangovar muhitda ushbu parametrning qiymati 2 bo'lishi kerak (sukut bo'yicha o'rnatiladi). cURL 7.28.1 da 1 qiymatini qo‘llab-quvvatlash olib tashlandi
CURLOPT_SSLVERSION Konstantalardan biri 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) yoki CURL_SSLVERSION_TLSv1_2 (6).
CURLOPT_TIMECONDITION Parametrlarni talqin qilish usuli CURLOPT_TIMEVALUE. CURL_TIMECOND_IFMODSINCE sahifani faqat parametrda ko'rsatilgan vaqtdan beri o'zgargan bo'lsa qaytarish uchun foydalaning CURLOPT_TIMEVALUE. Agar sahifa o'zgartirilmagan bo'lsa, sarlavha qaytariladi "304 o'zgartirilmagan", bu parametrni nazarda tutadi CURLOPT_HEADER ichida o'rnatilgan TO'G'RI. Qarama-qarshi effekt uchun CURL_TIMECOND_IFUNMODSINCE dan foydalaning. Standart CURL_TIMECOND_IFMODSINCE.
CURLOPT_TIMEOUT cURL funksiyalarini bajarish uchun ruxsat etilgan maksimal soniyalar soni.
CURLOPT_TIMEOUT_MS cURL funksiyalarini bajarish uchun ruxsat etilgan maksimal millisekundlar soni. Agar libcurl oddiy tizim nomini hal qiluvchi yordamida qurilgan bo'lsa, u holda bu ulanish oralig'i baribir ikkinchi yaxlitlash taym-autlaridan foydalanadi, minimal vaqt tugashi bir soniyadan iborat bo'ladi. cURL 7.16.2 versiyasiga qo'shilgan. PHP 5.2.3 dan boshlab mavjud.
CURLOPT_TIMEVALUE 1970 yil 1 yanvardan boshlab soniyalar soni. Bu vaqt parametr tomonidan ishlatiladi CURLOPT_TIMECONDITION. Odatiy bo'lib, CURL_TIMECOND_IFMODSINCE parametri ishlatiladi.
CURLOPT_MAX_RECV_SPEED_LARGE Agar yuklab olish tezligi butun uzatish bo'yicha o'rtacha bu qiymatdan (sekundiga baytlarda ko'rsatilgan) oshsa, yuklab olish o'rtacha tezlikni ushbu parametrdan kamroq yoki unga teng saqlash uchun to'xtatiladi. Odatiy bo'lib, tezlik cheklanmagan.
CURLOPT_MAX_SEND_SPEED_LARGE Agar serverga yuklash butun uzatish davomida o'rtacha bu qiymatdan (sekundiga baytlarda ko'rsatilgan) oshib ketsa, yuklash ushbu parametrdan kamroq yoki unga teng bo'lgan o'rtacha tezlikni saqlash uchun to'xtatiladi. Odatiy bo'lib, tezlik cheklanmagan. cURL 7.15.5 da qo'shilgan. PHP 5.4.0 dan boshlab mavjud.
CURLOPT_SSH_AUTH_TYPES Bitmask bir yoki bir nechta konstantalardan iborat: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. O'rnatish CURLSSH_AUTH_ANY libcurl ulardan birini mustaqil tanlashi uchun. cURL 7.16.1 da qo'shilgan.
CURLOPT_IPRESOLVE Ilovaga xost nomi aniqlanadigan IP manzil turini tanlashga ruxsat beradi. Agar siz IP manzilining bir nechta versiyasidan olingan xost nomidan foydalansangiz, bu zarur. Mumkin qiymatlar bo'lishi mumkin CURL_IPRESOLVE_NIMA, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, va sukut bo'yicha CURL_IPRESOLVE_NIMA. cURL 7.10.8 da qo'shilgan.

Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri turdagi bo'lishi kerak ip:

Parametr Qiymat qiymatini o'rnating Eslatmalar
CURLOPT_CAINFO Tugunlar tekshiriladigan bir yoki bir nechta sertifikatdan iborat fayl nomi. Ushbu parametr faqat bilan birgalikda ishlatilganda mantiqiy bo'ladi CURLOPT_SSL_VERIFYPEER. Mutlaq yo'lni talab qiladi.
CURLOPT_CAPATH Bir nechta CA sertifikatlarini o'z ichiga olgan katalog. bilan birgalikda ushbu parametrdan foydalaning CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Sarlavha tarkibi "Cookie:", HTTP so'rovida ishlatiladi. Esda tutingki, bir nechta cookie fayllari nuqta-vergul va keyin bo'sh joy bilan ajratiladi (masalan, " meva = olma; rang = qizil")
CURLOPT_COOKIEFILE Cookie-fayllarni o'z ichiga olgan fayl nomi. Bu fayl Netscape formatida yoki faylga yozilgan oddiy HTTP sarlavhalarida bo'lishi kerak. Agar fayl nomi sifatida bo'sh satr uzatilsa, cookie fayllari saqlanmaydi, lekin ularni qayta ishlash hali ham faol bo'ladi.
CURLOPT_COOKIEJAR Joriy uzatishning barcha ichki cookie-fayllari tutqich yopilgandan keyin saqlanadigan fayl nomi, masalan, curl_close chaqirilgandan keyin.
CURLOPT_CUSTOMREQUEST

Buning oʻrniga maxsus soʻrov usuli ishlatilgan "OLING" yoki "BOSH" HTTP so'rovini yuborishda. Bu so'rovlar uchun foydalidir "O'chirish" yoki boshqa kam uchraydigan HTTP so'rovlari. To'g'ri ma'nolar kabi so'zlar bo'ladi "OLING", "POST", "ULANMOQ" va hokazo; bular. Bu yerga butun HTTP so'rov qatorini kiritmang. Masalan, ko'rsatma "Olish /index.html HTTP/1.0\r\n\r\n" noto'g'ri bo'ladi.

Izoh:

Server ushbu turdagi so'rovni qo'llab-quvvatlashiga ishonchingiz komil bo'lmaguningizcha, bu xususiyatdan foydalanmang.

CURLOPT_EGDSOCKET Kabi CURLOPT_RANDOM_FILE, bundan tashqari fayl nomi Entropy Gathering Daemon soketiga o'rnatilgan.
CURLOPT_ENCODING Sarlavha tarkibi "Qabul qilish-kodlash:". Bu so'rovni dekodlash imkonini beradi. Qo'llab-quvvatlanadigan kodlashlar "identifikatsiya", "deflyatsiya" Va "gzip". Agar bo'sh satr uzatilsa, "" , barcha qo'llab-quvvatlanadigan kodlash turlarini o'z ichiga olgan sarlavha yuboriladi. cURL 7.10 da qo'shilgan.
CURLOPT_FTPPORT FTP "PORT" buyrug'i uchun IP-manzilni aniqlash uchun foydalaniladigan qiymat. "PORT" buyrug'i serverga qaysi IP-manzilga ulanishi kerakligini aytadi. Bu IP manzili, xost nomi, tarmoq interfeysi nomi (Unix ostida) yoki standart tizim IP manzilidan foydalanish uchun oddiygina "-" bo'lishi mumkin.
CURLOPT_INTERFACE Foydalanadigan tarmoq interfeysi nomi. Interfeys nomi, IP manzili yoki xost nomi bo'lishi mumkin.
CURLOPT_KEYPASSWD Shaxsiy kalitdan foydalanish uchun parol kerak CURLOPT_SSLKEY yoki CURLOPT_SSH_PRIVATE_KEYFILE. cURL 7.16.1 da qo'shilgan.
CURLOPT_KRB4LEVEL Xavfsizlik darajasi KRB4 (Kerberos 4). Quyidagi qiymatlardan har biri (eng kuchsizdan kuchliga qarab) to'g'ri: "aniq", "xavfsiz", "maxfiy", "xususiy".. Belgilangan satr berilgan qiymatlardan farq qilsa, qiymat ishlatiladi "xususiy". Ushbu parametrni sozlash NULL KRB4 xavfsizligini butunlay o'chirib qo'yadi. Hozirda KRB4 xavfsizligi faqat FTP tranzaksiyalari bilan ishlaydi.
CURLOPT_POSTFIELDS HTTP POST so'rovida uzatiladigan barcha ma'lumotlar. Faylni uzatish uchun fayl nomidan oldin belgilang @ , va shuningdek, faylning to'liq yo'lidan foydalaning. Fayl turini format yordamida ham belgilash mumkin " ;type=mimetype" fayl nomidan keyin. Bu parametr url kodlangan qator sifatida uzatilishi mumkin, masalan " para1=val1¶2=val2&...", va massiv ko'rinishida, uning kalitlari maydonlarning nomlari va qiymatlari ularning mazmuni bo'ladi. Agar qiymat massiv bo'lsa, sarlavha Kontent turi ga o'rnatiladi ko'p qismli/shakl-ma'lumotlar. PHP 5.2.0 dan boshlab, prefiksli fayllarni uzatishda @ , qiymat massiv bo'lishi kerak. PHP 5.5.0 dan boshlab, prefiks @ eskirgan va fayllar yordamida yuborilishi mumkin CURLFile. Prefiks @ bilan boshlanadigan qiymatlarga ruxsat berish uchun o'chirib qo'yish mumkin @ variantni o'rnatish orqali CURLOPT_SAFE_UPLOAD ma'nosida TO'G'RI.
CURLOPT_PROXY HTTP proksi-server orqali so'rovlar yo'naltiriladi.
CURLOPT_PROXYUSERPWD Shaklda yozilgan login va parol ":" , proksi-server orqali ulanishda ishlatiladi.
CURLOPT_RANDOM_FILE SSL uchun tasodifiy sonlar generatorini ishga tushirish uchun foydalaniladigan fayl nomi.
CURLOPT_RANGE Yuklab olinadigan ma'lumotlar diapazoni, formatda "X-Y", va X yoki Y qoldirilishi mumkin. HTTP protokoli shuningdek vergul bilan ajratilgan bir nechta diapazonlarni uzatishni qo'llab-quvvatlaydi, ular formatda ko'rsatilgan. "X-Y, N-M".
CURLOPT_REFERER Sarlavha tarkibi "Yo'naltiruvchi:", bu HTTP so'rovida ishlatiladi.
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 32 oʻn oltilik raqamdan iborat qator. Satr masofaviy kompyuterning umumiy kalitining MD5 nazorat summasi bo'lishi kerak va libcurl nazorat yig'indisi umumiy kalitga mos kelguncha masofaviy xost bilan ulanishni tiklaydi. Ushbu parametr faqat SCP va SFTP yordamida ma'lumotlarni uzatish uchun mo'ljallangan. cURL 7.17.1 da qo'shilgan.
CURLOPT_SSH_PUBLIC_KEYFILE Ochiq kalitingiz uchun fayl nomi. Agar ko'rsatilmagan bo'lsa, HOME muhit o'zgaruvchisi o'rnatilgan bo'lsa, libcurl sukut bo'yicha $HOME/.ssh/id_dsa.pub fayliga va HOME muhit o'zgaruvchisi o'rnatilmagan bo'lsa, joriy katalogdagi "id_dsa.pub" fayliga o'rnatiladi. cURL 7.16.1 da qo'shilgan.
CURLOPT_SSH_PRIVATE_KEYFILE Shaxsiy kalitingiz uchun fayl nomi. Agar ko'rsatilmagan bo'lsa, HOME muhit o'zgaruvchisi o'rnatilgan bo'lsa, libcurl sukut bo'yicha $HOME/.ssh/id_dsa fayliga va HOME muhit o'zgaruvchisi o'rnatilmagan bo'lsa, joriy katalogdagi "id_dsa" fayliga o'rnatiladi. Agar fayl parol bilan himoyalangan bo'lsa, parolni foydalanib o'rnating CURLOPT_KEYPASSWD. cURL 7.16.1 da qo'shilgan.
CURLOPT_SSL_CIPHER_LIST SSL uzatishda ishlatiladigan shifrlar ro'yxati. Masalan, RC4-SHA Va TLSv1 to'g'ri shifrlangan ro'yxatlardir.
CURLOPT_SSLCERT To'g'ri formatlangan PEM sertifikatiga ega fayl nomi.
CURLOPT_SSLCERTPASSWD Sertifikatdan foydalanish uchun parol kerak CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Sertifikat formati. Qo'llab-quvvatlanadigan formatlar "PEM"(standart), "DER" Va "ENG". cURL 7.9.3 versiyasiga qo'shilgan.
CURLOPT_SSLENGINE Parametrda ko'rsatilgan SSL shaxsiy kaliti uchun shifrlash mexanizmi identifikatori CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Assimetrik shifrlash operatsiyalari uchun ishlatiladigan shifrlash mexanizmining identifikatori.
CURLOPT_SSLKEY SSL shaxsiy kalit faylining nomi.
CURLOPT_SSLKEYPASSWD

Parametr tomonidan ko'rsatilgan SSL shaxsiy kalitidan foydalanish uchun zarur bo'lgan maxfiy parol CURLOPT_SSLKEY.

Izoh:

Ushbu parametr qimmatli parolni o'z ichiga olganligi sababli, ushbu PHP skriptini xavfsiz joyda saqlashni unutmang.

CURLOPT_SSLKEYTYPE Parametrda ko'rsatilgan SSL shaxsiy kaliti turi CURLOPT_SSLKEY. Quyidagi asosiy turlar qo'llab-quvvatlanadi: "PEM"(standart), "DER" Va "ENG".
CURLOPT_URL Yuklab olinadigan URL. Ushbu parametr seansni ishga tushirishda ham o'rnatilishi mumkin curl_init().
CURLOPT_USERAGENT Sarlavha tarkibi "Foydalanuvchi-agent:", HTTP so'rovida yuborilgan.
CURLOPT_USERPWD Ulanish vaqtida ishlatiladigan login va parol formatda ko'rsatilgan ":" .

Quyidagi parametr parametrlari uchun qiymat parametri massiv bo'lishi kerak:

Parametr Qiymat qiymatini o'rnating Eslatmalar
CURLOPT_HTTP200ALIASES Noto'g'ri javoblar emas, balki to'g'ri javob sifatida ko'rib chiqiladigan HTTP 200 javoblar to'plami. cURL 7.10.3 versiyasiga qo'shilgan.
CURLOPT_HTTPHEADER Format massividagi HTTP sarlavhalari majmuasi ("Tarkib turi: matn/tozalik", "Kontent uzunligi: 100")
CURLOPT_POSTQUOTE FTP so'rovi bajarilgandan so'ng serverda bajariladigan FTP buyruqlar majmuasi.
CURLOPT_QUOTE FTP so'rovini yuborishdan oldin serverda bajariladigan FTP buyruqlar majmuasi.

Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri oqim tutqichi bo‘lishi kerak (masalan, funksiya tomonidan qaytariladi) fopen()):

Parametr Qiymat qiymatini o'rnating
CURLOPT_FILE O'tkazish natijasi yoziladigan fayl. Standart chiqish oqimi STDOUT(brauzer oynasi).
CURLOPT_INFILE Serverga yuklanganda ma'lumotlar o'qilishi kerak bo'lgan fayl.
CURLOPT_STDERR Xato oqimi oʻrniga ishlatiladigan muqobil xato chiqish fayli STDERR.
CURLOPT_WRITEHEADER Joriy operatsiya sarlavhalari yoziladigan fayl.

Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri yaroqli funksiya nomi yoki yopilishi boʻlishi kerak:

Parametr Qiymat qiymatini o'rnating
CURLOPT_HEADERFUNCTION Qayta qo'ng'iroq qilish funktsiyasi ikkita parametrni oladi. Birinchi parametr - cURL tutqichi, ikkinchi parametr - yoziladigan sarlavhalarni o'z ichiga olgan satr. Sarlavhalar ushbu qayta qo'ng'iroq funksiyasidan foydalanib yozilishi kerak. Yozilgan baytlar sonini qaytarish kerak.
CURLOPT_PASSWDFUNCTION Qayta qo'ng'iroq qilish funktsiyasi uchta parametrni oladi. Birinchi parametr - cURL tutqichi, ikkinchi parametr - parol so'rash qatori va uchinchi parametr - maksimal parol uzunligi. Parolni o'z ichiga olgan qatorni qaytarish kerak.
CURLOPT_PROGRESSFUNCTION

Qayta qo'ng'iroq qilish funktsiyasi beshta parametrni oladi. Birinchisi - cURL identifikatori, ikkinchisi - serverdan yuklab olinishi kutilayotgan baytlarning umumiy soni, uchinchisi - allaqachon yuklab olingan baytlar soni, to'rtinchisi - serverga yuborilishi kutilayotgan baytlarning umumiy soni va beshinchisi - allaqachon yuborilgan baytlar soni.

Izoh:

Qayta qo'ng'iroq qilish funktsiyasi faqat variant mavjud bo'lsa chaqiriladi CURLOPT_NOPROGRESS qiymatga sozlang FALSE.

Transferni bekor qilish uchun nolga teng bo'lmagan qiymatni qaytarishingiz mumkin. Bunday holda xato ko'rsatiladi CURLE_ABORTED_BY_CALL BACK.

CURLOPT_READFUNCTION Qayta qo'ng'iroq qilish funktsiyasi uchta parametrni oladi. Birinchi parametr cURL tutqichi, ikkinchi parametr opsiya orqali cURL ga uzatiladigan oqim resursidir. CURLOPT_INFILE, va uchinchi parametr - o'qish uchun ruxsat etilgan maksimal ma'lumotlar miqdori. Qayta qo'ng'iroq qilish funktsiyasi so'ralgan ma'lumotlar miqdoridan ko'p bo'lmagan uzunlikdagi satrni qaytarishi kerak, odatda uzatilgan oqim manbasidan o'qish orqali. Fayl tugashini bildirish uchun bo'sh satrni qaytarish kerak EOF.
CURLOPT_WRITEFUNCTION Qayta qo'ng'iroq qilish funktsiyasi ikkita parametrni oladi. Birinchi parametr cURL tutqichi, ikkinchi parametr esa yozilishi kerak bo'lgan ma'lumotlarni o'z ichiga olgan satrdir. Ushbu funktsiya yordamida ma'lumotlarni saqlash kerak. U yozilgan baytlarning aniq sonini qaytarishi kerak, aks holda yuklab olish xatolik bilan to'xtatiladi.

Boshqa ma'nolari:

Qaytish qiymatlari

Qaytadi TO'G'RI muvaffaqiyatli tugatilgandan so'ng yoki FALSE xato bo'lgan taqdirda.

O'zgarishlar ro'yxati

Versiya Tavsif
5.6.0 Variant CURL_SAFE_UPLOAD endi standart qiymatga ega TO'G'RI.
5.6.0 O'chirilgan variant CURLOPT_CLOSEPOLICY va unga bog'liq ma'nolar.
5.5.0 cURL resursi qayta qo'ng'iroq qilish funktsiyasiga birinchi argument sifatida qo'shiladi CURLOPT_PROGRESSFUNCTION.
5.5.0 Qo'shilgan variant CURLOPT_SHARE.
5.3.0 Qo'shilgan variant CURLOPT_PROGRESSFUNCTION.
5.2.10 Qo'shilgan variantlar CURLOPT_PROTOCOLS Va CURLOPT_REDIR_PROTOCOLS.
5.1.0 Qo'shilgan variantlar CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH Va CURLOPT_TIMECONDITION.
5.0.0 Qo'shilgan variantlar CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE Va CURLOPT_HTTP200ALIASES.

Misollar

1-misol CURL seansini ishga tushirish va veb-sahifani yuklash

// yangi cURL resursini yarating
$ch = curl_init();

/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/

$ch = curl_init();

$data = massiv("name" => "Foo" , "fayl" => "@/home/user/test.png" );

Curl_setopt($ch, CURLOPT_URL, "http://localhost/upload.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $ma'lumotlar);

Curl_exec($ch);
?>

Ushbu misolni ishga tushirish natijasi:

Massiv ( => Foo) Massiv ( => Massiv ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279))

Eslatmalar

Izoh:

Massivni o'tkazish CURLOPT_POSTFIELDS sifatida ma'lumotlarni kodlaydi ko'p qismli/shakl-ma'lumotlar, holbuki URL-kodlangan satrni o'tkazish ma'lumotlarni shunday kodlaydi ilova/x-www-form-urlencoded.

cURL - bu turli serverlar bilan ishlash imkonini beruvchi va ko'plab protokollarni qo'llab-quvvatlaydigan vositadir: HTTP, FTP, TELNET va boshqalar. cURL dastlab buyruq qatori yordam dasturidir. Ammo, baxtimizga, PHP cURL kutubxonasi bilan ishlashni qo'llab-quvvatlaydi. Ushbu maqolada biz cURL bilan ishlashning ahamiyatsiz bo'lmagan misollarini ko'rib chiqamiz.

Nima uchun cURL?

Aslida, masalan, sahifa mazmunini olish uchun boshqa serverga so'rov yuborishning ko'plab boshqa usullari mavjud. Ko'p odamlar, asosan, dangasalik tufayli, cURL o'rniga oddiy PHP funktsiyalaridan foydalanadilar:

$content = file_get_contents("http://www.example.com"); // yoki $lines = file("http://www.example.com"); // yoki readfile("http://www.example.com");

Biroq, ular xatolarni samarali hal qilishga imkon bermaydi. Shuningdek, ular umuman qila olmaydigan bir qator vazifalar mavjud - masalan, cookie-fayllar bilan ishlash, avtorizatsiya, so'rovlarni yuborish, fayllarni yuklab olish.

cUrl bir nechta protokollarni qo'llab-quvvatlaydigan va to'liq so'rov ma'lumotlarini taqdim etadigan kuchli vositadir.

cUrl asoslari

Murakkab misollarga o'tishdan oldin PHP da cURL so'rovining asosiy tuzilishini ko'rib chiqamiz. PHP da cURL so'rovini bajarish uchun siz 4 ta asosiy qadamni bajarishingiz kerak:

  1. Initializatsiya.
  2. Sozlash opsiyalari.
  3. So'rovni bajarish.
  4. Tozalash resurslari.
// 1. ishga tushirish $ch = curl_init(); // 2. parametrlarni belgilash, jumladan URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. so'rovni bajarish va javobni olish $output = curl_exec($ch); // 4. tozalash resurslari curl_close($ch);

Biz asosan ushbu maqoladagi №2-bosqichni ko'rib chiqamiz, chunki bu erda sehr sodir bo'ladi. CURL variantlari ro'yxati juda katta, shuning uchun biz bugungi kunda barcha variantlarni ko'rib chiqmaymiz, lekin aniq muammolarni hal qilish uchun foydali bo'lganlardan foydalanamiz.

Xatolarni kuzatish

Agar kerak bo'lsa, xatolarni kuzatish uchun quyidagi qatorlarni qo'shishingiz mumkin:

// ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL xatosi: " . curl_error($ch); ) // ...

E'tibor bering, biz "==" o'rniga "===" dan foydalanamiz, chunki Bo'sh server javobini va xatolik yuz berganda qaytariladigan FALSE mantiqiy qiymatini farqlash kerak.

So'rov haqida ma'lumot olish

Yana bir ixtiyoriy qadam - bajarilgandan so'ng cURL so'rovi haqida ma'lumot olishdir.

// ... curl_exec($ch); $info = curl_getinfo($ch); echo "Oldi". $info["total_time"] . "url uchun soniyalar". $info["url"]; // ...

Natijada siz quyidagi ma'lumotlarga ega massivni olasiz:

  • "url"
  • "kontent_turi"
  • "http_kod"
  • "header_size"
  • "so'rov_hajmi"
  • "fayl vaqti"
  • "ssl_verify_result"
  • "redirect_count"
  • "jami_vaqt"
  • "namelookup_time"
  • "ulanish_vaqti"
  • "pretransfer_time"
  • "size_yuklash"
  • "siz_yuklab olish"
  • "tezlik_yuklab olish"
  • "tezlik_yuklash"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "qayta yo'naltirish_vaqt"

Brauzerga qarab qayta yo'naltirish kuzatuvi

Ushbu misolda biz turli xil brauzer sozlamalari asosida qayta yo'naltirishni aniqlaydigan skript yozamiz. Misol uchun, ba'zi saytlar tashrif buyuruvchilarni mobil qurilmalardan boshqa mamlakatlardan tashrif buyuruvchilarga yo'naltiradi.

Biz CURLOPT_HTTPHEADER parametridan foydalanib, o‘z sarlavhalarimizni, jumladan, User-Agent va Language kabilarni o‘rnatamiz va saytlar bizni qayerga yo‘naltirayotganini ko‘ramiz.

// URL manzillar $urls = massiv("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // brauzerlar $brauzerlar = massiv("standart" => massiv ("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)", "til" => "en-us,en;q=0.5"), "iphone" => massiv ("user_agent" => "Mozilla/5.0 (iPhone; U; Mac OS X kabi protsessor; en) AppleWebKit/420+ (KHTML, Gecko kabi) Versiya/3.0 Mobile/1A537a Safari/419.3", "til" => "en"), "fransuzcha" => massiv ("user_agent" = > "Mozilla/4.0 (mos keladi; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "til" => "fr,fr-FR;q=0.5")); foreach ($urllar $url) ( echo "URL: $url\n"; foreach ($test_name sifatida $brauzerlar => $brauzer) ( $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL) manzilini o'rnating , $url); // ishlatiladigan brauzer va tilni ko'rsating curl_setopt($ch, CURLOPT_HTTPHEADER, massiv("User-Agent: ($browser["user_agent"])), "Qabul qilish-Language: ($brauzer["language" ]) ")); // bizga curl_setopt($ch, CURLOPT_NOBODY, 1) sahifa mazmuni kerak emas; // bizga faqat curl_setopt($ch, CURLOPT_HEADER, 1); sarlavhalari kerak; // o‘rniga natijani qaytaring uning chiqishi curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // HTTP sarlavhalarida qayta yoʻnaltirishni aniqlang? agar (preg_match("!Location: (.*)!" , $output, $matches)) ( echo "$test_name: qayta yoʻnaltiradi $matches\n"; ) else ( echo "$test_name: qayta yoʻnaltirish yoʻq\n"; ) ) echo "\n\n"; )

Bir tsiklda biz har bir URL uchun brauzerlarni tekshiramiz. Avval biz so'rovimiz uchun variantlarni o'rnatamiz: URL va brauzer va sinovdan o'tadigan til.

Chunki Biz maxsus variantni o'rnatdik; so'rov natijasi faqat HTTP sarlavhalarini o'z ichiga oladi. Oddiy oddiy iboradan foydalanib, javobda "Joylashuv:" qatori mavjudligini tekshirishimiz mumkin.

Skriptni bajarish natijasi:

URL: http://www.cnn.com standarti: http://edition.cnn.com/ ga yo‘naltiradi iphone: http://edition.cnn.com/ ga yo‘naltiradi fransuzcha: http://edition.cnn ga yo‘naltiradi .com/ URL: http://www.mozilla.com standarti: https://www.mozilla.org/firefox/ ga yo‘naltiradi iphone: https://www.mozilla.org/firefox/ fransuzchaga yo‘naltiradi: https://www.mozilla.org/firefox/ URL: http://www.facebook.com standarti: https://www.facebook.com/ ga yo'naltiradi iphone: http://m.facebook.com saytiga yo'naltiradi /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr frantsuzcha: qayta yo'naltirish yo'q

POST so'rovlarini yuborish

GET so'rovlarini bajarishda ma'lumotlar so'rovlar qatorida uzatilishi mumkin. Misol uchun, Google-da qidirganingizda, so'rovingiz URL manziliga tarjima qilinadi:

http://www.google.com/search?q=google

Ushbu so'rov natijasini olish uchun sizga cURL ham kerak emas, siz dangasa bo'lishingiz va "file_get_contents()" dan foydalanishingiz mumkin.

Ammo ba'zi HTML shakllari POST usulidan foydalanadi. Bunday holda, ma'lumotlar URL manzilida emas, balki so'rov xabarining asosiy qismida yuboriladi.

Keling, POST so'rovlarini yuboradigan skript yozaylik. Birinchidan, ushbu so'rovlarni qabul qiladigan va unga yuborilgan ma'lumotlarni qaytaradigan oddiy PHP faylini yarataylik. Keling, uni post_output.php deb ataymiz:

$url = "http://localhost/post_output.php"; $post_data = massiv ("foo" => "bar", "so'rov" => "FooBar", "action" => "Yuborish"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // POST so'rovini yaratish curl_setopt($ch, CURLOPT_POST, 1); // ma'lumotlarni qo'shing curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;

Ushbu skript chiqadi:

Massiv ( => bar => FooBar => Yuborish)

Ushbu skript post_output.php fayliga POST so'rovini yubordi. $_POST massivining mazmunini chiqardi va biz bu javobni cURL yordamida oldik.

Fayllar yuklanmoqda

Oldingi misoldagi kabi, keling, so'rovlarni qabul qiladigan fayl yarataylik, upload_output.php :

Print_r($_FILES);

Va fayllarni yuklab oladigan skriptning o'zi:

$url = "http://localhost/upload_output.php"; $post_data = massiv ("foo" => "bar", // yuklash uchun fayl "yuklash" => "@/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_ma'lumotlar); $output = curl_exec($ch); curl_close($ch); echo $output;

Agar siz faylni yuklamoqchi bo'lsangiz, oddiy POST so'rovi parametri kabi "@" prefiksi bilan unga yo'lni o'tkazish kifoya. Skriptning natijasi:

Massiv ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941))

Ko'p CURL

PHPdagi cURL ning ilg'or xususiyatlaridan biri bir vaqtning o'zida va asinxron ravishda bir nechta so'rovlarni bajarish qobiliyatidir.

Oddiy sharoitlarda skript to'xtaydi va so'rovning bajarilishini kutadi. Va agar siz ko'p so'rovlarni bajarishingiz kerak bo'lsa, bu juda ko'p vaqtni olishi mumkin, chunki... ketma-ket bajarasiz. Ushbu cheklovni chetlab o'tish mumkin:

// ishlov beruvchilarni yaratish $ch1 = curl_init(); $ch2 = curl_init(); // parametrlarni o'rnatish 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); //bir nechta cURL tutqichini yaratish $mh = curl_multi_init(); // ishlov beruvchilarni qo'shish curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // so'rovlarni bajarish ( curl_multi_exec($mh, $running); ) while ($running > 0); // resurslarni bo'shatish curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

G'oya shundan iboratki, siz bir nechta cURL tutqichlarini yaratishingiz, ularni bitta ko'p tutqich ostida birlashtirishingiz va ularni asinxron tarzda bajarishingiz mumkin.

Birinchidan, hamma narsa oddiy cURL so'rovi bilan bir xil - deskriptor yaratiladi ( curl_init() ), parametrlar o'rnatilgan ( curl_setopt() ). Keyinchalik, multi-deskriptor yaratiladi ( curl_multi_init() ) va avval yaratilgan oddiy identifikatorlar qo'shiladi ( curl_multi_add_handle() ). Odatda curl_exec() ni chaqirish o'rniga biz qo'ng'iroq qilamiz curl_multi_exec() bu funksiya bizga ikkinchi parametr - $running yordamida faol ulanishlar soni haqida ma'lumot beradi. Shuning uchun tsikl $running 0 ga teng bo'lguncha ishlaydi. Va, albatta, ishni tugatgandan so'ng, resurslarni bo'shatish kerak.

Ushbu misolda biz so'rovlar natijasini STDOUT ga chiqaramiz. Multi cURL dan foydalanishning ahamiyatsiz bo'lmagan holatini ko'rib chiqaylik.

WordPress-da tashqi havolalarni tekshirish

Tashqi saytlarga havolalarni o'z ichiga olgan juda ko'p postlarga ega blogni tasavvur qiling. Ushbu havolalarning ba'zilari ishlamasligi mumkin.

Keling, barcha buzilgan havolalarni topadigan va ularni bizga ko'rsatadigan skript yozaylik.

Birinchidan, biz barcha tashqi havolalarni ma'lumotlar bazasidan tortib olishimiz kerak:

// CONFIG $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = massiv("localhost", "sayt"); $max_connections = 10; $url_list = massiv(); $working_urls = massiv(); $dead_urls = massiv(); $not_found_urls = massiv(); $active = null; // agar (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Ulanib bo‘lmadi: " . mysql_error()); ) agar (!mysql_select_db($db_name)) ( die("Mumkin) dbni tanlamaslik: " . mysql_error()); ) // matndagi havolalar bilan barcha xabarlarni oling $q = "post_content FROM wp_posts QAYERDA post_content "%href=%" VA post_status = "publish" VA post_type = "post ""; $r = mysql_query($q) yoki o'lim(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches oddiy ifoda yordamida barcha havolalarni yig'ish )) ( foreach ($url sifatida mos keladi) ( // keraksiz domenlarni filtrlang $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) (davom etish; ) // jamlash $url_list = $url; ) ) ) // takrorlashlarni olib tashlash $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Tekshirish uchun URL yo'q"); )

Skriptning ushbu qismida biz ma'lumotlar bazasidan barcha tashqi havolalarni olib tashlaymiz. Keling, ularni tekshiramiz:

$mh = curl_multi_init(); // 1. uchun havolalar qo'shing ($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 "==O'lik URL manzillar==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URL==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Ishchi URL manzillar==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. berilgan URL funksiyasi bilan tutqichni qoʻshadi add_url_to_multi_handle($mh, $url_list) ( statik $index = 0; // agar havolalar hali ham mavjud boʻlsa if (isset($url_list[$index])) ( // hammasi odatdagidek $ ch = curl_init(); // parametrlarni o'rnatish curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // natijani ko'rsatish o'rniga curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ruxsat berish redirects curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // vaqtni tejash uchun faqat sarlavhalarni oling curl_setopt($ch, CURLOPT_NOBODY, 1); // ko'p tutqichli curl_multi_add_handle($mh, $ch); $index++;) )

Keling, kodni batafsil ko'rib chiqaylik (raqamlash koddagi izohlarga mos keladi):

  1. Tizimni iplar bilan ortiqcha yuklamaslik uchun biz identifikatorlarning dastlabki sonini qo'shamiz. Raqam $max_connections o'zgaruvchisi tomonidan boshqariladi.
  2. $curRunning o'zgaruvchisi ishlaydigan iplar sonini saqlaydi, $running oldingi qiymatni saqlaydi; agar ular teng bo'lmasa, u holda iplardan biri ishni tugatgan.
  3. Tugallangan so'rov haqida ma'lumot olamiz.
  4. Agar serverdan javob bo'lmasa, havola ishlamayapti.
  5. Server javobi 404.
  6. Aks holda havola ishlaydi.
  7. So'rov bajarildi, biz resurslarni chiqaramiz.
  8. Multi deskriptorga yangi URL qo'shamiz.
  9. Funktsiya add_url_to_multi_handle() multi-deskriptorga berilgan URL bilan yangi tutqichni qo'shadi.

Skriptni ishga tushiramiz:

O'lik URL'lar== xample1234.com/ ==404 URL== www.google.com/dsfasdfafd ==Ishchi URL'lar== 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/ fortawesome.github.io/Font-Awesome/ www.oracle.com/technetwork/java/javafx/downloads/index.html kodeksi. 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

Tekshirish taxminan 2 soniya davom etdi. Bir vaqtning o'zida 10 ta ipni ishga tushirish orqali unumdorlik odatdagi cURL so'rovlariga nisbatan 10 barobar ortadi. Server javobining mazmunini olish uchun funksiyadan foydalaning curl_multi_getcontent($ch) , bu yerda $ch dan olingan deskriptordir curl_multi_info_read() .

PHP-dagi boshqa cURL xususiyatlari

HTTP autentifikatsiyasi

Agar HTTP so'rovi autentifikatsiyani talab qilsa, quyidagi koddan foydalaning:

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // foydalanuvchi nomi va parolni jo'natish curl_setopt($ch, CURLOPT_USERPWD, "myusername: mypassword"); // agar qayta yoʻnaltirishga ruxsat berilsa curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL qayta yo'naltirishdan keyin parolni yuboradi curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);

FTP orqali yuklash

PHP FTP bilan ishlash uchun o'z kutubxonasiga ega, ammo siz cURL dan ham foydalanishingiz mumkin:

// faylni o'qing $file = fopen("/path/to/file", "r"); // url allaqachon kerakli ma'lumotlarni o'z ichiga oladi $url = "ftp://username: [elektron pochta himoyalangan]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // imkoniyatlari curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, fayl hajmi("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($) ch); curl_close($ch);

Proksi-serverdan foydalanish

So'rovlar ma'lum bir proksi-server orqali amalga oshirilishi mumkin:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // proksi-manzil curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // avtorizatsiya zarur bo'lsa curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch);

Qayta qo'ng'iroq qilish funktsiyalari

So'rov bajarilayotganda, uning tugashini kutmasdan, qayta qo'ng'iroqlardan foydalanish mumkin. Misol uchun, server javobi yuklab olinayotganda, biz to'liq yuklab olishni kutmasdan allaqachon olingan ma'lumotlardan foydalanishimiz mumkin.

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_funksiya"); curl_exec($ch); curl_close($ch); progress_funksiyasi($ch,$str) ( echo $str; return strlen($str); )

Qayta qo'ng'iroq qilish funktsiyasi so'rovning to'g'ri ishlashi uchun satr uzunligini qaytarishi kerak.

Har safar server javobining keyingi qismi qabul qilinganda, qayta qo'ng'iroq qilinadi.

Xulosa

Ushbu maqolada biz PHP da cURL ning ilg'or xususiyatlarini ko'rib chiqdik. Keyingi safar URL so'rovlarini yuborishingiz kerak bo'lsa, cURL dan foydalaning.

Biz ko'pincha Internetdan turli xil fayllarni yuklab olishimiz kerak, masalan, bajariladigan dastur fayllari, skript fayllari, manba arxivlari. Lekin buni har doim ham brauzer orqali qilish shart emas. Ko'pgina hollarda terminal orqali barcha amallarni bajarish ancha oson. Chunki shu tarzda siz jarayonni avtomatlashtirishingiz mumkin. Boshqa tomondan, veb-ustalar vaqti-vaqti bilan veb-saytga kirish imkoniyatini sinab ko'rishlari, yuborilgan va qabul qilingan sarlavhalarni tekshirishlari va yana ko'p narsalarni qilishlari kerak.

Bunday muammolarni va shunga o'xshash diapazondagi muammolarni hal qilish uchun siz curl yordam dasturidan foydalanishingiz mumkin. Bu sizga juda kengroq muammolarni hal qilish imkonini beradi, jumladan, hatto saytdagi foydalanuvchi harakatlarini simulyatsiya qilish. Ushbu maqolada biz curldan qanday foydalanishni, nima ekanligini va bu dastur nima uchun kerakligini ko'rib chiqamiz.

Aslida, curl Linux yoki Windows uchun buyruq qatori yordam dasturidan ko'proq narsadir. Bu URL sahifalari bilan ishlash va fayllarni uzatishning asosiy imkoniyatlarini amalga oshiradigan kutubxonalar to'plami. Kutubxona protokollar bilan ishlashni qo'llab-quvvatlaydi: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, shuningdek POP3, IMAP va SMTP. Bu sahifalardagi foydalanuvchi harakatlarini va URL manzillari bilan boshqa operatsiyalarni simulyatsiya qilish uchun juda yaxshi.

Curl kutubxonasini qo'llab-quvvatlash ko'plab dasturlash tillari va platformalariga qo'shildi. Curl yordam dasturi ushbu kutubxona uchun mustaqil o'ram hisoblanadi. Aynan shu yordamchi dasturga biz ushbu maqolada e'tibor qaratamiz.

curl buyrug'i

Curl linux buyrug'idan qanday foydalanish mumkinligi tavsifiga o'tishdan oldin, keling, yordamchi dasturning o'zi va uning bizga kerak bo'lgan asosiy variantlarini ko'rib chiqaylik. Yordamchi dasturning sintaksisi juda oddiy:

$ curl variantlari havolasi

Endi asosiy variantlarni ko'rib chiqamiz:

  • -# - yuklash vaqtida oddiy harakatlanish satrini ko'rsatish;
  • -0 - http 1.0 protokolidan foydalanish;
  • -1 - tlsv1 shifrlash protokolidan foydalanish;
  • -2 - sslv2 dan foydalaning;
  • -3 - sslv3 dan foydalaning;
  • -4 - ipv4 dan foydalanish;
  • -6 - ipv6 dan foydalaning;
  • -A- USER_AGENTni belgilang;
  • -b- Cookie-ni faylga saqlash;
  • -c- fayldan serverga cookie faylini yuborish;
  • -C- faylni uzilish nuqtasidan yoki belgilangan ofsetdan yuklab olishni davom ettirish;
  • -m- serverdan javobni kutishning maksimal vaqti;
  • -d- POST usuli yordamida ma'lumotlarni yuborish;
  • -D- server tomonidan qaytarilgan sarlavhalarni faylga saqlash;
  • -e- foydalanuvchi qaysi saytdan kelganligini ko'rsatuvchi Referer-uri maydonini o'rnating;
  • -E- tashqi SSL sertifikatidan foydalanish;
  • -f- xato xabarlarini ko'rsatmaslik;
  • -F- shakl ko'rinishida ma'lumotlarni yuborish;
  • -G- agar ushbu parametr yoqilgan bo'lsa, u holda -d variantida ko'rsatilgan barcha ma'lumotlar GET usuli yordamida uzatiladi;
  • -H- sarlavhalarni serverga o'tkazish;
  • -I- faqat HTTP sarlavhasini oling va butun sahifa tarkibiga e'tibor bermang;
  • -j- fayldan cookie-fayllarni o'qish va yuborish;
  • -J- so'rovdan sarlavhani olib tashlash;
  • -L- qayta yo'naltirishni qabul qilish va qayta ishlash;
  • -s- Joylashuvdan foydalangan holda qayta yo'naltirishlarning maksimal soni;
  • -o- sahifa mazmunini faylga chiqarish;
  • -O- kontentni serverdagi sahifa yoki fayl nomi bilan faylga saqlash;
  • -p- proksi-serverdan foydalanish;
  • --proto- foydalaniladigan protokolni ko'rsatish;
  • -R- masofaviy faylni oxirgi o'zgartirish vaqtini saqlash;
  • -s- xatolar haqida minimal ma'lumotni ko'rsatish;
  • -S- xato xabarlarini ko'rsatish;
  • -T- faylni serverga yuklash;
  • -v- eng batafsil chiqish;
  • -y- minimal yuklab olish tezligi;
  • -Y- maksimal yuklab olish tezligi;
  • -z- faylni faqat belgilangan vaqtdan kechroq o'zgartirilgan bo'lsa yuklab oling;
  • -V- versiyani ko'rsatish.

Bu hech qanday tarzda curl linux uchun barcha variantlar emas, lekin unda siz foydalanishingiz kerak bo'lgan asoslar ro'yxati keltirilgan.

Curldan qanday foydalanish kerak?

Biz curl yordam dasturi bilan ishlash nazariyasi bilan bog'liq hamma narsani ko'rib chiqdik, endi amaliyotga o'tish va curl buyrug'ining misollarini ko'rib chiqish vaqti keldi.

Eng keng tarqalgan vazifa bu. Faylni yuklab olish juda oddiy. Buni amalga oshirish uchun faqat fayl nomini yoki html sahifasini parametrlardagi yordamchi dasturga o'tkazing:

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

Ammo bu erda sizni bitta ajablanib kutmoqda: faylning barcha mazmuni standart chiqishga yuboriladi. Uni istalgan faylga yozish uchun:

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

Agar natijada olingan fayl serverdagi fayl bilan bir xil nomlanishini istasangiz, -O variantidan foydalaning:

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

Agar kerak bo'lsa, bitta buyruq bilan bir nechta fayllarni yuklab olishingiz mumkin:

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

Administrator uchun foydali bo'lishi mumkin bo'lgan yana bir narsa, agar fayl o'zgartirilgan bo'lsa, uni yuklab olishdir:

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

Tezlik chegarasi

-Y opsiyasi yordamida tarmoqni ortiqcha yuklamaslik uchun yuklab olish tezligini kerakli chegaraga cheklashingiz mumkin:

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

Bu erda siz yuklab olish mumkin bo'lgan soniyada kilobayt sonini ko'rsatishingiz kerak. Agar tezlik etarli bo'lmasa, ulanishni to'xtatishingiz mumkin, buning uchun -Y opsiyasidan foydalaning:

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

Fayllarni uzatish

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

Yoki fayl HTTP orqali yuborilganligini tekshirib ko'raylik, buning uchun maxsus xizmat mavjud:

curl -T ~/login.txt http://posttestserver.com/post.php

Javobda yordamchi dastur yuklab olingan faylni qaerdan topishingiz mumkinligini aytadi.

POST ma'lumotlari yuborilmoqda

POST usuli yordamida nafaqat fayllarni, balki har qanday ma'lumotlarni ham yuborishingiz mumkin. Eslatib o'taman, bu usul turli shakllardagi ma'lumotlarni jo'natish uchun ishlatiladi. Bunday so'rovni yuborish uchun -d opsiyasidan foydalaning. Sinov uchun biz bir xil xizmatdan foydalanamiz:

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

Agar siz ushbu yuborish opsiyasidan mamnun bo'lmasangiz, shaklni yuborgandek ko'rsatishingiz mumkin. Buning uchun variant bor -F:

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

Bu erda biz forma bilan parol maydonini oddiy matn sifatida o'tkazamiz, xuddi shu tarzda siz bir nechta parametrlarni o'tkazishingiz mumkin.

Cookie-fayllarni yuborish va qabul qilish

Cookie-fayllar veb-saytlar tomonidan foydalanuvchi tomonida ma'lum ma'lumotlarni saqlash uchun ishlatiladi. Bu, masalan, autentifikatsiya qilish uchun kerak bo'lishi mumkin. Curl yordamida kukilarni yuborishingiz va qabul qilishingiz mumkin. Qabul qilingan cookie-fayllarni faylga saqlash uchun -c opsiyasidan foydalaning:

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

Keyin curl cookie faylini qaytarib yuborishingiz mumkin:

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

Sarlavhani uzatish va tahlil qilish

Bizga har doim ham sahifa mazmuni kerak emas. Ba'zan faqat sarlavhalar qiziqarli bo'lishi mumkin. Faqat ularni ko'rsatish uchun -I varianti mavjud:

curl -I https://sayt

Va -H opsiyasi serverga bir nechta yoki undan ko'p yuborish imkonini beradi, masalan, If-Modified-Since sarlavhasini o'tkazishingiz mumkin, shunda sahifa o'zgartirilgan bo'lsagina qaytariladi:

curl autentifikatsiyasi

Agar server HTTP Basic yoki FTP kabi keng tarqalgan autentifikatsiya turlaridan birini talab qilsa, curl bu vazifani juda oson bajara oladi. Autentifikatsiya tafsilotlarini belgilash uchun ularni -u opsiyasida ikki nuqta bilan ajratib ko'rsatish kifoya:

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

HTTP serverlarida autentifikatsiya xuddi shu tarzda amalga oshiriladi.

Proksi-serverdan foydalanish

Agar siz fayllarni yuklab olish uchun proksi-serverdan foydalanishingiz kerak bo'lsa, bu ham juda oddiy. -x variantida proksi-server manzilini ko'rsatish kifoya:

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

xulosalar

Ushbu maqolada biz curldan qanday foydalanishni, nima uchun bu yordamchi dastur kerakligini va uning asosiy imkoniyatlarini ko'rib chiqdik. Ularning o'xshashligiga qaramay, ular juda farq qiladi. Curl linux buyrug'i ko'proq serverdagi turli harakatlarni tahlil qilish va simulyatsiya qilish uchun mo'ljallangan, wget esa fayllarni yuklab olish va saytlarni skanerlash uchun ko'proq mos keladi.

Ushbu maqolada cURL kabi kuchli vosita, shuningdek, ushbu vositaga kirishni ta'minlaydigan PHP kutubxonasi - libcurl haqida so'z boradi. Bularning barchasi nima uchun? Ma'lumot uzatish protokollaridan foydalangan holda server bilan bog'lanish uchun, masalan, http yoki ftp. Qolgan protokollar biz uchun unchalik qiziq emas, agar kimdir ushbu mavzuni chuqurroq o'rganmoqchi bo'lsa, ular ingliz tilidagi manbalarni qazib olishlari kerak bo'ladi va ushbu maqolada foydalanish asoslari va misollari mavjud.

CURL va libcurl aniq nima? Umumiy fikrlar

Shunday qilib, libcurl kutubxonasi bizga ma'lumotlarni serverga uzatish va undan javob olish imkoniyatini beradi. Bu bizga nima beradi? Foydalanuvchi xatti-harakatlariga taqlid qilish qobiliyati yoki ! Siz keyingi tahlil qilish uchun sahifalar mazmunini olishingiz mumkin, siz xizmatga javob sarlavhalarini olishingiz va saytlarga dasturiy ravishda kirishingiz, xabarlarni (masalan, Twitter yoki forumlarda) yoki ma'lumotni joylashtirish uchun skriptlarni yaratishingiz mumkin. Hamma narsa faqat sizning tasavvuringiz bilan cheklangan!

Denverda (Denver) cURL o'rnatish. libcurl dan qanday foydalanishni boshlash kerak?

Biz qilishimiz kerak bo'lgan birinchi narsa kutubxonani o'rnatishdir. Mahalliy kompyuterimda men Denwer tuzilmasidan foydalanaman, masalan, maqola uchun mo'ljallangan yangi veb-masterlarning aksariyati. php+apache+mysql kombinatsiyasini mustaqil ravishda o'rnatgan tajribali foydalanuvchilar cURL ni o'rnatishlari mumkin, buning qanday amalga oshirilishini ularga tushuntirish men uchun emas;) Va biz, yangi boshlanuvchilar, buni osonlashtirish uchun tayyor echimlardan foydalanamiz. Shuning uchun, libcurl-ni quyidagi tarzda o'rnating:

  • "PHP5: qo'shimcha modullar" tayyor kengaytma paketini yuklab oling.
  • Shunga ko'ra, biz uni o'rnatamiz. Hech qanday murakkab narsa yo'q, roziman :)
  • Faylni Notepad da oching (men har doim Notepad++ ni tavsiya qilaman): X:/webservers/usr/local/php5/php.ini //bu yerda X - veb-server o'rnatilgan diskingiz.

    va shartlar boshida nuqtali vergulni olib tashlang:

    ;extension=php_curl.dll

  • Biz Denver serverini qayta ishga tushirmoqdamiz.

Tayyor. Kutubxonaning funksionalligini tekshirish uchun siz phpinfo() funksiyasiga qo'ng'iroq qilishingiz va u erda qatorni topishingiz mumkin: cURL qo'llab-quvvatlashi yoqilgan. Birinchi g'alaba bilan tabriklayman.

CURL tavsifi va birinchi qadamlar

Asbob bilan ishlashni boshlash uchun uni ishga tushirish kerak. Bu quyidagicha amalga oshiriladi:

$ch = curl_init();

Biz cURL seansini ishga tushirish funksiyasidan foydalandik. Bunday holda, URL manzilini darhol o'rnatishingiz mumkin, masalan:

$ch = curl_init("https://sayt");

Va buni keyinroq, variantlarda qilishingiz mumkin. Variantlarni o'rnatish tartibi muhim emas. Bu boshqa funktsiya tomonidan amalga oshiriladi:

Curl_setopt (resurs ch, string varianti, aralash qiymat)

Biz allaqachon yuqorida ushbu funktsiyaning birinchi parametrini, ya'ni ch resursini yaratdik, lekin juda ko'p variant va qiymat parametrlari mavjud. O'ylaymanki, siz ularning barchasini bu erda nusxa ko'chirmasligingiz kerak, faqat funktsiyaning batafsil tavsifiga havola bering, umid qilamanki, hech kim xafa bo'lmaydi: curl_setopt.

Misol sifatida URL manzilidan foydalanib parametrlarni sozlash misolini keltiraman:

$url = "https://sayt"; curl_setopt($ch, CURLOPT_URL,$url);

Variantlarni sozlashning yana bir nechta misollari: keling, sahifaning o'zini olmagan holda serverning javob sarlavhasini olaylik:

Curl_setopt($ch, CURLOPT_HEADER, 1); // sarlavhani o'qing curl_setopt($ch, CURLOPT_NOBODY, 1); // FAQAT sarlavhani korpussiz o'qing

Shunday qilib, biz sessiyani ishga tushirdik, kerakli parametrlarni o'rnatdik, endi biz olingan so'rovni bajaramiz, sessiyani yopamiz va natijani ko'rsatamiz:

$natija = curl_exec($ch); curl_close($ch); echo $natija;

Natijada, biz libcurl kutubxonasidan foydalanishning birinchi to'liq ishlaydigan misolini olamiz:

$ch = curl_init(); $url = "https://sayt"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // sarlavhani o'qing curl_setopt($ch, CURLOPT_NOBODY, 1); // FAQAT sarlavhani korpussiz o'qing $result = curl_exec($ch); curl_close($ch); echo $natija;

Bu qanday ishlaydi, umid qilamanki, tushunarli, chunki biz har bir qadamni alohida ko'rib chiqdik :) Natijada, biz serverdan HTTP javob sarlavhasini olamiz, biz o'rtasidagi o'zaro ta'sirning barcha bosqichlarini yaxshiroq tushunish uchun quyida albatta tahlil qilamiz. brauzer va server:

HTTP/1.1 200 OK Server: nginx/1.2..php 1

Ajoyib! Biz serverdan javob sarlavhasini oldik va kutubxonani amalda sinab ko'rdik. Bu biz uchun qanchalik foydali? Chunki endi siz cURL bilan ishlashda harakatlar ketma-ketligini taxminan tasavvur qilishingiz mumkin:

  • Seansni ishga tushirish (curl_init)
  • Bizga kerak bo'lgan variantlarni o'rnating (curl_setopt)
  • Qabul qilingan so'rovni bajaring (curl_exec)
  • Seansni tugatish (curl_close)

HTTP so'rovi sarlavhasi tuzilishi

Misol uchun, men ya.ru sahifasiga o'girilib, yaratilgan brauzer so'roviga va serverdan olingan javobga qaradim. Mana ular:
So'rov
GET / HTTP/1.1 - Biz sahifani /, ya'ni papkaning ildizida joylashgan asosiy sahifani olishga harakat qilmoqdamiz. Biz protokolning 1.1 versiyasidan foydalanamiz.
Foydalanuvchi agenti: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Versiya/12.14— Biz o'zimizni server bilan tanishtiramiz, biz Opera brauzerimiz.
Xost: ya.ru — Soʻralgan resursning domen nomi.
Qabul qiling: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1— Qabul qilinadigan manba formatlari ro'yxati.
Qabul qilish tili: ru-RU,ru;q=0,9,en;q=0,8— Qoʻllab-quvvatlanadigan tillar roʻyxati.
Qabul qilish-kodlash: gzip, deflate— Qo'llab-quvvatlanadigan kodlash usullari.
Cookie: yandexuid=XXXXX - Agar kerak bo'lsa, cookie-fayllar.
Connection: Keep-Alive - Iltimos, aloqani buzmang va aloqada qoling.
Javob
HTTP/1.1 200 Ok - Biz 200 kodi bilan javob olamiz, ya'ni hamma narsa yaxshi.
Server: nginx - Server o'zini tanishtirdi - bu nginx.
Sana: Yakshanba, 10-mart 2013 yil 14:10:50 GMT— Serverdagi joriy sana va vaqt.
Kontent turi: matn/html; charset=UTF-8— Kontent turi va kodlash.
Ulanish: yopish - Server biz bilan doimiy aloqani saqlab qolishni istamaydi, shuning uchun uni darhol yopadi. Keyingi so'rov uchun yangi ulanish o'rnatiladi.
Kesh-nazorat: kesh yo'q, do'kon yo'q, maksimal yosh = 0, qayta tekshirilishi kerak- Keshni boshqarish. Bunday holda, u o'chirilgan.
Muddati tugaydi: Yakshanba, 2013 yil 10-mart 14:10:50 GMT— Sessiyaning kutilayotgan tugash sanasi. Bizning holatda, bu ochilish vaqtiga to'g'ri keladi, chunki server uni qayta ishlashdan so'ng darhol yopadi.
Oxirgi tahrirlangan: Yakshanba, 10-mart 2013-yil 14:10:50 GMT- Oxirgi o'zgartirish vaqti.
Content-Encoding: gzip - Ma'lumotni kodlash usuli.
HTTP so'rovi sarlavhasida topilishi mumkin bo'lgan barcha parametrlarning to'liq ro'yxatini Vikipediyada topish mumkin.
Endi siz brauzeringiz va veb-serveringiz bir-biri bilan qanday bog'lanishi haqida taxminiy tasavvurga egasiz. Buni bilish va tushunish juda foydali, chunki biz libcurl kutubxonasi yordamida brauzer harakatlarini taqlid qilishga harakat qilamiz. Davom etishga ruxsat.

Kutubxona bilan ishlashga misol

Ishonamanki, ba'zi umumiy fikrlar allaqachon aniq bo'lgandan so'ng va hamma narsa aniq bo'lib tuyulgandan so'ng, amaliyotga o'tish va misol yordamida o'z mahoratingizni oshirish vaqti keldi. Shaxsan mening qo'llarim har doim hamma narsani amalda sinab ko'rish uchun qichishadi :)

cURL parserlar uchun juda yaxshi bo'lgani uchun sahifa kodini uning manzili bo'yicha olish funksiyasini ko'rib chiqaylik. Bunday holda, agar biror narsa noto'g'ri bo'lsa, chiqish sarlavha, sahifa mazmuni va hatto xato kodlari bilan massiv bo'ladi.

Funktsiya get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Versiya/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURN1); // veb-sahifani qaytaradi curl_setopt($ch, CURLOPT_HEADER, 0); // sarlavhalarni qaytarmaydi curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // curl_setopt($ch, CURLOPT_ENCODING, ""); // jarayonlarni qayta yo'naltiradi barcha kodlashlar curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // ulanish vaqti tugaydi curl_setopt($ch, CURLOPT_TIMEOUT, 120); //javob vaqti tugashi curl_MALOPT , 10); // 10-yo'naltirishdan keyin to'xtating $content = curl_exec($ch); $err = curl_errno($ch); $errmsg = curl_error($ch); $header = curl_getinfo($ch); curl_close( $ ch); $header["errno"] = $err; $header["errmsg"] = $errmsg; $header["content"] = $content; return $header; )

Kirish parametrlari:
url - sahifa yoki sayt manzili.
Chiqish parametrlari qiymatlari (uch elementli massiv):
header['errno'] - agar biror narsa noto'g'ri bo'lsa, bu erda xato kodi bo'ladi.
header[‘errmsg’] – xato matni shu yerda paydo bo‘ladi.
header['content'] - haqiqiy sahifa\fayl\tasvir va boshqalar.

Biz funktsiyadan foydalanamiz, masalan:

$natija = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["content "]; echo $page; )

Har bir narsa xatosiz o'tishi kerak va siz $page o'zgaruvchisida sahifa kodini olasiz. Agar biz mavjud bo'lmagan yaaaaaaaaaaaa.ru sahifasini olishga harakat qilsak, biz xatoga duch kelamiz:

Xostni hal qilib bo'lmadi: yaaaaaaaaaaaa.ru; Xost topilmadi

Hammasi to'g'ri va chiroyli tarzda ishlangan :)
Keyin sahifa kodi bilan xohlagan narsani qilishingiz mumkin, masalan, uni oddiy iboralar bilan tahlil qiling. Ammo bularning barchasi keyingi darslarda, ammo hozircha bu bilan to'xtalib o'tamiz.

JavaScript brauzeringizda bloklangan. Sayt ishlashi uchun JavaScript-ni yoqing!

Jingalak

PHP Daniel Stenberg tomonidan yaratilgan libcurl kutubxonasini qo'llab-quvvatlaydi, bu turli turdagi serverlarga ulanish va turli protokollardan foydalanish imkonini beradi.
libcurl hozirda http, https, ftp, gopher, telnet, dict, file va ldap protokollarini qo'llab-quvvatlaydi.
libcurl shuningdek, HTTPS sertifikatlari, HTTP POST, HTTP PUT, FTP yuklash (bu ftp PHP kengaytmasi bilan ham amalga oshirilishi mumkin), HTTP shaklga asoslangan yuklash, proksi-serverlar, cookie fayllari va foydalanuvchi+parol autentifikatsiyasini qoʻllab-quvvatlaydi.

Bu funksiyalar PHP 4.0.2 da kiritilgan.

curl_init

curl_init - CURL seansini ishga tushiradi.

Tavsif

manba curl_init()

Funktsiya curl_init() yangi seansni ishga tushiradi va , va funksiyalarida foydalanish uchun CURL dastagini qaytaradi. Agar ixtiyoriy parametr bo'lsa url taqdim etilsa, CURLOPT_URL opsiyasi ushbu parametr qiymatini oladi. yordamida uni qo'lda o'rnatishingiz mumkin.

curl_setopt

curl_setopt - CURL uzatish/o'tkazish uchun variantlarni o'rnatadi.

Tavsif

bool curl_setopt(resurs ch, string varianti, aralash qiymat)

Funktsiya curl_setopt() parametr bilan aniqlangan CURL seansi uchun variantlarni o'rnatadi ch. Parametr variant siz o'rnatmoqchi bo'lgan variant va qiymat bu variant qiymati variant .

Parametr qiymat quyidagi variantlar uchun uzun bo'lishi kerak (parametr bilan ko'rsatilgan variant):

  • CURLOPT_INFILESIZE: Agar siz faylni uzoq saytga yuklayotgan bo'lsangiz, ushbu parametr PHP ga kutilgan fayl hajmi qanday bo'lishini aytish uchun ishlatilishi kerak.
  • CURLOPT_VERBOSE: CURL barcha harakatlar haqida xabar berishini istasangiz, ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating.
  • CURLOPT_HEADER: Sarlavhani chiqishga kiritishni istasangiz, ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating.
  • CURLOPT_NOPROGRESS: Agar PHP CURL uzatish jarayoni koʻrsatkichini koʻrsatishini xohlamasangiz, ushbu parametrni nolga teng boʻlmagan qiymatga oʻrnating. (PHP avtomatik ravishda ushbu parametrni nolga teng bo'lmagan qiymatga o'rnatadi; faqat disk raskadrovka paytida uni o'zgartirishingiz kerak.)
  • CURLOPT_NOBODY: Agar tanani chiqishga kiritishni xohlamasangiz, ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating.
  • CURLOPT_FAILONERROR: Agar qaytarilgan HTTP kodi 300 dan katta boʻlsa, PHP jimgina chiqishini istasangiz, ushbu parametrni nolga teng boʻlmagan qiymatga oʻrnating. Odatiy boʻlib, sahifa odatda kod eʼtiborga olinmagan holda qaytariladi.
  • CURLOPT_UPLOAD: Agar siz PHP faylni yuklashga tayyorlashini xohlasangiz, ushbu parametrni nolga teng boʻlmagan qiymatga oʻrnating.
  • CURLOPT_POST: PHP muntazam HTTP POST bajarishini istasangiz, ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating. Ushbu POST oddiy dastur/x-www-form-urlencoded shaklida bo'lib, ko'pincha HTML shakllari tomonidan qo'llaniladi.
  • CURLOPT_FTPLISTONLY: Ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating va PHP FTP katalog nomlarini ro'yxatga oladi.
  • CURLOPT_FTPAPPEND: Ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating va PHP uni qayta yozish o'rniga masofaviy faylga qo'shiladi.
  • CURLOPT_NETRC: Ushbu parametrni nolga teng boʻlmagan qiymatga oʻrnating va PHP siz ulanayotgan masofaviy sayt uchun foydalanuvchi nomingiz va parolingizni topish uchun ~./netrc faylingizni skanerlaydi.
  • CURLOPT_FOLLOWLOCATION: Server HTTP sarlavhasining bir qismi sifatida yuboradigan har qanday "Joylashuv:" sarlavhasini kuzatish uchun ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating (esda tuting, bu rekursiyadir, PHP yuborilgan barcha "Joylashuv: " -sarlavhalar" ga amal qiladi. )
  • CURLOPT_PUT: Faylni HTTP PUT uchun ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating. PUT fayli CURLOPT_INFILE va CURLOPT_INFILESIZE yordamida o‘rnatilishi kerak.
  • CURLOPT_MUTE: Ushbu parametrni nolga teng bo'lmagan qiymatga o'rnating va PHP CURL funksiyalariga nisbatan yashirin ishlaydi.
  • CURLOPT_TIMEOUT: CURL funksiyalarini ishga tushirishga ruxsat beradigan soniyalarda maksimal vaqtni o'z ichiga olgan parametr sifatida longni o'tkazing.
  • CURLOPT_CONNECTTIMEOUT: Ulanishga urinayotganda kutishga ruxsat beradigan maksimal vaqtni soniyalarda o'z ichiga olgan parametr sifatida uzoqni o'tkazing. Abadiy kutish uchun 0 dan foydalaning.
  • CURLOPT_LOW_SPEED_LIMIT: PHP uni juda sekin deb hisoblab, uni toʻxtatib qoʻyishi uchun uzatish tezligini oʻz ichiga oluvchi parametr sifatida oʻtkazing, soniyada baytlarda, undan pastroqda uzatish CURLOPT_LOW_SPEED_TIME bajarish vaqtida bajarilishi kerak.
  • CURLOPT_LOW_SPEED_TIME: PHP uchun CURLOPT_LOW_SPEED_LIMIT ishga tushirilganda uzatish juda sekin deb hisoblanishi va uni bekor qilish uchun undan pastroq soniyalarda oʻtkazilish bajarilishi kerak boʻlgan vaqtni oʻz ichiga oluvchi parametr sifatida oʻtkazing.
  • CURLOPT_RESUME_FROM: O'tkazish boshlanishi kerak bo'lgan bayt ofsetini o'z ichiga olgan parametr sifatida o'tish.
  • CURLOPT_SSLVERSION: Foydalanish uchun SSL versiyasini o'z ichiga olgan parametr sifatida o'tkazing (2 yoki 3). Odatiy bo'lib, PHP buni o'zi aniqlashga harakat qiladi, garchi ba'zi hollarda buni qo'lda o'rnatish talab qilinadi.
  • CURLOPT_SSL_VERIFYHOST: Agar CURL SSL qo'l siqishida tengdosh sertifikatining umumiy nomini tekshirishi kerak bo'lsa, uzoq vaqt o'ting. 1 qiymati umumiy/umumiy nom mavjudligini tekshirishimiz kerakligini bildiradi, 2 qiymati esa uning taqdim etilgan xost nomiga mos kelishiga ishonch hosil qilishimiz kerakligini bildiradi.
  • CURLOPT_TIMECONDITION: CURLOPT_TIMEVALUE qanday ko‘rib chiqilishini belgilaydigan parametr sifatida uzoqni o‘tkazing. Siz bu parametrni TIMECOND_IFMODSINCE yoki TIMECOND_ISUNMODSINCE qilib belgilashingiz mumkin. Bu faqat HTTP uchun ishlaydi.
  • CURLOPT_TIMEVALUE: 1970-yil 1-yanvardan boshlab soniyalarda koʻrsatilgan vaqtni parametr sifatida oʻtkazing. Bu vaqt CURLOPT_TIMEVALUE parametrida koʻrsatilgandek ishlatiladi yoki standart TIMECOND_IFMODSINCE ishlatiladi.
  • CURLOPT_RETURNTRANSFER: Agar siz CURL qabul qilingan ma'lumotni to'g'ridan-to'g'ri chop etish o'rniga to'g'ridan-to'g'ri qaytarishini istasangiz, nolga teng bo'lmagan qiymatni o'tkazing.

Parametr qiymat quyidagi parametr qiymatlari uchun satr bo'lishi kerak variant :

Quyidagi variantlar funksiya yordamida olinadigan fayl deskriptorini kutadi fopen() :

  • CURLOPT_FILE: O'tkazmangizning chiqishi joylashtirilishi kerak bo'lgan fayl, sukut bo'yicha u STDOUT.
  • CURLOPT_INFILE: O'tkazma kiritishingiz kelgan fayl.
  • CURLOPT_WRITEHEADER: Chiqishning sarlavha qismini yozish uchun fayl.
  • CURLOPT_STDERR: stderr o'rniga xatolarni yozish uchun fayl.

Parametr qiymat long write_callback (resurs ch, string ma'lumotlari)( ... return strlen($data);) variant :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

Parametr qiymat quyidagi shaklning funktsiyasi bo'lishi kerak string read_callback (resurs ch, resurs fd, uzun uzunlik)() quyidagi parametr qiymatlari uchun variant :

  • CURLOPT_READFUNCTION: .

curl_exec

curl_exec - CURL seansini bajaradi.

Tavsif

bool curl_exec(resurs ch)

Bu funksiya CURL seansini ishga tushirgandan so'ng va ushbu seans uchun barcha variantlar allaqachon o'rnatilgandan so'ng chaqirilishi kerak. Uning maqsadi shunchaki oldindan belgilangan CURL seansini bajarishdir (parametrda ko'rsatilgan ch).

curl_close

curl_close - CURL sessiyasini yopadi.

Tavsif

bekor curl_close(resurs ch)

Bu funksiya CURL seansini yopadi va barcha resurslarni chiqaradi. CURL tutqichi ch ham o'chiriladi.

curl_errno

curl_errno - oxirgi xato raqamini o'z ichiga olgan butun sonni qaytaradi.

Tavsif

1-misol: Yangi CURL seansini ishga tushirish va veb-sahifani olish.
2-misol: example.com ni olish uchun PHP ning CURL modulidan foydalanish
3-misol: PHP ning CURL yordamida URL manziliga kirish imkoniyatini tekshirish
4-misol: PHP ning CURL yordamida olingan sarlavhani korpusdan ajratish
5-misol: PHP ning CURL yordamida yo'naltiruvchi URL manzilini aniqlash
muammo: curl_setopt($ch,FOLLOW_LOCATION,1); xato: open_basedir va safe_mode bilan bog'liq muammo yechim: kimdir tomonidan allaqachon ishlab chiqilgan funksiya n 2 yechim: bir xil funktsiya, o'zgartirilgan, men uchun juda yaxshi ishlaydi.= $curl_max_loops) ( $curl_loops = 0; qaytish FALSE; ) curl_setopt($ch, CURLOPT_HEADER, rost); curl_setopt($ch, CURLOPT_RETURNTRANSFER, rost); $ma'lumotlar = curl_exec($ch); list($header, $data) = portlash ("\n\n", $ma'lumotlar, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); agar ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(qirqish) (array_pop($matches))); if (!$url) ( //$curl_loops = 0 ga yo‘naltirish uchun urlni qayta ishlab bo‘lmadi; $data qaytaring; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; agar (!$url["sxema"]) $url["sxema"] = $last_url["sxema"]; agar (!$url["host"]) $url["host"] = $last_url[ "host"]; agar (!$url["yo'l"]) $url["yo'l"] = $last_url["yo'l"]; $new_url = $url["sxema"]. "://" . $ url["host"] . $url["path"] .($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("qayta yo'naltirilmoqda", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
bu funksiyadan faqat FOLLOW_LOCATIONsiz foydalaning va ishlashi kerak. Muammo shundaki, agar siz http_code 301 oe 302 dan farqli bo'lsa, ma'lumotlarni qaytaradigan qatorga kirganingizda, $data ma'lumotlari eskirgan yoki yo'q. shuning uchun $debbbb ishni bajaradi.
6-misol: CURL PHP yordamida sarlavhadan cookie-faylni tahlil qilish
Ba'zan siz CURLOPT_COOKIEJAR va CURLOPT_COOKIEFILE dan serverning php-sozlamalari tufayli foydalana olmaysiz (Ular bu opsiyalardan foydalanib serverdan istalgan faylni olishingiz mumkinligini aytishadi). Mana bu yechim 1)CURLOPT_FOLLOWLOCATION dan foydalanmang 2) curl_setopt($ch, CURLOPT_HEADER, 1) 3) Sarlavhadagi cookie-fayllarni quyidagicha oling: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $natijalar); 4) curl_setopt ($ch, CURLOPT_COOKIE, $cookie) yordamida ularni o'rnating;
7-misol: CURL PHP yordamida sarlavhadan cookie-faylni tahlil qilish
Yevgen yuqorida aytib o'tganidek, ba'zida biz CURLOPT_COOKIEJAR va CURLOPT_COOKIEFILE dan foydalana olmaymiz. Quyida men yanvar oyida yozgan sarlavhali qayta qo'ng'iroq funksiyasi mavjud bo'lib, u sizga cURL so'rovlari o'rtasida cookie-fayllarni saqlash imkonini beradi. Cookie-fayllar barcha so'rovlar davomida, hatto qayta yo'naltirish paytida ham $ch ga qo'shiladi, shuning uchun uni CURLOPT_FOLLOWLOCATION bilan birga ishlating. Mana kod: funktsiya read_header($ch, $string) ( global $location; #keep track of location/redirects global $cookiearr; #cookie fayllarni global $ch; # ^funksiya parametrini bekor qiladi $ch # bu yaxshi, chunki biz global $ch ni # yangi cookie-fayllar bilan yangilashimiz kerak $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep oxirgi qayta yo'naltirish $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #cookie faylini oling $cookiestr = trim(substr() $string, 11, -1)); $cookie = portlash(";", $cookiestr); $cookie = portlash("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #foreach sarlavhasi oxirida faqat bajariladi ($cookiearr as $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) qaytarish $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Ushbu kod har safar ishga tushirmasdan $ch dan qayta foydalanasiz deb taxmin qiladi (boshida curl_init ga faqat bir marta qo'ng'iroq qiling). Agar siz kodingizning istalgan nuqtasida $ch-ni qayta ishga tushirishingiz kerak bo'lsa, siz $cookiearr-da saqlangan cookie-fayllarga kirishingiz va ularni yangi $ch-ga qo'shishingiz mumkin. Men bu funktsiyani oddiy iboralar bilan yetarlicha tajribaga ega bo'lmasdan oldin yozgan edim, shuning uchun siz bu erda preg_match qo'ng'iroqlarini topa olmaysiz. Men bu koddan ancha vaqtdan beri foydalandim va gmail, yahoo, hotmail, aol va boshqalarga hech qanday muammosiz kirishim kerak edi. Men izlayotgan narsaga kirishdan oldin login va bir nechta sahifalarni ko'rib chiqing.
8-misol: CURL PHP yordamida sarlavhalarni yuklash moslamasini sozlash
CURL-dan foydalanib, olingan ma'lumotlarni yana biriktirma sifatida uzatish uchun ikkilik ma'lumotlarni biriktiruvchi sifatida qaytaradigan uchinchi tomon skriptiga qo'ng'iroq qilishim kerak edi. Muammo shundaki, uchinchi tomon skripti vaqti-vaqti bilan HTTP xatolarini qaytardi va men bunday hollarda nol uzunlikdagi qo'shimchani o'tkazmaslikni xohlardim. CURLOPT_FAILONERROR va CURLOPT_HEADERFUNCTION qayta qo'ng'iroq qilish kombinatsiyasi uchinchi tomon skripti HTTP xatolarini aniq qayta ishlashga yordam berdi: funktsiya curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader($strHeader)str) (header) ); header("Content-Disposition: attachment; filename="file-name.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://site/"); 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); agar ($intReturnCode != 200) ( "Kod bilan xato: " . $intReturnCode; ni chop eting)
Misol 9. CURL PHP yordamida sahifani faylga saqlash va uzatish tezligini hisoblash
WritePageToFile("http://es.php.net", "es.php.net.txt"); funksiya WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_ 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); echo "
"; echo "Yuklab olishning o'rtacha tezligi == " . $sAverageSpeedDownload. " 
"; echo "Yuklashning oʻrtacha tezligi == " . $sAverageSpeedUpload ."
"; aks-sado "
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
"; curl_close($sh); FClose ($hFile); echo "( “.$sTxtfile.”” faylini hostingning bir xil yoʻlida koʻring.” “Bu skript PHP qayerga).
"; }
Misol 9. SSL ulanishi orqali sahifani olish (https)
$ch=curl_init("https://sayt"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // "SSL sertifikati muammosi, CA sertifikati yaxshi ekanligini tekshiring" xatosini o'chirib qo'ying curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Xatoni o'chirib qo'ying "SSL: sertifikat mavzusi nomi "hostname.ru" maqsadli xost nomi "123.123" bilan mos kelmaydi" 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-misol: Curl-da seanslar va cookie-fayllardan foydalanish
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://sayt"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//qabul qilingan COOKIE-larni faylga saqlash curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //serverga avtorizatsiya paytida undan olingan COOKIE-larni jo'natish $out=curl_exec($curl);
11-misol: Curl-da faylni yuklash va ko'p o'lchovli massiv. CURLOPT_POSTFIELDS + CurlFile

Agar siz POST so'rovida ko'p o'lchovli massiv va faylni yuborishingiz kerak bo'lsa, siz hal qilib bo'lmaydigan muammoga duch kelasiz. Agar siz ko'p o'lchovli massivni CURLOPT_POSTFIELDS ga uzatsangiz, ikkinchi daraja "Masiv" qatori sifatida uzatiladi. Agar siz http_build_query yordamida o'zgartirsangiz, faylni o'tkaza olmaysiz.

Quyida PHP 5.3, PHP 5.4 va PHP 5.6 ning ikkala eski versiyalarida ham ishlaydigan Curl uchun fayl yuklash bilan ikki oʻlchovli massivni kodlash funksiyasi mavjud.

/** murakkab indekslar yordamida ko'p o'lchovli massivni bir o'lchovli massivga aylantiradi va Curl da foydalanish uchun prefiksdagi @ ni CurlFile bilan almashtiradi * @param $inputArray * @param string $inputKey * @return array $requestVars = massiv ("id" => massiv( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); biz olamiz: ["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; ) // tekshiring $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile" " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "sayt"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Curl-dan foydalanishning amaliy misollari