PHP कर्ल - कार्य और उपयोग के उदाहरण। PHP कर्ल कमांड लाइन विकल्पों में cURL का उन्नत उपयोग

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

कर्ल_सेटॉप्ट - कर्ल सत्र के लिए एक पैरामीटर सेट करता है

मापदंडों की सूची

कर्ल हैंडल से प्राप्त किया गया कर्ल_इनिट().

पैरामीटर सेट किया जाना है CURLOPT_XXX.

विकल्प पैरामीटर का मान.

बूल:

पैरामीटर टिप्पणियाँ
CURLOPT_AUTOREFERER सत्यस्वचालित फ़ील्ड सेटिंग के लिए सन्दर्भकर्ता:हेडर द्वारा पुनर्निर्देशित अनुरोधों में जगह:.
CURLOPT_BINARYTRANSFER सत्यस्थिरांक का उपयोग करते समय कच्ची प्रतिक्रिया वापस करने के लिए CURLOPT_रिटर्नट्रांसफर. PHP 5.1.3 के अनुसार इस विकल्प की अब आवश्यकता नहीं है: विकल्प का उपयोग करते समय कच्चा आउटपुट हमेशा लौटाया जाता है CURLOPT_रिटर्नट्रांसफर.
CURLOPT_COOKIESESSION सत्यवर्तमान सत्र को कुकीज़ का एक नया "सत्र" शुरू करने का निर्देश देना। इससे libcurl किसी भी "सत्र" कुकीज़ को अनदेखा कर देगा, जिसे उसे पिछले सत्र से लोड करना चाहिए था। डिफ़ॉल्ट रूप से, libcurl हमेशा सभी कुकीज़ को सहेजता और लोड करता है, भले ही वे "सत्र" हों या नहीं। "सत्र" कुकीज़ ऐसी कुकीज़ हैं जो समाप्त नहीं होती हैं और केवल वर्तमान "सत्र" के लिए मौजूद होनी चाहिए।
CURLOPT_CERTINFO सत्यस्ट्रीम करने के लिए एसएसएल प्रमाणपत्र जानकारी आउटपुट करने के लिए STDERRसुरक्षित कनेक्शन के साथ. कर्ल 7.19.1 में जोड़ा गया। PHP 5.3.2 से प्रारंभ होकर उपलब्ध है। सही संचालन के लिए इस विकल्प को सक्षम करना आवश्यक है CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY सत्यलाइब्रेरी को आवश्यक प्रॉक्सी प्रमाणीकरण और कनेक्शन सेटअप करने के लिए कहता है, लेकिन डेटा संचारित नहीं करता है। यह विकल्प HTTP, SMTP और POP3 के लिए लागू किया गया है। 7.15.2 में जोड़ा गया। PHP 5.5.0 से उपलब्ध है.
CURLOPT_CRLF सत्ययूनिक्स लाइन एंडिंग को सीआरएलएफ में बदलने के लिए।
CURLOPT_DNS_USE_GLOBAL_CACHE सत्यवैश्विक DNS कैश का उपयोग करने के लिए। यह विकल्प थ्रेड सुरक्षित नहीं है और डिफ़ॉल्ट रूप से सक्षम है।
CURLOPT_FAILONERROR सत्यविफलता पर एक विस्तृत रिपोर्ट के लिए यदि प्राप्त HTTP कोड 400 से अधिक या उसके बराबर है। डिफ़ॉल्ट व्यवहार कोड को अनदेखा करते हुए, पृष्ठ को सामान्य रूप में लौटाता है।
CURLOPT_FILETIME सत्यकिसी दूरस्थ दस्तावेज़ की संशोधन तिथि प्राप्त करने का प्रयास करना। यह मान फ़ंक्शन से CURLINFO_FILETIME पैरामीटर का उपयोग करके प्राप्त किया जा सकता है कर्ल_गेटइन्फो().
CURLOPT_FOLLOWLOCATION सत्यकिसी भी शीर्षक का अनुसरण करने के लिए "जगह: "सर्वर द्वारा अपनी प्रतिक्रिया में भेजा गया (ध्यान दें कि यह पुनरावर्ती रूप से होता है, PHP भेजे गए किसी भी हेडर का अनुसरण करेगा "जगह: ", सिवाय इसके कि जब कोई स्थिरांक सेट किया गया हो CURLOPT_MAXREDIRS).
CURLOPT_FORBID_पुन: उपयोग सत्यकिसी कनेक्शन की प्रोसेसिंग पूरी होने के बाद उसे बंद करने के लिए बाध्य करना ताकि इसका पुन: उपयोग न किया जा सके।
CURLOPT_FRESH_CONNECT सत्यकैश्ड कनेक्शन के बजाय नए कनेक्शन के उपयोग को बाध्य करना।
CURLOPT_FTP_USE_EPRT सत्यसक्रिय एफ़टीपी अपलोड के लिए ईपीआरटी (और एलपीआरटी) का उपयोग करना। उपयोग असत्यईपीआरटी और एलपीआरटी को अक्षम करने और केवल पोर्ट का उपयोग करने के लिए।
CURLOPT_FTP_USE_EPSV सत्यएफ़टीपी स्थानांतरण के दौरान ईपीएसवी कमांड के प्रारंभिक परीक्षण के लिए। यदि आदेश विफल हो जाता है, तो यह वापस PASV पर आ जाएगा। में स्थापित करें असत्यईपीएसवी को अक्षम करने के लिए.
CURLOPT_FTP_CREATE_MISSING_DIRS सत्ययदि एफ़टीपी ऑपरेशन को एक गैर-मौजूद पथ का सामना करना पड़ता है तो लापता निर्देशिकाएँ बनाने के लिए।
CURLOPT_FTPAPPEND सत्यकिसी दूरस्थ फ़ाइल को किसी मौजूदा फ़ाइल पर अधिलेखित करने के बजाय उसे अंत तक लिखना।
CURLOPT_TCP_NODELAY स्थायी रूप से निर्दिष्ट करता है कि TCP_NODELAY विकल्प सेट किया जाना चाहिए या साफ़ किया जाना चाहिए (1 = सेट, 0 = साफ़)। डिफ़ॉल्ट रूप से विकल्प साफ़ हो जाता है. libcurl 7.11.2 या बाद के संस्करण के साथ निर्मित संस्करणों के लिए PHP 5.2.1 से उपलब्ध है।
CURLOPT_FTPASCII उपनाम CURLOPT_ट्रांसफरटेक्स्ट. इसके बजाय इसका प्रयोग करें.
CURLOPT_FTPLISTONLY सत्यएफ़टीपी निर्देशिका से केवल नामों की सूची लौटाने के लिए।
CURLOPT_HEADER सत्यआउटपुट में हेडर शामिल करने के लिए।
CURLINFO_HEADER_OUT सत्यहैंडल क्वेरी स्ट्रिंग को ट्रैक करने के लिए। PHP 5.1.3 से प्रारंभ होकर उपलब्ध है। उपसर्ग कर्लइन्फो_विशेष रूप से उपयोग किया जाता है।
CURLOPT_HTTPGET सत्य HTTP अनुरोध विधि को GET विधि पर रीसेट करने के लिए। चूंकि GET डिफ़ॉल्ट है, इस पैरामीटर की आवश्यकता केवल तभी होती है जब अनुरोध विधि पहले बदल दी गई हो।
CURLOPT_HTTPPROXYTUNNEL सत्यनिर्दिष्ट HTTP प्रॉक्सी के माध्यम से सुरंग बनाने के लिए।
CURLOPT_MUT सत्यकर्ल फ़ंक्शन संदेशों को पूरी तरह से अक्षम करने के लिए। कर्ल 7.15.5 में हटाया गया (CURLOPT_RETURNTRANSFER विकल्प का उपयोग किया जा सकता है)
CURLOPT_NETRC सत्यजिस दूरस्थ साइट से कनेक्शन स्थापित किया जा रहा है, उसके लिए लॉगिन और पासवर्ड के लिए ~/.netrc फ़ाइल को पढ़ने के लिए।
CURLOPT_NOBODY सत्यप्रतिक्रिया निकाय को आउटपुट से बाहर करने के लिए। अनुरोध विधि HEAD पर सेट है। इस सेटिंग को बदल रहा हूँ असत्यइसे वापस GET में नहीं बदलता।
CURLOPT_NOPROGRESS

सत्यकर्ल स्थानांतरण पर प्रगति संकेतक को अक्षम करने के लिए।

टिप्पणी:

PHP स्वचालित रूप से इस पैरामीटर को सेट करता है सत्य, इसे केवल डिबगिंग उद्देश्यों के लिए बदलें।

CURLOPT_NOSIGNAL सत्य PHP प्रक्रिया को सिग्नल भेजने वाले किसी भी कर्ल फ़ंक्शन को अनदेखा करना। टाइमआउट पैरामीटर को सही ढंग से काम करने की अनुमति देने के लिए यह विकल्प मल्टी-थ्रेडेड एसएपीआई में डिफ़ॉल्ट रूप से सक्षम है।
CURLOPT_POST सत्यनियमित HTTP POST का उपयोग करने के लिए. यह POST विधि सामान्य का उपयोग करती है , आमतौर पर HTML फॉर्म में उपयोग किया जाता है।
CURLOPT_PUT सत्य HTTP PUT पद्धति का उपयोग करके फ़ाइल डाउनलोड करना। उपयोग की गई फ़ाइल को विकल्पों का उपयोग करके सेट किया जाना चाहिए CURLOPT_INFILEऔर CURLOPT_INFILESIZE.
CURLOPT_रिटर्नट्रांसफर सत्यस्थानांतरण के परिणाम को एक स्ट्रिंग के रूप में वापस करने के लिए कर्ल_एक्सईसी()ब्राउज़र पर सीधे आउटपुट के बजाय।
CURLOPT_SAFE_UPLOAD सत्यउपसर्ग समर्थन अक्षम करने के लिए @ डाउनलोड की गई फ़ाइलों के लिए CURLOPT_POSTFIELDS, जिसका अर्थ है कि मान साथ चले गए @ फ़ील्ड के रूप में सुरक्षित रूप से प्रसारित किया जा सकता है। उपसर्ग के स्थान पर आप विकल्प का उपयोग कर सकते हैं कर्लफ़ाइलडी। डिफ़ॉल्ट मान के साथ PHP 5.5.0 में जोड़ा गया असत्य. PHP 5.6.0 में यह डिफ़ॉल्ट रूप से बराबर हो गया सत्य.
CURLOPT_SSL_VERIFYPEER असत्यहोस्ट प्रमाणपत्र की जाँच करने से cURL को रोकने के लिए। सत्यापित किए जाने वाले वैकल्पिक प्रमाणपत्र पैरामीटर का उपयोग करके निर्दिष्ट किए जा सकते हैं CURLOPT_CAINFOया पैरामीटर द्वारा निर्दिष्ट प्रमाणपत्रों वाली निर्देशिका CURLOPT_CAPATH. डिफ़ॉल्ट है सत्यकर्ल संस्करण 7.10 के बाद से। डिफ़ॉल्ट वितरण cURL संस्करण 7.10 से प्रारंभ करके स्थापित किया गया है।
CURLOPT_ट्रांसफरटेक्स्ट सत्यएफ़टीपी स्थानांतरण के लिए ASCII मोड का उपयोग करना। एलडीएपी का उपयोग करते समय, डेटा HTML के बजाय सादे पाठ में लौटाया जाता है। विंडोज़ सिस्टम पर थ्रेड STDOUTबाइनरी मोड पर सेट नहीं है.
CURLOPT_UNRETRICTED_AUTH सत्यरीडायरेक्ट के दौरान (उपयोग करते समय) लॉगिन और पासवर्ड भेजना जारी रखें CURLOPT_FOLLOWLOCATION), भले ही होस्टनाम बदल जाए।
CURLOPT_UPLOAD सत्यफ़ाइल को सर्वर पर अपलोड करने की तैयारी के लिए।
CURLOPT_VERBOSE सत्यअतिरिक्त जानकारी प्रदर्शित करने के लिए. किसी स्ट्रीम में आउटपुट लिखता है STDERR, या पैरामीटर द्वारा निर्दिष्ट फ़ाइल CURLOPT_STDERR.

निम्नलिखित विकल्प पैरामीटर मानों के लिए, मान पैरामीटर प्रकार का होना चाहिए पूर्णांक:

पैरामीटर मान मान सेट करें टिप्पणियाँ
CURLOPT_BUFFERSIZE प्रत्येक पढ़ने के लिए उपयोग किए जाने वाले बफ़र का आकार। हालाँकि, इसकी कोई गारंटी नहीं है कि यह अनुरोध पूरा हो जाएगा। कर्ल 7.10 में जोड़ा गया।
CURLOPT_CLOSEPOLICY स्थिरांकों में से एक कर्लक्लोज़पॉलिसी_*.

टिप्पणी:

यह विकल्प अप्रचलित है क्योंकि इसे cURL में कभी लागू नहीं किया गया था और यह काम नहीं करता था।

PHP 5.6.0 में हटा दिया गया।
CURLOPT_CONNECTTIMEOUT कनेक्ट करने का प्रयास करते समय प्रतीक्षा करने वाले सेकंड की संख्या. अनिश्चित काल तक प्रतीक्षा करने के लिए 0 का प्रयोग करें।
CURLOPT_CONNECTTIMEOUT_MS कनेक्ट करने का प्रयास करते समय प्रतीक्षा करने के लिए मिलीसेकंड की संख्या। अनिश्चित काल तक प्रतीक्षा करने के लिए 0 का प्रयोग करें। यदि libcurl को सिस्टम के मानक नाम रिज़ॉल्वर का उपयोग करके संकलित किया गया है, तो कनेक्शन अभी भी टाइमआउट के रूप में पूर्ण सेकंड प्रतीक्षा का उपयोग करेगा, जिसमें न्यूनतम 1 सेकंड की अनुमति होगी। कर्ल संस्करण 7.16.2 में जोड़ा गया। PHP 5.2.3 से प्रारंभ होकर उपलब्ध है।
CURLOPT_DNS_CACHE_TIMEOUT DNS रिकॉर्ड मेमोरी में संग्रहीत सेकंड की संख्या। डिफ़ॉल्ट रूप से, यह पैरामीटर 120 (2 मिनट) है।
CURLOPT_FTPSSLAUTH एफ़टीपी प्रमाणीकरण विधि (सक्रिय मोड में): CURLFTPAUTH_SSL(एसएसएल पहले जांचा जाता है), CURLFTPAUTH_TLS(टीएलएस पहले जांचा गया) या CURLFTPAUTH_DEFAULT(cURL स्वयं निर्णय लेता है)। कर्ल संस्करण 7.12.2 में जोड़ा गया।
CURLOPT_HTTP_संस्करण CURL_HTTP_VERSION_NONE (डिफ़ॉल्ट रूप से, CURL चुनता है कि किस संस्करण का उपयोग करना है), CURL_HTTP_VERSION_1_0 (HTTP/1.0 को बाध्य करें), या CURL_HTTP_VERSION_1_1 (HTTP/1.1 को बाध्य करें)।
CURLOPT_HTTPAUTH

आप बिटवाइज़ ऑपरेटर का उपयोग कर सकते हैं | (या) कई विधियों को एक साथ जोड़ना। इस मामले में, कर्ल समर्थित प्राधिकरण विधियों के लिए सर्वर का सर्वेक्षण करेगा और सर्वोत्तम का चयन करेगा।

CURLAUTH_ANY एक उपनाम है कर्लौथ_बेसिक | कर्लौथ_डाइजेस्ट | CURLAUTH_GSSबातचीत | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE एक उपनाम है कर्लौथ_डाइजेस्ट | CURLAUTH_GSSबातचीत | 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_पोर्ट वैकल्पिक कनेक्शन पोर्ट.
CURLOPT_POSTREDIR एक बिट मास्क जिसमें 1 (301 स्थायी रूप से स्थानांतरित), 2 (302 मिला) और 4 (303 अन्य देखें) शामिल है, यह निर्दिष्ट करने के लिए कि विकल्प सक्षम होने पर HTTP POST विधि संसाधित की जानी चाहिए या नहीं CURLOPT_FOLLOWLOCATIONयदि निर्दिष्ट प्रकार का पुनर्निर्देशन हुआ। कर्ल 7.19.1 में जोड़ा गया। PHP 5.3.2 से उपलब्ध है।
CURLOPT_प्रोटोकॉल

मूल्यों का बिट मुखौटा कर्लप्रोटो_*. यह मास्क libcurl द्वारा उपयोग किए जाने वाले प्रोटोकॉल को सीमित करता है। यह आपको libcurl को बड़ी संख्या में प्रोटोकॉल के साथ काम करने की अनुमति देता है, और कुछ स्थानांतरणों के संचालन को केवल उनके एक सबसेट तक सीमित करता है। डिफ़ॉल्ट रूप से, libcurl सभी समर्थित प्रोटोकॉल का उपयोग करता है। पैरामीटर भी देखें CURLOPT_REDIR_प्रोटोकॉल.

सही प्रोटोकॉल मान: CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_FTP, CURLPROTO_FTPS, CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_TELNET, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_DICT, CURLPROTO_FILE, CURLP ROTO_TF टीपी, CURLPROTO_ALL

CURLOPT_PROXYAUTH प्रॉक्सी सर्वर से कनेक्ट करते समय HTTP प्राधिकरण विधियों का उपयोग किया जाता है। उन्हीं बिट मास्क का उपयोग करें जो पैरामीटर के लिए वर्णित थे CURLOPT_HTTPAUTH. वर्तमान में, प्रॉक्सी प्राधिकरण के लिए केवल CURLAUTH_BASIC और CURLAUTH_NTLM समर्थित हैं। कर्ल संस्करण 7.10.7 में जोड़ा गया।
CURLOPT_प्रॉक्सीपोर्ट प्रॉक्सी सर्वर का पोर्ट नंबर जिससे कनेक्शन बनाया गया है। इस नंबर को पैरामीटर का उपयोग करके भी सेट किया जा सकता है CURLOPT_प्रॉक्सी.
CURLOPT_PROXYTYPE या तो CURLPROXY_HTTP (डिफ़ॉल्ट) या CURLPROXY_SOCKS5। कर्ल 7.10 में जोड़ा गया।
CURLOPT_REDIR_प्रोटोकॉल मूल्यों का बिट मुखौटा कर्लप्रोटो_*. यह बिटमास्क रीडायरेक्ट करते समय (पैरामीटर सक्षम होने पर) libcurl द्वारा उपयोग किए जाने वाले प्रोटोकॉल को सीमित करता है CURLOPT_FOLLOWLOCATION). यह आपको कुछ ट्रांसमिशन के लिए रीडायरेक्ट करते समय उपयोग किए जाने वाले प्रोटोकॉल के सेट को सीमित करने की अनुमति देता है। डिफ़ॉल्ट रूप से, libcurl FILE और SCP को छोड़कर सभी प्रोटोकॉल का समर्थन करता है। 7.19.4 से पहले के संस्करणों में, बिना किसी अपवाद के सभी प्रोटोकॉल के लिए पुनर्निर्देशन का उपयोग किया गया था। पैरामीटर विवरण भी देखें CURLOPT_प्रोटोकॉलप्रोटोकॉल मानों के साथ स्थिरांकों की सूची के लिए। कर्ल संस्करण 7.19.4 में जोड़ा गया।
CURLOPT_RESUME_FROM ट्रांसमिशन प्रारंभ ऑफसेट, बाइट्स में।
CURLOPT_SSL_VERIFYHOST एसएसएल प्रमाणपत्र में एक सामान्य नाम के अस्तित्व की जांच करने के लिए 1 का उपयोग करें। यह जांचने के लिए 2 का उपयोग करें कि सामान्य नाम मौजूद है और निर्दिष्ट होस्ट से मेल भी खाता है। युद्ध के माहौल में, इस पैरामीटर का मान 2 (डिफ़ॉल्ट रूप से सेट) होना चाहिए। कर्ल 7.28.1 में मान 1 के लिए समर्थन हटा दिया गया है
CURLOPT_SSLVसंस्करण स्थिरांकों में से एक 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 संशोधित नहीं", जिसका अर्थ है कि पैरामीटर CURLOPT_HEADERमें स्थापित सत्य. विपरीत प्रभाव के लिए CURL_TIMECOND_IFUNMODSINCE का उपयोग करें। डिफ़ॉल्ट CURL_TIMECOND_IFMODSINCE है.
CURLOPT_TIMEOUT कर्ल फ़ंक्शंस निष्पादित करने के लिए अनुमत सेकंड की अधिकतम संख्या।
CURLOPT_TIMEOUT_MS कर्ल फ़ंक्शंस निष्पादित करने के लिए मिलीसेकेंड की अधिकतम संख्या। यदि libcurl सामान्य सिस्टम नाम रिज़ॉल्वर का उपयोग करके बनाया गया है, तो यह कनेक्शन अवधि अभी भी दूसरे राउंडिंग टाइमआउट का उपयोग करेगी, जिसमें न्यूनतम टाइमआउट एक सेकंड की अनुमति होगी। कर्ल संस्करण 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 यदि पूरे स्थानांतरण के दौरान सर्वर पर अपलोड औसतन इस मान (बाइट्स प्रति सेकंड में निर्दिष्ट) से अधिक हो जाता है, तो इस पैरामीटर से कम या उसके बराबर औसत गति बनाए रखने के लिए अपलोड रोक दिया जाएगा। डिफ़ॉल्ट रूप से, गति सीमित नहीं है. कर्ल संस्करण 7.15.5 में जोड़ा गया। PHP 5.4.0 से शुरू होकर उपलब्ध है।
CURLOPT_SSH_AUTH_TYPES एक बिटमास्क जिसमें एक या अधिक स्थिरांक होते हैं: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_कीबोर्ड. स्थापित करना CURLSSH_AUTH_ANYताकि libcurl उनमें से किसी एक को स्वतंत्र रूप से चुन सके। कर्ल 7.16.1 में जोड़ा गया।
CURLOPT_IPRESOLVE किसी एप्लिकेशन को उस आईपी पते के प्रकार का चयन करने की अनुमति देता है जिसके साथ होस्टनाम निर्धारित किया जाता है। यदि आप ऐसे होस्टनाम का उपयोग कर रहे हैं जो आईपी पते के एक से अधिक संस्करणों से लिया गया है तो यह आवश्यक है। संभावित मान हो सकते हैं CURL_IPRESOLVE_जो भी हो, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, और डिफ़ॉल्ट रूप से CURL_IPRESOLVE_जो भी हो. कर्ल 7.10.8 में जोड़ा गया।

निम्नलिखित विकल्प पैरामीटर मानों के लिए, मान पैरामीटर प्रकार का होना चाहिए डोरी:

पैरामीटर मान मान सेट करें टिप्पणियाँ
CURLOPT_CAINFO एक या अधिक प्रमाणपत्र वाली फ़ाइल का नाम जिसके विरुद्ध नोड्स की जाँच की जाएगी। यह पैरामीटर केवल तभी समझ में आता है जब इसके साथ संयोजन में उपयोग किया जाता है CURLOPT_SSL_VERIFYPEER. एक निरपेक्ष पथ की आवश्यकता है.
CURLOPT_CAPATH एक निर्देशिका जिसमें कई सीए प्रमाणपत्र शामिल हैं। इस विकल्प का प्रयोग साथ में करें CURLOPT_SSL_VERIFYPEER.
CURLOPT_कुकी शीर्षलेख सामग्री "कुकी:", HTTP अनुरोध में उपयोग किया जाता है। कृपया ध्यान दें कि एकाधिक कुकीज़ को अर्धविराम और उसके बाद एक स्थान द्वारा अलग किया जाता है (उदाहरण के लिए, " फल=सेब; रंग=लाल")
CURLOPT_कुकीफ़ाइल कुकीज़ वाली फ़ाइल का नाम. यह फ़ाइल नेटस्केप प्रारूप में होनी चाहिए या फ़ाइल पर केवल HTTP हेडर लिखा होना चाहिए। यदि एक खाली स्ट्रिंग को फ़ाइल नाम के रूप में पारित किया जाता है, तो कुकीज़ सहेजी नहीं जाएंगी, लेकिन उनकी प्रोसेसिंग अभी भी सक्षम होगी।
CURLOPT_COOKIEJAR फ़ाइल का नाम जिसमें हैंडल बंद होने के बाद वर्तमान स्थानांतरण की सभी आंतरिक कुकीज़ सहेजी जाएंगी, उदाहरण के लिए कर्ल_क्लोज़ को कॉल करने के बाद।
CURLOPT_CUSTOMREQUEST

इसके बजाय कस्टम अनुरोध विधि का उपयोग किया गया "पाना"या "सिर" HTTP अनुरोध करते समय। यह प्रश्नों के लिए उपयोगी है "मिटाना"या अन्य, अधिक दुर्लभ HTTP अनुरोध। जैसे शब्दों का सही अर्थ होगा "पाना", "डाक", "जोड़ना"और इसी तरह; वे। यहां संपूर्ण HTTP अनुरोध पंक्ति दर्ज न करें. उदाहरण के लिए, एक संकेत "/index.html HTTP/1.0\r\n\r\n प्राप्त करें"ग़लत होगा.

टिप्पणी:

इस सुविधा का उपयोग तब तक न करें जब तक आप सुनिश्चित न हो जाएं कि सर्वर इस प्रकार के अनुरोध का समर्थन करता है।

CURLOPT_EGDSOCKET पसंद CURLOPT_RANDOM_FILE, सिवाय इसके कि फ़ाइल नाम एन्ट्रॉपी गैदरिंग डेमॉन सॉकेट पर सेट है।
CURLOPT_ENCODING शीर्षलेख सामग्री "स्वीकार-एन्कोडिंग:". यह अनुरोध को डिकोड करने की अनुमति देता है। समर्थित एनकोडिंग हैं "पहचान", "हवा निकालना"और "जीज़िप". यदि एक खाली स्ट्रिंग पारित की जाती है, "" , सभी समर्थित एन्कोडिंग प्रकारों वाला एक हेडर भेजा जाता है। कर्ल 7.10 में जोड़ा गया।
CURLOPT_FTPPORT वह मान जिसका उपयोग एफ़टीपी "पोर्ट" कमांड के लिए आईपी पता निर्धारित करने के लिए किया जाएगा। "पोर्ट" कमांड सर्वर को बताता है कि उसे किस आईपी पते से कनेक्ट होना चाहिए। यह एक आईपी पता, एक होस्टनाम, एक नेटवर्क इंटरफ़ेस नाम (यूनिक्स के तहत), या डिफ़ॉल्ट सिस्टम आईपी पते का उपयोग करने के लिए बस "-" हो सकता है।
CURLOPT_इंटरफेस उपयोग करने के लिए नेटवर्क इंटरफ़ेस का नाम. एक इंटरफ़ेस नाम, एक आईपी पता, या एक होस्ट नाम हो सकता है।
CURLOPT_KEYPASSWD निजी कुंजी का उपयोग करने के लिए पासवर्ड आवश्यक है CURLOPT_SSLKEYया CURLOPT_SSH_PRIVATE_KEYFILE. कर्ल 7.16.1 में जोड़ा गया।
CURLOPT_KRB4स्तर सुरक्षा स्तर KRB4 (Kerberos 4)। निम्नलिखित में से कोई भी मान (सबसे कमजोर से सबसे मजबूत के क्रम में) सही हैं: "स्पष्ट", "सुरक्षित", "गोपनीय", "निजी"।. यदि निर्दिष्ट स्ट्रिंग दिए गए मानों से भिन्न है, तो मान का उपयोग किया जाएगा "निजी". इस विकल्प को सेट कर रहा हूँ व्यर्थ KRB4 सुरक्षा को पूरी तरह से अक्षम कर देगा. फिलहाल, KRB4 सुरक्षा केवल FTP लेनदेन के साथ काम करती है।
CURLOPT_POSTFIELDS HTTP POST अनुरोध में प्रेषित सभी डेटा। किसी फ़ाइल को स्थानांतरित करने के लिए, फ़ाइल नाम से पहले निर्दिष्ट करें @ , और फ़ाइल के पूर्ण पथ का भी उपयोग करें। फ़ाइल प्रकार को प्रारूप का उपयोग करके भी निर्दिष्ट किया जा सकता है " ;प्रकार=माइमटाइप" फ़ाइल नाम का अनुसरण करें। इस पैरामीटर को यूआरएल-एन्कोडेड स्ट्रिंग के रूप में पारित किया जा सकता है, जैसे " पैरा1=वैल1&पैरा2=वैल2&...", और एक सरणी के रूप में, जिसकी कुंजियाँ फ़ील्ड के नाम होंगी, और मान उनकी सामग्री होंगी। यदि मान एक सरणी है, तो हेडर सामग्री प्रकारपर सेट किया जाएगा मल्टीपार्ट/फॉर्म-डेटा. PHP 5.2.0 से प्रारंभ करते समय, उपसर्ग के साथ फ़ाइलें स्थानांतरित करते समय @ , मान एक सरणी होना चाहिए। PHP 5.5.0 के बाद से, उपसर्ग @ बहिष्कृत है और फ़ाइलें इसका उपयोग करके भेजी जा सकती हैं कर्लफ़ाइल. उपसर्ग @ से शुरू होने वाले मानों को अनुमति देने के लिए अक्षम किया जा सकता है @ विकल्प सेट करके CURLOPT_SAFE_UPLOADअर्थ में सत्य.
CURLOPT_प्रॉक्सी HTTP प्रॉक्सी जिसके माध्यम से अनुरोधों को रूट किया जाएगा।
CURLOPT_PROXYUSERPWD फॉर्म में लॉगिन और पासवर्ड लिखा हुआ है ":" , प्रॉक्सी के माध्यम से कनेक्ट करते समय उपयोग किया जाता है।
CURLOPT_RANDOM_FILE एसएसएल के लिए यादृच्छिक संख्या जनरेटर को आरंभ करने के लिए उपयोग की जाने वाली फ़ाइल का नाम।
CURLOPT_RANGE डाउनलोड किए जाने वाले डेटा की रेंज, प्रारूप में "एक्स-वाई", और या तो X या Y को छोड़ा जा सकता है। HTTP प्रोटोकॉल अल्पविराम द्वारा अलग की गई कई श्रेणियों के प्रसारण का भी समर्थन करता है, वे प्रारूप में निर्दिष्ट हैं "एक्स-वाई,एन-एम".
CURLOPT_रेफ़रर शीर्षलेख सामग्री "रेफ़रर:", जिसका उपयोग HTTP अनुरोध में किया जाएगा।
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 एक स्ट्रिंग जिसमें 32 हेक्साडेसिमल अंक हैं। स्ट्रिंग को दूरस्थ कंप्यूटर की सार्वजनिक कुंजी का MD5 चेकसम होना चाहिए, और जब तक चेकसम सार्वजनिक कुंजी से मेल नहीं खाता तब तक libcurl दूरस्थ होस्ट से कनेक्शन रीसेट कर देगा। यह विकल्प केवल एससीपी और एसएफटीपी का उपयोग करके डेटा स्थानांतरित करने के लिए है। कर्ल 7.17.1 में जोड़ा गया।
CURLOPT_SSH_PUBLIC_KEYFILE आपकी सार्वजनिक कुंजी के लिए फ़ाइल नाम. यदि निर्दिष्ट नहीं है, तो libcurl $HOME/.ssh/id_dsa.pub फ़ाइल में डिफ़ॉल्ट हो जाता है यदि HOME पर्यावरण चर सेट है और यदि HOME पर्यावरण चर सेट नहीं है तो फ़ाइल "id_dsa.pub" वर्तमान निर्देशिका में है। कर्ल 7.16.1 में जोड़ा गया।
CURLOPT_SSH_PRIVATE_KEYFILE आपकी निजी कुंजी के लिए फ़ाइल नाम. यदि निर्दिष्ट नहीं है, तो libcurl $HOME/.ssh/id_dsa फ़ाइल में डिफ़ॉल्ट हो जाता है यदि HOME पर्यावरण चर सेट है और यदि HOME पर्यावरण चर सेट नहीं है तो वर्तमान निर्देशिका में "id_dsa" फ़ाइल। यदि फ़ाइल पासवर्ड से सुरक्षित है, तो पासवर्ड का उपयोग करके सेट करें CURLOPT_KEYPASSWD. कर्ल 7.16.1 में जोड़ा गया।
CURLOPT_SSL_CIPHER_LIST एसएसएल स्थानांतरण में प्रयुक्त सिफर की सूची। उदाहरण के लिए, RC4-SHAऔर टीएलएसवी1वैध सिफर सूचियाँ हैं।
CURLOPT_SSLCERT सही ढंग से स्वरूपित PEM प्रमाणपत्र वाली फ़ाइल का नाम।
CURLOPT_SSLCERTPASSWD प्रमाणपत्र का उपयोग करने के लिए पासवर्ड आवश्यक है CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE प्रमाणपत्र प्रारूप. प्रारूप समर्थित "पीईएम"(गलती करना), "डीईआर"और "इंग्लैंड". कर्ल संस्करण 7.9.3 में जोड़ा गया।
CURLOPT_SSLENGINE पैरामीटर में निर्दिष्ट एसएसएल निजी कुंजी के लिए एन्क्रिप्शन इंजन आईडी CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT असममित एन्क्रिप्शन संचालन के लिए उपयोग किए जाने वाले एन्क्रिप्शन तंत्र का पहचानकर्ता।
CURLOPT_SSLKEY SSL निजी कुंजी फ़ाइल का नाम.
CURLOPT_SSLKEYPASSWD

पैरामीटर द्वारा निर्दिष्ट एसएसएल निजी कुंजी का उपयोग करने के लिए आवश्यक गुप्त पासवर्ड CURLOPT_SSLKEY.

टिप्पणी:

चूँकि इस पैरामीटर में एक मूल्यवान पासवर्ड है, इसलिए इस PHP स्क्रिप्ट को सुरक्षित स्थान पर रखना याद रखें।

CURLOPT_SSLKEYTYPE पैरामीटर में निर्दिष्ट एसएसएल निजी कुंजी का प्रकार CURLOPT_SSLKEY. निम्नलिखित प्रमुख प्रकार समर्थित हैं: "पीईएम"(गलती करना), "डीईआर"और "इंग्लैंड".
CURLOPT_URL डाउनलोड करने योग्य यूआरएल. यह पैरामीटर किसी सत्र को प्रारंभ करते समय भी सेट किया जा सकता है कर्ल_इनिट().
CURLOPT_USERAGENT शीर्षलेख सामग्री "उपयोगकर्ता एजेंट: ", एक HTTP अनुरोध में भेजा गया।
CURLOPT_USERPWD कनेक्शन के दौरान उपयोग किया गया लॉगिन और पासवर्ड, प्रारूप में निर्दिष्ट है ":" .

निम्नलिखित विकल्प पैरामीटर मानों के लिए, मान पैरामीटर एक सरणी होना चाहिए:

पैरामीटर मान मान सेट करें टिप्पणियाँ
CURLOPT_HTTP200ALIASES HTTP 200 प्रतिक्रियाओं की एक श्रृंखला जिसे गलत प्रतिक्रियाओं के बजाय सही प्रतिक्रियाओं के रूप में माना जाएगा। कर्ल संस्करण 7.10.3 में जोड़ा गया।
CURLOPT_HTTPHEADER सेट HTTP हेडर की एक सरणी, प्रारूप सरणी में ("सामग्री-प्रकार: टेक्स्ट/सादा", "सामग्री-लंबाई: 100")
CURLOPT_POSTquote एफ़टीपी अनुरोध पूरा होने के बाद सर्वर पर निष्पादित एफ़टीपी कमांड की एक श्रृंखला।
CURLOPT_उद्धरण एफ़टीपी अनुरोध करने से पहले सर्वर पर निष्पादित एफ़टीपी आदेशों की एक श्रृंखला।

निम्नलिखित विकल्प पैरामीटर मानों के लिए, मान पैरामीटर एक स्ट्रीम हैंडल होना चाहिए (उदाहरण के लिए, फ़ंक्शन द्वारा लौटाया गया)। fopen()):

पैरामीटर मान मान सेट करें
CURLOPT_फ़ाइल वह फ़ाइल जिसमें स्थानांतरण परिणाम लिखा जाएगा। डिफ़ॉल्ट आउटपुट स्ट्रीम STDOUT(ब्राउज़र विंडो).
CURLOPT_INFILE वह फ़ाइल जिससे डेटा सर्वर पर अपलोड होने पर पढ़ा जाना चाहिए।
CURLOPT_STDERR त्रुटि स्ट्रीम के स्थान पर वैकल्पिक त्रुटि आउटपुट फ़ाइल का उपयोग किया गया STDERR.
CURLOPT_WRITEHEADER वह फ़ाइल जिसमें वर्तमान ऑपरेशन के हेडर लिखे जायेंगे।

निम्नलिखित विकल्प पैरामीटर मानों के लिए, मान पैरामीटर एक वैध फ़ंक्शन नाम या समापन होना चाहिए:

पैरामीटर मान मान सेट करें
CURLOPT_HEADERFUNCTION कॉलबैक फ़ंक्शन दो पैरामीटर लेता है। पहला पैरामीटर कर्ल हैंडल है, दूसरा पैरामीटर एक स्ट्रिंग है जिसमें लिखे जाने वाले हेडर हैं। हेडर को इस कॉलबैक फ़ंक्शन का उपयोग करके लिखा जाना चाहिए। लिखे गए बाइट्स की संख्या वापस करनी चाहिए।
CURLOPT_PASSWDFUNCTION कॉलबैक फ़ंक्शन तीन पैरामीटर लेता है। पहला पैरामीटर कर्ल हैंडल है, दूसरा पैरामीटर पासवर्ड प्रॉम्प्ट स्ट्रिंग है, और तीसरा पैरामीटर अधिकतम पासवर्ड लंबाई है। पासवर्ड युक्त एक स्ट्रिंग लौटानी चाहिए।
CURLOPT_PROGRESSFUNCTION

कॉलबैक फ़ंक्शन पांच पैरामीटर लेता है। पहला है कर्ल डिस्क्रिप्टर, दूसरा है सर्वर से डाउनलोड किए जाने वाले अपेक्षित बाइट्स की कुल संख्या, तीसरा है पहले से डाउनलोड किए गए बाइट्स की संख्या, चौथा है सर्वर पर भेजे जाने वाले अपेक्षित बाइट्स की कुल संख्या, और पाँचवाँ पहले से भेजे गए बाइट्स की संख्या है।

टिप्पणी:

कॉलबैक फ़ंक्शन केवल तभी कॉल किया जाता है जब विकल्प CURLOPT_NOPROGRESSमान पर सेट करें असत्य.

स्थानांतरण रद्द करने के लिए आप गैर-शून्य मान वापस कर सकते हैं। इस स्थिति में एक त्रुटि प्रदर्शित होगी CURLE_ABORTED_BY_CALLBACK.

CURLOPT_READFUNCTION कॉलबैक फ़ंक्शन तीन पैरामीटर लेता है। पहला पैरामीटर कर्ल हैंडल है, दूसरा पैरामीटर विकल्प के माध्यम से कर्ल को पास किया गया स्ट्रीम संसाधन है CURLOPT_INFILE, और तीसरा पैरामीटर पढ़ने के लिए डेटा की अधिकतम अनुमत मात्रा है। कॉलबैक फ़ंक्शन को आमतौर पर पारित स्ट्रीमिंग संसाधन से पढ़कर डेटा की अनुरोधित मात्रा से अधिक लंबाई की एक स्ट्रिंग वापस नहीं करनी चाहिए। फ़ाइल के अंत का संकेत देने के लिए एक खाली स्ट्रिंग लौटानी चाहिए ईओएफ.
CURLOPT_WRITEFUNCTION कॉलबैक फ़ंक्शन दो पैरामीटर लेता है। पहला पैरामीटर कर्ल हैंडल है, और दूसरा पैरामीटर वह स्ट्रिंग है जिसमें लिखा जाने वाला डेटा है। इस फ़ंक्शन का उपयोग करके डेटा सहेजा जाना चाहिए। इसे लिखे गए बाइट्स की सटीक संख्या लौटानी होगी, अन्यथा डाउनलोड एक त्रुटि के साथ निरस्त कर दिया जाएगा।

अन्य अर्थ:

मान लौटाएँ

रिटर्न सत्यसफल समापन पर या असत्यत्रुटि होने पर.

परिवर्तनों की सूची

संस्करण विवरण
5.6.0 विकल्प कर्ल_सुरक्षित_अपलोडअब का एक डिफ़ॉल्ट मान है सत्य.
5.6.0 विकल्प हटा दिया गया CURLOPT_CLOSEPOLICYऔर उससे जुड़े अर्थ.
5.5.0 कर्ल संसाधन को कॉलबैक फ़ंक्शन के पहले तर्क के रूप में जोड़ा गया है CURLOPT_PROGRESSFUNCTION.
5.5.0 विकल्प जोड़ा गया CURLOPT_SHARE.
5.3.0 विकल्प जोड़ा गया CURLOPT_PROGRESSFUNCTION.
5.2.10 विकल्प जोड़े गए CURLOPT_प्रोटोकॉलऔर CURLOPT_REDIR_प्रोटोकॉल.
5.1.0 विकल्प जोड़े गए CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTHऔर CURLOPT_TIMECONDITION.
5.0.0 विकल्प जोड़े गए CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRETRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_प्रॉक्सीपोर्ट, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPEऔर CURLOPT_HTTP200ALIASES.

उदाहरण

उदाहरण #1 एक कर्ल सत्र प्रारंभ करना और एक वेब पेज लोड करना

// एक नया कर्ल संसाधन बनाएं
$ch = कर्ल_इनिट();

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

$ch = कर्ल_इनिट();

$ डेटा = सरणी ("नाम" => "फू", "फ़ाइल" => "@/home/user/test.png");

कर्ल_सेटॉप ($ch, CURLOPT_URL, "http://localhost/upload.php");
कर्ल_सेटोप्ट($ch, CURLOPT_POST, 1);
कर्ल_सेटोप्ट($ch, CURLOPT_POSTFIELDS, $डेटा);

कर्ल_एक्सईसी($ch);
?>

इस उदाहरण को चलाने का परिणाम:

ऐरे ( => फू) ऐरे ( => ऐरे ( => test.png => छवि/पीएनजी => /tmp/phpcpjNeQ => 0 => 279))

टिप्पणियाँ

टिप्पणी:

के लिए एक सरणी पास करना CURLOPT_POSTFIELDSडेटा को एन्कोड करता है मल्टीपार्ट/फॉर्म-डेटा, जबकि URL-एन्कोडेड स्ट्रिंग को पास करने से डेटा इनकोड हो जाएगा एप्लिकेशन/x-www-form-urlencoded.

कर्ल एक उपकरण है जो आपको विभिन्न सर्वरों के साथ इंटरैक्ट करने की अनुमति देता है और कई प्रोटोकॉल का समर्थन करता है: HTTP, FTP, TELNET, आदि। कर्ल मूल रूप से एक कमांड लाइन उपयोगिता है। लेकिन, सौभाग्य से हमारे लिए, PHP कर्ल लाइब्रेरी के साथ काम करने का समर्थन करता है। इस लेख में हम cURL के साथ काम करने के गैर-तुच्छ उदाहरण देखेंगे।

कर्ल क्यों?

वास्तव में, किसी अन्य सर्वर पर अनुरोध भेजने के कई अन्य तरीके हैं, उदाहरण के लिए, किसी पृष्ठ की सामग्री को पुनः प्राप्त करना। बहुत से लोग, अधिकतर आलस्य के कारण, कर्ल के बजाय सरल PHP फ़ंक्शंस का उपयोग करते हैं:

$सामग्री = file_get_contents('http://www.example.com'); // या $ लाइनें = फ़ाइल ("http://www.example.com"); // या रीडफ़ाइल ("http://www.example.com");

हालाँकि, वे कुशल त्रुटि प्रबंधन की अनुमति नहीं देते हैं। ऐसे कई कार्य भी हैं जो वे बिल्कुल नहीं कर सकते हैं - उदाहरण के लिए, कुकीज़ के साथ काम करना, प्राधिकरण, पोस्ट अनुरोध, फ़ाइलें डाउनलोड करना।

cUrl एक शक्तिशाली उपकरण है जो कई प्रोटोकॉल का समर्थन करता है और संपूर्ण अनुरोध जानकारी प्रदान करता है।

कर्ल मूल बातें

जटिल उदाहरणों पर आगे बढ़ने से पहले, आइए PHP में कर्ल अनुरोध की मूल संरचना को देखें। PHP में कर्ल अनुरोध करने के लिए, आपको 4 मुख्य कदम उठाने होंगे:

  1. आरंभीकरण।
  2. सेटिंग विकल्प.
  3. अनुरोध निष्पादित करना.
  4. सफाई संसाधन.
// 1. आरंभीकरण $ch = cur_init(); // 2. सेट विकल्प, जिसमें URL cur_setopt($ch, CURLOPT_URL, "http://www.google.com"); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, 1); कर्ल_सेटॉप ($ch, CURLOPT_HEADER, 0); // 3. अनुरोध निष्पादित करना और प्रतिक्रिया प्राप्त करना $output = cur_exec($ch); // 4. सफाई संसाधन कर्ल_क्लोज़($ch);

हम इस लेख में अधिकतर चरण #2 पर ध्यान देंगे क्योंकि यहीं जादू होता है। कर्ल विकल्पों की सूची बहुत बड़ी है, इसलिए हम आज सभी विकल्पों पर विचार नहीं करेंगे, बल्कि उनका उपयोग करेंगे जो विशिष्ट समस्याओं को हल करने के लिए उपयोगी हैं।

बस पर नज़र रखना

यदि आवश्यक हो, तो आप त्रुटियों को ट्रैक करने के लिए निम्नलिखित पंक्तियाँ जोड़ सकते हैं:

//...$आउटपुट = कर्ल_एक्सईसी($ch); अगर ($आउटपुट === गलत) (इको "कर्ल त्रुटि:"। कर्ल_त्रुटि($ch); ) // ...

कृपया ध्यान दें कि हम "==" के बजाय "===" का उपयोग करते हैं क्योंकि खाली सर्वर प्रतिक्रिया और बूलियन मान FALSE के बीच अंतर करना आवश्यक है, जो किसी त्रुटि के मामले में लौटाया जाता है।

किसी अनुरोध के बारे में जानकारी प्राप्त करना

एक अन्य वैकल्पिक कदम कर्ल अनुरोध के निष्पादित होने के बाद उसके बारे में जानकारी प्राप्त करना है।

//...curl_exec($ch); $जानकारी = कर्ल_गेटइन्फो($ch); प्रतिध्वनि "लिया"। $ जानकारी["कुल_समय"]। "यूआरएल के लिए सेकंड"। $जानकारी["यूआरएल"]; // ...

परिणामस्वरूप, आपको निम्नलिखित जानकारी के साथ एक सरणी प्राप्त होगी:

  • "यूआरएल"
  • "सामग्री प्रकार"
  • "http_code"
  • "शीर्षलेख_आकार"
  • "अनुरोध_आकार"
  • "फ़ाइलटाइम"
  • "ssl_verify_result"
  • "रीडायरेक्ट_गिनती"
  • "कुल समय"
  • "namelookup_time"
  • "कनेक्ट_टाइम"
  • "पूर्व स्थानांतरण_समय"
  • "आकार_अपलोड"
  • "आकार_डाउनलोड"
  • "स्पीड_डाउनलोड"
  • "स्पीड_अपलोड"
  • "डाउनलोड_सामग्री_लंबाई"
  • "अपलोड_सामग्री_लंबाई"
  • "स्थानांतरण_समय प्रारंभ करें"
  • "रीडायरेक्ट_टाइम"

ब्राउज़र के आधार पर ट्रैकिंग को पुनर्निर्देशित करें

इस उदाहरण में, हम एक स्क्रिप्ट लिखेंगे जो विभिन्न ब्राउज़र सेटिंग्स के आधार पर रीडायरेक्ट का पता लगाएगी। उदाहरण के लिए, कुछ साइटें विज़िटरों को मोबाइल उपकरणों से अन्य देशों के विज़िटरों पर पुनर्निर्देशित करती हैं।

हम उपयोगकर्ता-एजेंट और भाषा सहित अपने स्वयं के हेडर सेट करने के लिए CURLOPT_HTTPHEADER विकल्प का उपयोग करेंगे, और देखेंगे कि साइटें हमें कहां रीडायरेक्ट करती हैं।

// यूआरएल $यूआरएल = सरणी('http://www.cnn.com', 'http://www.mozilla.com', 'http://www.facebook.com'); // ब्राउज़र $ब्राउज़र = सरणी("मानक" => सरणी ("user_agent" => "मोज़िला/5.0 (विंडोज़; यू; विंडोज़ एनटी 6.1; एन-यूएस; आरवी:1.9.1.6) गेको/20091201 फ़ायरफ़ॉक्स/3.5। 6 (.NET CLR 3.5.30729)", "भाषा" => "en-us,en;q=0.5"), "आईफोन" => सरणी ("user_agent" => "मोज़िला/5.0 (आईफोन; यू;); Mac OS > "मोज़िला/4.0 (संगत; एमएसआईई 7.0; विंडोज़ एनटी 5.1; जीटीबी6; .NET सीएलआर 2.0.50727)", "भाषा" => "fr,fr-FR;q=0.5"); foreach ($url के रूप में urls) ( echo "URL: $url\n"; foreach ($test_name के रूप में ब्राउज़र्स => $ब्राउज़र) ( $ch = cur_init(); // पता निर्धारित करें cur_setopt($ch, CURLOPT_URL , $url); // उपयोग किए गए ब्राउज़र और भाषा को इंगित करें curl_setopt($ch, CURLOPT_HTTPHEADER, array("उपयोगकर्ता-एजेंट: ($ब्राउज़र["user_agent"])", "स्वीकार-भाषा: ($ब्राउज़र["भाषा" ]) ")); // हमें पृष्ठ की सामग्री की आवश्यकता नहीं है cur_setopt($ch, CURLOPT_NOBODY, 1); // हमें केवल हेडर की आवश्यकता है curl_setopt($ch, CURLOPT_HEADER, 1); // इसके बजाय परिणाम लौटाएं इसके आउटपुट के कर्ल_सेटॉप($ch, CURLOPT_RETURNTRANSFER , 1); $आउटपुट = कर्ल_exec($ch); कर्ल_क्लोज़($ch); // HTTP हेडर में पुनर्निर्देशन को परिभाषित करें? यदि (preg_match("!Location: (.*)!" , $आउटपुट, $माचिस)) ( इको "$test_name: $matches\n" पर रीडायरेक्ट करता है; ) अन्य ( इको "$test_name: नो रीडायरेक्शन\n"; ) ) इको "\n\n"; )

एक लूप में हम प्रत्येक यूआरएल के लिए ब्राउज़र की जांच करते हैं। सबसे पहले हम अपने अनुरोध के लिए विकल्प निर्धारित करते हैं: यूआरएल और ब्राउज़र और परीक्षण की जाने वाली भाषा।

क्योंकि हमने एक विशेष विकल्प निर्धारित किया है; अनुरोध के परिणाम में केवल HTTP हेडर होंगे। एक सरल रेगुलर एक्सप्रेशन का उपयोग करके, हम जांच सकते हैं कि प्रतिक्रिया में "स्थान:" स्ट्रिंग है या नहीं।

स्क्रिप्ट निष्पादन का परिणाम:

यूआरएल: http://www.cnn.com मानक: http://edition.cnn.com/ पर रीडायरेक्ट करता है आईफोन: http://edition.cnn.com/ पर रीडायरेक्ट करता है फ्रेंच: http://edition.cnn पर रीडायरेक्ट करता है .com/ यूआरएल: http://www.mozilla.com मानक: https://www.mozilla.org/firefox/ पर रीडायरेक्ट आईफोन: https://www.mozilla.org/firefox/ पर रीडायरेक्ट फ़्रेंच: पर रीडायरेक्ट https://www.mozilla.org/firefox/ यूआरएल: http://www.facebook.com मानक: https://www.facebook.com/ पर रीडायरेक्ट आईफोन: http://m.facebook.com पर रीडायरेक्ट /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr फ़्रेंच: कोई पुनर्निर्देशन नहीं

POST अनुरोध भेजा जा रहा है

GET अनुरोध निष्पादित करते समय, डेटा को क्वेरी स्ट्रिंग में पास किया जा सकता है। उदाहरण के लिए, जब आप Google पर खोजते हैं, तो आपकी क्वेरी का URL में अनुवाद किया जाता है:

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

इस क्वेरी का परिणाम प्राप्त करने के लिए आपको cURL की भी आवश्यकता नहीं है, आप आलसी हो सकते हैं और "file_get_contents()" का उपयोग कर सकते हैं।

लेकिन कुछ HTML फॉर्म POST पद्धति का उपयोग करते हैं। इस मामले में, डेटा यूआरएल के बजाय अनुरोध संदेश के मुख्य भाग में भेजा जाता है।

आइए एक स्क्रिप्ट लिखें जो POST अनुरोध भेजेगी। सबसे पहले, आइए एक सरल PHP फ़ाइल बनाएं जो इन अनुरोधों को स्वीकार करेगी और भेजे गए डेटा को वापस कर देगी। चलिए इसे post_output.php कहते हैं:

$url = "http://localhost/post_output.php"; $पोस्ट_डेटा = सरणी ("फू" => "बार", "क्वेरी" => "फूबार", "एक्शन" => "सबमिट"); $ch = कर्ल_इनिट(); कर्ल_सेटोप्ट($ch, CURLOPT_URL, $url); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, 1); // एक पोस्ट अनुरोध बनाएं cur_setopt($ch, CURLOPT_POST, 1); // डेटा जोड़ें cur_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $आउटपुट = कर्ल_एक्सईसी($ch); कर्ल_क्लोज़($ch); प्रतिध्वनि $आउटपुट;

यह स्क्रिप्ट आउटपुट करेगी:

सरणी (=> बार => FooBar => सबमिट करें)

इस स्क्रिप्ट ने post_output.php फ़ाइल में एक POST अनुरोध भेजा। जिसने $_POST सरणी की सामग्री को आउटपुट किया और हमें cURL का उपयोग करके यह प्रतिक्रिया प्राप्त हुई।

फ़ाइलें अपलोड हो रही हैं

पिछले उदाहरण की तरह, आइए एक फ़ाइल बनाएं जो अनुरोध स्वीकार करेगी, upload_output.php :

Print_r($_FILES);

और स्क्रिप्ट ही जो फ़ाइलें डाउनलोड करती है:

$url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // अपलोड करने के लिए फ़ाइल "upload" => "@/tmp/desert.jpg"); $ch = कर्ल_इनिट(); कर्ल_सेटोप्ट($ch, CURLOPT_URL, $url); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, 1); कर्ल_सेटोप्ट($ch, CURLOPT_POST, 1); कर्ल_सेटॉप ($ch, CURLOPT_POSTFIELDS, $post_data); $आउटपुट = कर्ल_एक्सईसी($ch); कर्ल_क्लोज़($ch); प्रतिध्वनि $आउटपुट;

यदि आप कोई फ़ाइल अपलोड करना चाहते हैं, तो आपको बस एक सामान्य POST अनुरोध पैरामीटर की तरह, "@" के साथ उपसर्ग करके, उसके लिए पथ पास करना होगा। स्क्रिप्ट का परिणाम:

ऐरे (=>ऐरे (==desert.jpg => एप्लिकेशन/ऑक्टेट-स्ट्रीम => /tmp/phpAhEvXy => 0 => 845941))

मल्टी कर्ल

PHP में cURL की उन्नत सुविधाओं में से एक एक साथ और अतुल्यकालिक रूप से कई अनुरोधों को निष्पादित करने की क्षमता है।

सामान्य परिस्थितियों में, स्क्रिप्ट रुक जाती है और अनुरोध पूरा होने की प्रतीक्षा करती है। और यदि आपको बहुत सारी क्वेरी निष्पादित करने की आवश्यकता है, तो इसमें बहुत समय लग सकता है, क्योंकि... आप क्रमिक रूप से प्रदर्शन करेंगे. इस सीमा को दरकिनार किया जा सकता है:

// हैंडलर बनाएं $ch1 = cur_init(); $ch2 = कर्ल_इनिट(); // विकल्प सेट करें cur_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); कर्ल_सेटॉप ($ch1, CURLOPT_HEADER, 0); कर्ल_सेटोप्ट($ch2, CURLOPT_URL, "http://www.php.net/"); कर्ल_सेटॉप ($ch2, CURLOPT_HEADER, 0); // एकाधिक कर्ल हैंडल बनाएं $mh = cur_multi_init(); // हैंडलर जोड़ें cur_multi_add_handle($mh,$ch1); कर्ल_मल्टी_एड_हैंडल($mh,$ch2); $चल रहा है = शून्य; // अनुरोध निष्पादित करें (curl_multi_exec($mh, $running); ) जबकि ($running > 0); // संसाधनों को मुक्त करें cur_multi_remove_handle($mh, $ch1); कर्ल_मल्टी_रिमूव_हैंडल($mh, $ch2); कर्ल_मल्टी_क्लोज़($mh);

विचार यह है कि आप कई कर्ल हैंडल बना सकते हैं, उन्हें एक मल्टी-हैंडल के तहत जोड़ सकते हैं, और उन्हें अतुल्यकालिक रूप से निष्पादित कर सकते हैं।

सबसे पहले, सब कुछ एक नियमित कर्ल अनुरोध के समान है - एक डिस्क्रिप्टर बनाया जाता है ( कर्ल_इनिट() ), पैरामीटर सेट हैं ( कर्ल_सेटॉप() ). इसके बाद, एक मल्टी-डिस्क्रिप्टर बनाया जाता है ( कर्ल_मल्टी_इनिट() ) और पहले से बनाए गए नियमित विवरणक जोड़े गए हैं ( कर्ल_मल्टी_एड_हैंडल() ). सामान्य रूप से cur_exec() को कॉल करने के बजाय, हम कॉल करेंगे कर्ल_मल्टी_एक्सईसी() यह फ़ंक्शन हमें दूसरे पैरामीटर - $running का उपयोग करके सक्रिय कनेक्शन की संख्या के बारे में सूचित करता है। इसलिए, लूप तब तक चलता है जब तक $running 0 के बराबर नहीं हो जाता। और, निश्चित रूप से, काम खत्म करने के बाद, संसाधनों को जारी करना आवश्यक है।

इस उदाहरण में, हम केवल प्रश्नों के परिणाम को STDOUT पर आउटपुट करते हैं। आइए मल्टी कर्ल का उपयोग करने के एक गैर-मामूली मामले पर विचार करें।

वर्डप्रेस में बाहरी लिंक की जाँच करना

एक ऐसे ब्लॉग की कल्पना करें जिसमें बहुत सारी पोस्टें हों जिनमें बाहरी साइटों के लिंक हों। हो सकता है कि इनमें से कुछ लिंक काम न करें.

आइए एक स्क्रिप्ट लिखें जो सभी टूटे हुए लिंक ढूंढेगी और उन्हें हमें दिखाएगी।

सबसे पहले, हमें डेटाबेस से सभी बाहरी लिंक खींचने होंगे:

// CONFIG $db_host = "लोकलहोस्ट"; $db_user = "रूट"; $db_pass = ""; $db_name = "वर्डप्रेस"; $excluded_domains = array('localhost', 'site'); $max_connections = 10; $url_list = सरणी(); $working_urls = सारणी(); $dead_urls = सारणी(); $not_found_urls = सारणी(); $सक्रिय = शून्य; // MySQL से कनेक्ट करें यदि (!mysql_connect($db_host, $db_user, $db_pass)) (die('कनेक्ट नहीं हो सका:' . mysql_error()); ) यदि (!mysql_select_db($db_name)) (die('कर सका db का चयन न करें: " . mysql_error()); ) // टेक्स्ट में लिंक के साथ सभी पोस्ट लें $q = "wp_posts से पोस्ट_कंटेंट चुनें जहां पोस्ट_कंटेंट "%href=%" और पोस्ट_स्टेटस = "प्रकाशित करें" और पोस्ट_टाइप = "पोस्ट " "; $r = mysql_query($q) या मरो(mysql_error()); जबकि ($d = mysql_fetch_assoc($r)) ( // रेगुलर एक्सप्रेशन का उपयोग करके सभी लिंक एकत्र करें यदि (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($url के रूप में मेल खाता है) ( // अनावश्यक डोमेन को फ़िल्टर करें $tmp = parse_url($url); यदि (isset($tmp["host"]) && in_array($tmp["host"], $ बहिष्कृत_डोमेन)) (जारी रखें; ) // एक साथ $url_list = $url; ) ) ) // दोहराव हटाएं $url_list = array_values(array_unique($url_list)); यदि (!$url_list) (die('जाँचने के लिए कोई URL नहीं'); )

स्क्रिप्ट के इस भाग में, हम बस डेटाबेस से सभी बाहरी लिंक निकाल देते हैं। आइए उनकी जाँच करें:

$mh = कर्ल_मल्टी_इनिट(); // 1. ($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); कर्ल_मल्टी_क्लोज़($mh); इको "==मृत यूआरएल==\n"; इको इंपोड('\n', $dead_urls)। "\n\n"; इको "==404 यूआरएल==\n"; इको इंपोड('\n', $not_found_urls)। "\n\n"; इको "==कार्यशील यूआरएल==\n"; इको इंपोड('\n', $working_urls); प्रतिध्वनि "\n\n"; // 9. दिए गए URL फ़ंक्शन के साथ एक हैंडल जोड़ता है add_url_to_multi_handle($mh, $url_list) ( स्थिर $index = 0; // यदि अभी भी लिंक हैं यदि (isset($url_list[$index])) ( // सब कुछ हमेशा की तरह $ ch = कर्ल_इनिट (); // सेट विकल्प कर्ल_सेटॉप ($ ch, CURLOPT_URL, $ url_list [$ इंडेक्स]); // परिणाम प्रदर्शित करने के बजाय वापस लौटें कर्ल_सेटॉप ($ ch, CURLOPT_RETURNTRANSFER, 1); // अनुमति दें कर्ल_सेटॉप ($ ch, CURLOPT_FOLLOWLOCATION, 1) को रीडायरेक्ट करता है; // समय बचाने के लिए केवल हेडर प्राप्त करें cur_setopt ($ ch, CURLOPT_NOBODY, 1); // मल्टी-हैंडल में जोड़ें cur_multi_add_handle ($ mh, $ ch); $ इंडेक्स ++; ) )

आइए कोड को अधिक विस्तार से देखें (संख्या कोड में टिप्पणियों से मेल खाती है):

  1. हम डिस्क्रिप्टरों की प्रारंभिक संख्या जोड़ते हैं ताकि सिस्टम पर थ्रेड्स की अधिकता न हो। संख्या को $max_connections वेरिएबल द्वारा नियंत्रित किया जाता है।
  2. $curRunning वैरिएबल चल रहे थ्रेड्स की संख्या को संग्रहीत करता है, $running पिछले मान को संग्रहीत करता है; यदि वे असमान हो जाते हैं, तो थ्रेड में से एक ने काम पूरा कर लिया है।
  3. हमें पूर्ण अनुरोध के बारे में जानकारी प्राप्त होती है।
  4. यदि सर्वर से कोई प्रतिक्रिया नहीं मिलती है, तो लिंक काम नहीं कर रहा है।
  5. सर्वर प्रतिक्रिया 404 है.
  6. अन्यथा लिंक काम करता है.
  7. अनुरोध पूरा हो गया है, हम संसाधन जारी करते हैं।
  8. आइए मल्टी डिस्क्रिप्टर में एक नया यूआरएल जोड़ें।
  9. समारोह add_url_to_multi_handle() मल्टी-डिस्क्रिप्टर में दिए गए URL के साथ एक नया हैंडल जोड़ता है।

आइए स्क्रिप्ट चलाएँ:

मृत URL== xample1234.com/ ==404 URL== www.google.com/dsfasdfafd ==कार्यशील URL== ru.php.net/manual/ru/function.time.php www.cssbuttongenerator.com/ csslint. नेट/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 कोडेक्स। Wordpress.org/Plugin_API/Filter_Reference Codex.wordpress.org/Roles_and_Capability Code.google.com/p/google-api-php-client/wiki/OAuth2#Google_APIs_Console jplayer.org/code.google.com/p/google-api -php-client/ डेवलपर्स.google.com/+/ अकाउंट्स.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

जाँच में लगभग 2 सेकंड का समय लगा। एक साथ 10 थ्रेड चलाने से, नियमित कर्ल अनुरोधों की तुलना में प्रदर्शन 10 गुना बढ़ जाता है। सर्वर प्रतिक्रिया की सामग्री प्राप्त करने के लिए, फ़ंक्शन का उपयोग करें कर्ल_मल्टी_गेटकंटेंट($ch) , जहां $ch से प्राप्त एक डिस्क्रिप्टर है कर्ल_मल्टी_इन्फो_रीड() .

PHP में अन्य कर्ल सुविधाएँ

HTTP प्रमाणीकरण

यदि HTTP अनुरोध को प्रमाणीकरण की आवश्यकता है, तो निम्न कोड का उपयोग करें:

$url = "http://www.somesite.com/members/"; $ch = कर्ल_इनिट(); कर्ल_सेटोप्ट($ch, CURLOPT_URL, $url); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, 1); // उपयोगकर्ता नाम और पासवर्ड भेजें cur_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // यदि रीडायरेक्ट की अनुमति है तो cur_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // पुनर्निर्देशन के बाद कर्ल पासवर्ड भेजेगा cur_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $आउटपुट = कर्ल_एक्सईसी($ch); कर्ल_क्लोज़($ch);

एफ़टीपी के माध्यम से अपलोड करें

एफ़टीपी के साथ काम करने के लिए PHP की अपनी लाइब्रेरी है, लेकिन आप cURL का भी उपयोग कर सकते हैं:

// फ़ाइल पढ़ें $file = fopen('/path/to/file', 'r'); // यूआरएल में पहले से ही आवश्यक डेटा शामिल है $url = "ftp://username: [ईमेल सुरक्षित]:21/पथ/से/नया/फ़ाइल"; $ch = कर्ल_इनिट(); कर्ल_सेटॉप($ch, CURLOPT_URL, $url); कर्ल_सेटॉप($ch, CURLOPT_RETURNTRANSFER, 1); // विकल्प कर्ल_सेटॉप($ch, CURLOPT_UPLOAD, 1); कर्ल_सेटॉप($ch, CURLOPT_INFILE, $fp); कर्ल_सेटॉप($ch, CURLOPT_INFILESIZE, फ़ाइल आकार("/पथ/से/फ़ाइल")); कर्ल_सेटॉप($ch, CURLOPT_FTPASCII, 1); $आउटपुट = कर्ल_exec($ ch); कर्ल_क्लोज़($ch);

प्रॉक्सी का उपयोग करना

अनुरोध एक विशिष्ट प्रॉक्सी के माध्यम से किया जा सकता है:

$ch = कर्ल_इनिट(); कर्ल_सेटॉप्ट($ch, CURLOPT_URL,"http://www.example.com"); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, 1); // प्रॉक्सी पता cur_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // यदि प्राधिकरण आवश्यक है तो cur_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $आउटपुट = कर्ल_एक्सईसी($ch); कर्ल_क्लोज़($ch);

कॉलबैक फ़ंक्शन

अनुरोध चलने के दौरान, इसके पूरा होने की प्रतीक्षा किए बिना, कॉलबैक का उपयोग करना संभव है। उदाहरण के लिए, जब सर्वर प्रतिक्रिया डाउनलोड की जा रही है, तो हम पूर्ण डाउनलोड की प्रतीक्षा किए बिना पहले से प्राप्त डेटा का उपयोग कर सकते हैं।

$ch = कर्ल_इनिट(); कर्ल_सेटॉप्ट($ch, CURLOPT_URL,"http://example.com"); कर्ल_सेटॉप्ट($ch, CURLOPT_WRITEFUNCTION,"progress_function"); कर्ल_एक्सईसी($ch); कर्ल_क्लोज़($ch); फ़ंक्शन प्रगति_फ़ंक्शन($ch,$str) ( इको $str; रिटर्न स्ट्रलेन($str); )

अनुरोध के सही ढंग से काम करने के लिए कॉलबैक फ़ंक्शन को स्ट्रिंग की लंबाई लौटानी होगी।

हर बार सर्वर प्रतिक्रिया का अगला भाग प्राप्त होने पर कॉलबैक कॉल किया जाएगा।

निष्कर्ष

इस लेख में, हमने PHP में cURL की उन्नत सुविधाओं को देखा। अगली बार जब आपको यूआरएल अनुरोध करने की आवश्यकता हो, तो कर्ल का उपयोग करें।

हमें अक्सर इंटरनेट से विभिन्न फ़ाइलें डाउनलोड करनी पड़ती हैं, उदाहरण के लिए, निष्पादन योग्य प्रोग्राम फ़ाइलें, स्क्रिप्ट फ़ाइलें, स्रोत पुरालेख। लेकिन यह हमेशा ब्राउज़र के माध्यम से करने की आवश्यकता नहीं है. कई स्थितियों में टर्मिनल के माध्यम से सभी कार्य करना बहुत आसान होता है। क्योंकि इस तरह आप प्रक्रिया को स्वचालित कर सकते हैं। दूसरी ओर, वेबमास्टरों को समय-समय पर वेबसाइट की पहुंच का परीक्षण करना, भेजे गए और प्राप्त हेडर की जांच करना और भी बहुत कुछ करना पड़ता है।

ऐसी समस्याओं और समान श्रेणी की समस्याओं को हल करने के लिए, आप कर्ल उपयोगिता का उपयोग कर सकते हैं। यह आपको समस्याओं की एक विस्तृत श्रृंखला को हल करने की अनुमति देता है, जिसमें साइट पर उपयोगकर्ता क्रियाओं का अनुकरण भी शामिल है। इस लेख में हम देखेंगे कि कर्ल का उपयोग कैसे करें, यह क्या है और इस कार्यक्रम की आवश्यकता क्यों है।

वास्तव में, कर्ल लिनक्स या विंडोज के लिए सिर्फ एक कमांड लाइन उपयोगिता से कहीं अधिक है। यह पुस्तकालयों का एक समूह है जो यूआरएल पृष्ठों के साथ काम करने और फ़ाइलों को स्थानांतरित करने की बुनियादी क्षमताओं को लागू करता है। लाइब्रेरी प्रोटोकॉल के साथ काम करने का समर्थन करती है: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, टेलनेट, DICT, LDAP, साथ ही POP3, IMAP और SMTP। यह पृष्ठों पर उपयोगकर्ता क्रियाओं और यूआरएल के साथ अन्य परिचालनों का अनुकरण करने के लिए बहुत अच्छा है।

कर्ल लाइब्रेरी के लिए समर्थन कई अलग-अलग प्रोग्रामिंग भाषाओं और प्लेटफार्मों में जोड़ा गया है। कर्ल उपयोगिता इस लाइब्रेरी के लिए एक स्वतंत्र आवरण है। यह वह उपयोगिता है जिस पर हम इस लेख में ध्यान केंद्रित करेंगे।

कर्ल कमांड

कर्ल लिनक्स कमांड का उपयोग कैसे किया जा सकता है, इसके विवरण पर आगे बढ़ने से पहले, आइए स्वयं उपयोगिता और इसके मुख्य विकल्पों को देखें जिनकी हमें आवश्यकता होगी। उपयोगिता का सिंटैक्स बहुत सरल है:

$ कर्ल विकल्प लिंक

आइए अब मुख्य विकल्पों पर नजर डालते हैं:

  • -# - लोडिंग के दौरान एक सरल प्रगति पट्टी प्रदर्शित करें;
  • -0 - http 1.0 प्रोटोकॉल का उपयोग करें;
  • -1 - tlsv1 एन्क्रिप्शन प्रोटोकॉल का उपयोग करें;
  • -2 - एसएसएलवी2 का उपयोग करें;
  • -3 - एसएसएलवी3 का उपयोग करें;
  • -4 - आईपीवी4 का उपयोग करें;
  • -6 - आईपीवी6 का उपयोग करें;
  • -ए- अपना USER_AGENT इंगित करें;
  • -बी- कुकी को एक फ़ाइल में सहेजें;
  • -सी- किसी फ़ाइल से सर्वर पर कुकी भेजें;
  • -सी- ब्रेक प्वाइंट या निर्दिष्ट ऑफसेट से फ़ाइल डाउनलोड करना जारी रखें;
  • -एम- सर्वर से प्रतिक्रिया के लिए अधिकतम प्रतीक्षा समय;
  • -डी- POST विधि का उपयोग करके डेटा भेजें;
  • -डी- सर्वर द्वारा लौटाए गए हेडर को फ़ाइल में सहेजें;
  • -इ- रेफ़रर-यूरी फ़ील्ड सेट करें, जो दर्शाता है कि उपयोगकर्ता किस साइट से आया है;
  • -इ- बाहरी एसएसएल प्रमाणपत्र का उपयोग करें;
  • -एफ- त्रुटि संदेश प्रदर्शित न करें;
  • -एफ- एक फॉर्म के रूप में डेटा भेजें;
  • -जी- यदि यह विकल्प सक्षम है, तो -d विकल्प में निर्दिष्ट सभी डेटा GET विधि का उपयोग करके प्रसारित किया जाएगा;
  • -एच- हेडर को सर्वर पर स्थानांतरित करें;
  • -मैं- केवल HTTP शीर्षलेख प्राप्त करें और संपूर्ण पृष्ठ सामग्री को अनदेखा करें;
  • -जे- किसी फ़ाइल से कुकीज़ पढ़ें और भेजें;
  • -जे- अनुरोध से हेडर हटाएं;
  • -एल- रीडायरेक्ट स्वीकार करें और संसाधित करें;
  • -एस- स्थान का उपयोग करके पुनर्निर्देशन की अधिकतम संख्या;
  • -ओ- किसी फ़ाइल में आउटपुट पृष्ठ सामग्री;
  • -ओ- सर्वर पर पृष्ठ या फ़ाइल के नाम के साथ सामग्री को फ़ाइल में सहेजें;
  • -पी- प्रॉक्सी का उपयोग करें;
  • --प्रोटो- उपयोग किए जाने वाले प्रोटोकॉल को इंगित करें;
  • -आर- किसी दूरस्थ फ़ाइल का अंतिम संशोधन समय बचाएं;
  • -एस- त्रुटियों के बारे में न्यूनतम जानकारी प्रदर्शित करें;
  • -एस- त्रुटि संदेश प्रदर्शित करें;
  • -टी- फ़ाइल को सर्वर पर अपलोड करें;
  • -v- सबसे विस्तृत आउटपुट;
  • -य- न्यूनतम डाउनलोड गति;
  • -य- अधिकतम डाउनलोड गति;
  • -जेड- फ़ाइल को केवल तभी डाउनलोड करें जब इसे निर्दिष्ट समय से बाद में संशोधित किया गया हो;
  • -वी- संस्करण प्रदर्शित करें.

यह किसी भी तरह से कर्ल लिनक्स के लिए सभी विकल्प नहीं है, लेकिन यह उन बुनियादी बातों को सूचीबद्ध करता है जिनका आपको उपयोग करने की आवश्यकता होगी।

कर्ल का उपयोग कैसे करें?

हमने कर्ल उपयोगिता के साथ काम करने के सिद्धांत से संबंधित हर चीज को कवर कर लिया है, अब अभ्यास करने और कर्ल कमांड के उदाहरणों को देखने का समय आ गया है।

सबसे आम काम यही है. फ़ाइल डाउनलोड करना बहुत सरल है. ऐसा करने के लिए, बस पैरामीटर में उपयोगिता के लिए फ़ाइल नाम या html पृष्ठ पास करें:

कर्ल https://raw.githubusercontent.com/curl/curl/master/README.md

लेकिन यहां एक आश्चर्य आपका इंतजार कर रहा है: फ़ाइल की संपूर्ण सामग्री मानक आउटपुट पर भेजी जाएगी। इसे किसी भी फ़ाइल में लिखने के लिए उपयोग करें:

कर्ल -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md

और यदि आप चाहते हैं कि परिणामी फ़ाइल का नाम सर्वर पर मौजूद फ़ाइल के समान हो, तो -O विकल्प का उपयोग करें:

कर्ल -O https://raw.githubusercontent.com/curl/curl/master/README.md

कर्ल -# -सी - -ओ https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

यदि आवश्यक हो, तो आप एक कमांड से कई फ़ाइलें डाउनलोड कर सकते हैं:

कर्ल -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

एक और चीज़ जो प्रशासक के लिए उपयोगी हो सकती है वह यह है कि किसी फ़ाइल को केवल तभी डाउनलोड किया जाए जब उसे संशोधित किया गया हो:

कर्ल -ज़ 21-दिसंबर-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

गति सीमा

आप -Y विकल्प का उपयोग करके डाउनलोड गति को आवश्यक सीमा तक सीमित कर सकते हैं ताकि नेटवर्क पर अधिभार न पड़े:

कर्ल -- सीमा-दर 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

यहां आपको प्रति सेकंड किलोबाइट की संख्या निर्दिष्ट करनी होगी जिसे डाउनलोड किया जा सकता है। यदि गति पर्याप्त नहीं है तो आप कनेक्शन समाप्त भी कर सकते हैं, ऐसा करने के लिए -Y विकल्प का उपयोग करें:

कर्ल -वाई 100 -ओ https://raw.githubusercontent.com/curl/curl/master/README.md

फ़ाइलें स्थानांतरित करना

कर्ल -टी लॉगिन.txt ftp://speedtest.tele2.net/upload/

या आइए जांचें कि फ़ाइल HTTP के माध्यम से भेजी गई है; इसके लिए एक विशेष सेवा है:

कर्ल -T ~/login.txt http://posttestserver.com/post.php

प्रतिक्रिया में, उपयोगिता आपको बताएगी कि आप डाउनलोड की गई फ़ाइल कहां पा सकते हैं।

POST डेटा भेजा जा रहा है

आप POST पद्धति का उपयोग करके न केवल फ़ाइलें, बल्कि कोई भी डेटा भी भेज सकते हैं। आपको याद दिला दूं कि इस पद्धति का उपयोग विभिन्न रूपों का डेटा भेजने के लिए किया जाता है। ऐसा अनुरोध भेजने के लिए -d विकल्प का उपयोग करें। परीक्षण के लिए हम उसी सेवा का उपयोग करेंगे:

कर्ल -डी "फ़ील्ड1=वैल&फ़ाइलल्ड2=वैल1"http://posttestserver.com/post.php

यदि आप इस सबमिशन विकल्प से खुश नहीं हैं, तो आप फॉर्म सबमिट करने का नाटक कर सकते हैं। इसके लिए एक विकल्प है -F:

कर्ल -एफ "पासवर्ड=@पास;टाइप=टेक्स्ट/प्लेन" http://posttestserver.com/post.php

यहां हम फॉर्म के साथ पासवर्ड फ़ील्ड को सादे टेक्स्ट के रूप में पास करते हैं, उसी तरह आप कई पैरामीटर पास कर सकते हैं।

कुकीज़ भेजना और प्राप्त करना

कुकीज़ का उपयोग वेबसाइटों द्वारा उपयोगकर्ता की ओर से कुछ जानकारी संग्रहीत करने के लिए किया जाता है। उदाहरण के लिए, प्रमाणीकरण के लिए यह आवश्यक हो सकता है। आप कर्ल का उपयोग करके कुकीज़ भेज और प्राप्त कर सकते हैं। प्राप्त कुकीज़ को फ़ाइल में सहेजने के लिए, -c विकल्प का उपयोग करें:

कर्ल -सी कुकी.txt http://posttestserver.com/post.php

फिर आप कर्ल कुकी को वापस भेज सकते हैं:

कर्ल -बी कुकी.txt http://posttestserver.com/post.php

हेडर ट्रांसमिशन और विश्लेषण

हमें हमेशा पृष्ठ की सामग्री की आवश्यकता नहीं होती है। कभी-कभी केवल सुर्खियाँ ही दिलचस्प हो सकती हैं। केवल उन्हें प्रदर्शित करने के लिए -I विकल्प है:

कर्ल -I https://site

और -H विकल्प आपको सर्वर पर कई या अधिक भेजने की अनुमति देता है, उदाहरण के लिए, आप यदि-संशोधित-चूंकि हेडर पास कर सकते हैं ताकि पृष्ठ केवल तभी लौटाया जाए जब इसे संशोधित किया गया हो:

कर्ल प्रमाणीकरण

यदि सर्वर को HTTP बेसिक या FTP जैसे सामान्य प्रकार के प्रमाणीकरण में से एक की आवश्यकता होती है, तो कर्ल इस कार्य को बहुत आसानी से संभाल सकता है। प्रमाणीकरण विवरण निर्दिष्ट करने के लिए, बस उन्हें -u विकल्प में एक कोलन द्वारा अलग करके निर्दिष्ट करें:

कर्ल -यू ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

HTTP सर्वर पर प्रमाणीकरण उसी तरह से किया जाएगा।

प्रॉक्सी का उपयोग करना

यदि आपको फ़ाइलें डाउनलोड करने के लिए प्रॉक्सी सर्वर का उपयोग करने की आवश्यकता है, तो यह भी बहुत आसान है। -x विकल्प में प्रॉक्सी सर्वर पता निर्दिष्ट करना पर्याप्त है:

कर्ल -x proxysever.test.com:3128 http://google.co.in

निष्कर्ष

इस लेख में, हमने देखा कि कर्ल का उपयोग कैसे करें, इस उपयोगिता की आवश्यकता क्यों है और इसकी मुख्य क्षमताएं क्या हैं। समानता के बावजूद, वे बहुत अलग हैं। कर्ल लिनक्स कमांड को सर्वर पर विभिन्न क्रियाओं का विश्लेषण और अनुकरण करने के लिए अधिक डिज़ाइन किया गया है, जबकि wget फ़ाइलों को डाउनलोड करने और साइटों को क्रॉल करने के लिए अधिक उपयुक्त है।

यह आलेख cURL जैसे शक्तिशाली टूल के साथ-साथ PHP के लिए लाइब्रेरी के बारे में बात करेगा जो इस टूल - libcurl तक पहुंच प्रदान करता है। यह सब किस लिए है? डेटा ट्रांसफर प्रोटोकॉल का उपयोग करके सर्वर के साथ संचार करना, उदाहरण के लिए, http या ftp। बाकी प्रोटोकॉल हमारे लिए विशेष रूप से दिलचस्प नहीं हैं; यदि कोई इस विषय में गहराई से जाना चाहता है, तो उसे अंग्रेजी भाषा के संसाधनों को खोदना होगा, और इस लेख में मूल बातें और उपयोग के उदाहरण शामिल होंगे।

वास्तव में cURL और libcurl क्या हैं? सामान्य बिंदु

तो, libcurl लाइब्रेरी हमें सर्वर पर डेटा संचारित करने और उससे प्रतिक्रिया प्राप्त करने की क्षमता प्रदान करती है। यह हमें क्या देता है? उपयोगकर्ता के व्यवहार का अनुकरण करने की क्षमता या ! आप बाद के विश्लेषण के लिए पृष्ठों की सामग्री प्राप्त कर सकते हैं, आप सेवा प्रतिक्रिया हेडर प्राप्त कर सकते हैं और प्रोग्रामेटिक रूप से साइटों पर लॉग इन कर सकते हैं, संदेश पोस्ट करने के लिए स्क्रिप्ट बना सकते हैं (उदाहरण के लिए, ट्विटर पर या मंचों पर) या जानकारी। सब कुछ केवल आपकी कल्पना तक ही सीमित है!

डेनवर (डेनवर) पर कर्ल स्थापित करना। libcurl का उपयोग कैसे शुरू करें?

पहली चीज़ जो हमें करनी है वह है लाइब्रेरी स्थापित करना। अपने स्थानीय कंप्यूटर पर मैं अधिकांश नौसिखिया वेबमास्टरों की तरह डेनवर बिल्ड का उपयोग करता हूं, जिनके लिए यह लेख अभिप्रेत है। अनुभवी उपयोगकर्ता जो स्वतंत्र रूप से php+apache+mysql संयोजन स्थापित करते हैं, वे cURL स्थापित करने में सक्षम होंगे, यह मेरे लिए नहीं है कि मैं उन्हें समझाऊं कि यह कैसे किया जाता है;) और हम, शुरुआती, इसे आसान बनाने के लिए तैयार समाधानों का उपयोग करते हैं। इसलिए, libcurl को इस प्रकार स्थापित करें:

  • तैयार एक्सटेंशन पैकेज "PHP5: अतिरिक्त मॉड्यूल" डाउनलोड करें।
  • तदनुसार, हम इसे स्थापित करते हैं। कुछ भी जटिल नहीं, सहमत हूँ :)
  • फ़ाइल को नोटपैड में खोलें (मैं हमेशा नोटपैड++ की अनुशंसा करता हूं): X:/webservers/usr/local/php5/php.ini //जहां X आपकी ड्राइव है जहां वेबसर्वर स्थापित है

    और पदों की शुरुआत में अर्धविराम हटा दें:

    ;एक्सटेंशन=php_curl.dll

  • हम डेनवर सर्वर को पुनः आरंभ कर रहे हैं।

तैयार। लाइब्रेरी की कार्यक्षमता जांचने के लिए, आप phpinfo() फ़ंक्शन को कॉल कर सकते हैं और वहां लाइन ढूंढ सकते हैं: cURL समर्थन सक्षम। आपकी पहली जीत पर बधाई.

कर्ल और पहले चरणों का विवरण

टूल के साथ काम शुरू करने के लिए इसे इनिशियलाइज़ करना होगा। यह अग्रानुसार होगा:

$ch = कर्ल_इनिट();

हमने कर्ल सत्र आरंभीकरण फ़ंक्शन का उपयोग किया। इस मामले में, आप यूआरएल को तुरंत इस तरह सेट कर सकते हैं:

$ch = कर्ल_इनिट("https://site");

और आप इसे बाद में, विकल्पों में कर सकते हैं। विकल्पों को स्थापित करने का क्रम कोई मायने नहीं रखता। यह किसी अन्य फ़ंक्शन द्वारा किया जाता है:

कर्ल_सेटॉप्ट (संसाधन सीएच, स्ट्रिंग विकल्प, मिश्रित मूल्य)

हमने इस फ़ंक्शन का पहला पैरामीटर पहले ही बना लिया है, अर्थात, संसाधन ch, ठीक ऊपर, लेकिन बहुत सारे विकल्प और मान पैरामीटर हैं। मुझे लगता है कि आपको उन सभी को यहां कॉपी-पेस्ट नहीं करना चाहिए, बल्कि केवल फ़ंक्शन के विस्तृत विवरण के लिए एक लिंक देना चाहिए, मुझे आशा है कि कोई भी नाराज नहीं होगा: कर्ल_सेटॉप्ट।

मैं उदाहरण के तौर पर URL का उपयोग करके सेटिंग विकल्प का एक उदाहरण दूंगा:

$url = "https://site"; कर्ल_सेटॉप्ट($ch, CURLOPT_URL,$url);

सेटिंग विकल्पों के कुछ और उदाहरण: आइए, पृष्ठ प्राप्त किए बिना, सर्वर प्रतिक्रिया शीर्षलेख प्राप्त करें:

कर्ल_सेटॉप ($ch, CURLOPT_HEADER, 1); // हेडर पढ़ें cur_setopt($ch, CURLOPT_NOBODY, 1); // मुख्य भाग के बिना केवल हेडर पढ़ें

इसलिए, हमने सत्र प्रारंभ कर दिया है, हमें आवश्यक पैरामीटर सेट कर दिए हैं, अब हम परिणामी अनुरोध निष्पादित करते हैं, सत्र बंद करते हैं और परिणाम प्रदर्शित करते हैं:

$परिणाम = कर्ल_एक्सईसी($ch); कर्ल_क्लोज़($ch); प्रतिध्वनि $परिणाम;

परिणामस्वरूप, हमें libcurl लाइब्रेरी का उपयोग करने का पहला पूर्णतः कार्यशील उदाहरण मिलता है:

$ch = कर्ल_इनिट(); $url = "https://site"; कर्ल_सेटॉप्ट($ch, CURLOPT_URL,$url); कर्ल_सेटोप्ट($ch, CURLOPT_HEADER, 1); // हेडर पढ़ें cur_setopt($ch, CURLOPT_NOBODY, 1); // मुख्य भाग के बिना केवल हेडर पढ़ें $result = cur_exec($ch); कर्ल_क्लोज़($ch); प्रतिध्वनि $परिणाम;

मुझे आशा है कि यह कैसे काम करता है, यह स्पष्ट है, क्योंकि हमने प्रत्येक चरण को अलग से देखा :) परिणामस्वरूप, हमें सर्वर से एक HTTP प्रतिक्रिया हेडर प्राप्त होता है, जिसके बीच बातचीत के सभी चरणों को बेहतर ढंग से समझने के लिए हम निश्चित रूप से नीचे विश्लेषण करेंगे। ब्राउज़र और सर्वर:

HTTP/1.1 200 ओके सर्वर: nginx/1.2..php 1

आश्चर्यजनक! हमने सर्वर से प्रतिक्रिया हेडर प्राप्त किया और कार्रवाई में लाइब्रेरी का परीक्षण किया। यह हमारे लिए किस प्रकार उपयोगी है? क्योंकि अब आप कर्ल के साथ काम करते समय क्रियाओं के क्रम की मोटे तौर पर कल्पना कर सकते हैं:

  • आरंभिक सत्र (curl_init)
  • हमें आवश्यक विकल्प सेट करें (curl_setopt)
  • प्राप्त अनुरोध निष्पादित करें (curl_exec)
  • अंतिम सत्र (curl_close)

HTTP अनुरोध हेडर संरचना

उदाहरण के लिए, मैंने ya.ru पृष्ठ की ओर रुख किया और उत्पन्न ब्राउज़र अनुरोध और सर्वर से प्राप्त प्रतिक्रिया को देखा। वे यहाँ हैं:
अनुरोध
GET / HTTP/1.1 - हम पृष्ठ को / पर प्राप्त करने का प्रयास कर रहे हैं, अर्थात, फ़ोल्डर के मूल में स्थित मुख्य पृष्ठ। हम प्रोटोकॉल संस्करण 1.1 का उपयोग करते हैं।
उपयोगकर्ता-एजेंट: ओपेरा/9.80 (विंडोज एनटी 6.1; WOW64) प्रेस्टो/2.12.388 संस्करण/12.14— हम अपना परिचय सर्वर से कराते हैं, हम ओपेरा ब्राउज़र हैं।
होस्ट: ya.ru - अनुरोधित संसाधन का डोमेन नाम।
स्वीकार करें: टेक्स्ट/एचटीएमएल, एप्लीकेशन/एक्सएमएल;क्यू=0.9, एप्लीकेशन/एक्सएचटीएमएल+एक्सएमएल, इमेज/पीएनजी, इमेज/वेबपी, इमेज/जेपीईजी, इमेज/जीआईएफ, इमेज/एक्स-एक्सबिटमैप, */*;क्यू=0.1- स्वीकार्य संसाधन प्रारूपों की सूची।
स्वीकार-भाषा: ru-RU,ru;q=0.9,en;q=0.8- समर्थित भाषाओं की सूची.
स्वीकार-एन्कोडिंग: gzip, डिफ्लेट- समर्थित एन्कोडिंग विधियाँ।
कुकी: yandexuid=ХХХХХ - कुकीज़, यदि आवश्यक हो।
कनेक्शन: जीवित रखें - कृपया कनेक्शन न तोड़ें और संपर्क में बने रहें।
उत्तर
HTTP/1.1 200 ठीक है - हमें कोड 200 के साथ एक प्रतिक्रिया मिलती है, जिसका मतलब है कि सब कुछ ठीक है।
सर्वर: nginx - सर्वर ने अपना परिचय दिया - यह nginx है।
दिनांक: रविवार, 10 मार्च 2013 14:10:50 जीएमटी- सर्वर पर वर्तमान दिनांक और समय।
सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; वर्णसेट=यूटीएफ-8-सामग्री प्रकार और एन्कोडिंग.
कनेक्शन: बंद करें - सर्वर हमारे साथ स्थायी कनेक्शन नहीं रखना चाहता, इसलिए वह इसे तुरंत बंद कर देता है। अगले अनुरोध के लिए एक नया कनेक्शन स्थापित किया जाएगा।
कैश-नियंत्रण: नो-कैश, नो-स्टोर, अधिकतम-आयु = 0, पुनः सत्यापित करना होगा- कैशिंग प्रबंधन. इस स्थिति में यह अक्षम है.
समाप्ति: रविवार, 10 मार्च 2013 14:10:50 जीएमटी- सत्र की अपेक्षित समाप्ति की तिथि। हमारे मामले में, यह शुरुआती समय के साथ मेल खाता है, क्योंकि प्रसंस्करण के तुरंत बाद सर्वर ने इसे तुरंत बंद कर दिया।
अंतिम-संशोधित: रविवार, 10 मार्च 2013 14:10:50 GMT- अंतिम संशोधन का समय.
सामग्री-एन्कोडिंग: gzip - जानकारी एन्कोडिंग की विधि।
HTTP अनुरोध हेडर में पाए जाने वाले सभी मापदंडों की पूरी सूची विकिपीडिया पर पाई जा सकती है।
अब आपको अंदाजा हो गया है कि आपका ब्राउज़र और वेब सर्वर एक दूसरे से कैसे संवाद करते हैं। यह जानना और समझना बहुत उपयोगी है, क्योंकि हम libcurl लाइब्रेरी का उपयोग करके ब्राउज़र क्रियाओं का अनुकरण करने का प्रयास करेंगे। आगे बढ़ो।

पुस्तकालय के साथ काम करने का उदाहरण

मेरा मानना ​​है कि जब कुछ सामान्य बिंदु पहले से ही स्पष्ट हैं और सब कुछ स्पष्ट प्रतीत होता है, तो अभ्यास के लिए आगे बढ़ने और उदाहरण का उपयोग करके अपने कौशल को निखारने का समय आ गया है। व्यक्तिगत रूप से, मेरे हाथ हमेशा व्यवहार में सब कुछ आज़माने के लिए उत्सुक रहते हैं :)

चूंकि कर्ल पार्सर्स के लिए बहुत अच्छा है, आइए पेज कोड को उसके पते से प्राप्त करने के कार्य पर विचार करें। इस मामले में, यदि कुछ गलत होता है तो आउटपुट शीर्षक, पृष्ठ सामग्री और यहां तक ​​कि त्रुटि कोड के साथ एक सरणी होगी।

फ़ंक्शन get_web_page($url) ($uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; $ch = cur_init($url); cur_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // वेब पेज कर्ल_सेटॉप्ट ($ch, CURLOPT_HEADER, 0) लौटाता है; // हेडर कर्ल_सेटॉप ($ch, CURLOPT_FOLLOWLOCATION, 1) नहीं लौटाता; // कर्ल_सेटॉप्ट ($ch, CURLOPT_ENCODING, "" को रीडायरेक्ट करता है); // प्रक्रियाएं सभी एन्कोडिंग कर्ल_सेटॉप्ट($ch, CURLOPT_USERAGENT, $uagent); // यूजरएजेंट कर्ल_सेटॉप($ch, CURLOPT_CONNECTTIMEOUT, 120); // कनेक्शन टाइमआउट कर्ल_सेटॉप($ch, CURLOPT_TIMEOUT, 120); // रिस्पॉन्स टाइमआउट कर्ल_सेटॉप($ch, CURLOPT_MAXREDIRS) , 10) ch); $header["errno"] = $err; $header["errmsg"] = $errmsg; $header["content"] = $content; return $header; )

इनपुट पैरामीटर:
यूआरएल - पेज या साइट का पता.
आउटपुट पैरामीटर मान (तीन तत्वों वाली सरणी):
हेडर['errno'] - अगर कुछ गलत हुआ, तो यहां एक त्रुटि कोड होगा।
हेडर['errmsg'] - त्रुटि टेक्स्ट यहां दिखाई देगा।
शीर्षलेख['सामग्री'] - वास्तविक पृष्ठ\फ़ाइल\छवि, आदि।

उदाहरण के लिए, हम फ़ंक्शन का उपयोग इस प्रकार करते हैं:

$परिणाम = get_web_page("https://ya.ru"); अगर (($परिणाम["errno"] != 0)||($परिणाम["http_code"] != 200)) ( echo $result["errmsg"]; ) अन्यथा ( $पेज = $परिणाम["सामग्री "]; प्रतिध्वनि $पेज; )

सब कुछ त्रुटियों के बिना होना चाहिए और आपको $page वेरिएबल में पेज कोड प्राप्त होगा। यदि हम अस्तित्वहीन पृष्ठ yaaaaaaa.ru को प्राप्त करने का प्रयास करते हैं, तो हमें त्रुटि मिलेगी:

होस्ट का समाधान नहीं हो सका: yaaaaaa.ru; मेज़बान नहीं मिला

सब कुछ सही ढंग से और खूबसूरती से संसाधित किया गया है :)
फिर आप पेज कोड के साथ जो चाहें कर सकते हैं, उदाहरण के लिए, इसे रेगुलर एक्सप्रेशन के साथ पार्स करना। लेकिन यह सब अगले पाठों में है, लेकिन अभी यहीं रुकते हैं।

आपके ब्राउज़र में जावास्क्रिप्ट अवरुद्ध है. कृपया साइट को कार्यशील बनाने के लिए जावास्क्रिप्ट सक्षम करें!

कर्ल

PHP libcurl का समर्थन करता है, जो डैनियल स्टेनबर्ग द्वारा बनाई गई एक लाइब्रेरी है जो आपको विभिन्न प्रकार के सर्वर और प्रोटोकॉल से जुड़ने की अनुमति देती है।
libcurl वर्तमान में http, https, ftp, गोफर, टेलनेट, dict, फ़ाइल और ldap प्रोटोकॉल का समर्थन करता है।
libcurl HTTPS प्रमाणपत्र, HTTP POST, HTTP PUT, FTP अपलोड (यह ftp PHP एक्सटेंशन के साथ भी किया जा सकता है), HTTP फॉर्म-आधारित अपलोड, प्रॉक्सी, कुकीज़ और उपयोगकर्ता + पासवर्ड प्रमाणीकरण का भी समर्थन करता है।

ये फ़ंक्शन PHP 4.0.2 में पेश किए गए थे।

कर्ल_इनिट

कर्ल_इनिट - एक कर्ल सत्र प्रारंभ करता है।

विवरण

संसाधन कर्ल_इनिट()

समारोह कर्ल_इनिट()एक नया सत्र आरंभ करता है और , और फ़ंक्शंस में उपयोग के लिए एक CURL हैंडल लौटाता है। यदि वैकल्पिक पैरामीटर यूआरएलप्रदान किया गया है, तो CURLOPT_URL विकल्प इस पैरामीटर का मान प्राप्त करेगा। आप इसे का उपयोग करके मैन्युअल रूप से इंस्टॉल कर सकते हैं।

कर्ल_सेटॉप

कर्ल_सेटॉप्ट - कर्ल ट्रांसफर/ट्रांसफर के लिए विकल्प सेट करता है।

विवरण

बूल कर्ल_सेटॉप(संसाधन सीएच, स्ट्रिंग विकल्प, मिश्रित मूल्य)

समारोह कर्ल_सेटॉप()पैरामीटर द्वारा पहचाने गए CURL सत्र के लिए विकल्प सेट करता है चौधरी. पैरामीटर विकल्पवह विकल्प है जिसे आप सेट करना चाहते हैं, और कीमतयह विकल्प मान है विकल्प .

पैरामीटर कीमतनिम्नलिखित विकल्पों के लिए लंबा होना चाहिए (पैरामीटर द्वारा निर्दिष्ट)। विकल्प):

  • CURLOPT_INFILESIZE: यदि आप किसी फ़ाइल को किसी दूरस्थ साइट पर अपलोड कर रहे हैं, तो इस विकल्प का उपयोग PHP को यह बताने के लिए किया जाना चाहिए कि अपेक्षित इनफ़ाइल आकार क्या होगा।
  • CURLOPT_VERBOSE: यदि आप चाहते हैं कि CURL सभी क्रियाओं की रिपोर्ट करे तो इस विकल्प को गैर-शून्य मान पर सेट करें।
  • CURLOPT_HEADER: यदि आप हेडर को आउटपुट में शामिल करना चाहते हैं तो इस विकल्प को गैर-शून्य मान पर सेट करें।
  • CURLOPT_NOPROGRESS: यदि आप नहीं चाहते कि PHP CURL स्थानांतरण प्रगति संकेतक प्रदर्शित करे तो इस विकल्प को गैर-शून्य मान पर सेट करें। (PHP स्वचालित रूप से इस विकल्प को गैर-शून्य मान पर सेट करता है; आपको केवल डिबगिंग करते समय इसे बदलने की आवश्यकता है।)
  • CURLOPT_NOBODY: यदि आप नहीं चाहते कि बॉडी को आउटपुट में शामिल किया जाए तो इस विकल्प को गैर-शून्य मान पर सेट करें।
  • CURLOPT_FAILONERROR: यदि आप चाहते हैं कि लौटाया गया HTTP कोड 300 से अधिक हो तो PHP चुपचाप बाहर निकल जाए, तो इस विकल्प को गैर-शून्य मान पर सेट करें। डिफ़ॉल्ट रूप से, पृष्ठ सामान्य रूप से अनदेखा किए गए कोड के साथ वापस आ जाता है।
  • CURLOPT_UPLOAD: यदि आप चाहते हैं कि PHP अपलोड के लिए फ़ाइल तैयार करे तो इस विकल्प को गैर-शून्य मान पर सेट करें।
  • CURLOPT_POST: यदि आप चाहते हैं कि PHP नियमित HTTP POST करे तो इस विकल्प को गैर-शून्य मान पर सेट करें। यह पोस्ट सामान्य रूप एप्लिकेशन/x-www-form-urlencoded में है, जो आमतौर पर HTML फॉर्म द्वारा उपयोग किया जाता है।
  • CURLOPT_FTPLISTONLY: इस विकल्प को गैर-शून्य मान पर सेट करें और PHP FTP निर्देशिका नामों को सूचीबद्ध करेगा।
  • CURLOPT_FTPAPPEND: इस विकल्प को गैर-शून्य मान पर सेट करें और PHP इसे ओवरराइट करने के बजाय दूरस्थ फ़ाइल में जोड़ देगा।
  • CURLOPT_NETRC: इस विकल्प को गैर-शून्य मान पर सेट करें और जिस दूरस्थ साइट से आप कनेक्ट कर रहे हैं, उसके लिए आपका उपयोगकर्ता नाम और पासवर्ड ढूंढने के लिए PHP आपकी ~./netrc फ़ाइल को स्कैन करेगा।
  • CURLOPT_FOLLOWLOCATION: किसी भी "Location: " हेडर का अनुसरण करने के लिए इस विकल्प को गैर-शून्य मान पर सेट करें जिसे सर्वर HTTP हेडर के हिस्से के रूप में भेजता है (ध्यान दें कि यह रिकर्सन है, PHP भेजे गए सभी "Location: " -हेडर" का अनुसरण करेगा। )
  • CURLOPT_PUT: फ़ाइल को HTTP PUT करने के लिए इस विकल्प को गैर-शून्य मान पर सेट करें। PUT के लिए फ़ाइल को CURLOPT_INFILE और CURLOPT_INFILESIZE का उपयोग करके सेट किया जाना चाहिए।
  • CURLOPT_MUT: इस विकल्प को गैर-शून्य मान पर सेट करें और PHP CURL फ़ंक्शंस के संबंध में छिपा हुआ काम करेगा।
  • CURLOPT_TIMEOUT: एक लंबे समय को एक पैरामीटर के रूप में पास करें जिसमें सेकंड में अधिकतम समय होता है जिसे आप कर्ल फ़ंक्शन को चलाने की अनुमति देते हैं।
  • CURLOPT_CONNECTTIMEOUT: एक लंबे समय को एक पैरामीटर के रूप में पास करें जिसमें अधिकतम समय, सेकंड में होता है, जिसे आप कनेक्ट करने का प्रयास करते समय प्रतीक्षा करने की अनुमति देते हैं। हमेशा के लिए प्रतीक्षा करने के लिए 0 का उपयोग करें.
  • CURLOPT_LOW_SPEED_LIMIT: एक लंबे समय को एक पैरामीटर के रूप में पास करें जिसमें प्रति सेकंड बाइट्स में स्थानांतरण गति शामिल है, जिसके नीचे स्थानांतरण निष्पादन के दौरान CURLOPT_LOW_SPEED_TIME, सेकंड में चलना चाहिए, ताकि PHP इसे बहुत धीमा मान सके और इसे रोक सके।
  • CURLOPT_LOW_SPEED_TIME: एक लंबे समय को एक पैरामीटर के रूप में पास करें जिसमें सेकंड में समय शामिल है जिसके नीचे स्थानांतरण को PHP के लिए CURLOPT_LOW_SPEED_LIMIT चलाते समय चलना चाहिए ताकि इसे बहुत धीमा माना जा सके और इसे निरस्त किया जा सके।
  • CURLOPT_RESUME_FROM: लंबे समय तक एक पैरामीटर के रूप में पास करें जिसमें बाइट ऑफसेट शामिल है जिस पर स्थानांतरण शुरू होना चाहिए।
  • CURLOPT_SSLVसंस्करण: एक लंबे समय को एक पैरामीटर के रूप में पास करें जिसमें उपयोग करने के लिए एसएसएल संस्करण (2 या 3) शामिल है। डिफ़ॉल्ट रूप से, PHP इसे स्वयं निर्धारित करने का प्रयास करता है, हालाँकि कुछ मामलों में आपको इसे मैन्युअल रूप से सेट करना आवश्यक होता है।
  • CURLOPT_SSL_VERIFYHOST: लंबे समय तक पास करें यदि CURL को SSL हैंडशेक में पीयर सर्टिफिकेट के सामान्य नाम की जांच करनी चाहिए। 1 का मान इंगित करता है कि हमें एक सामान्य/सामान्य नाम के अस्तित्व की जांच करनी चाहिए, 2 का मान इंगित करता है कि हमें यह सुनिश्चित करना चाहिए कि यह प्रदान किए गए होस्टनाम से मेल खाता है।
  • CURLOPT_TIMECONDITION: एक long को एक पैरामीटर के रूप में पास करें जो यह निर्धारित करता है कि CURLOPT_TIMEVALUE का व्यवहार कैसे किया जाता है। आप इस पैरामीटर को TIMECOND_IFMODSINCE या TIMECOND_ISUNMODSINCE पर सेट कर सकते हैं। यह केवल HTTP के लिए काम करता है.
  • CURLOPT_TIMEVALUE: एक लंबे समय को एक पैरामीटर के रूप में पास करें, जो 1 जनवरी, 1970 से सेकंड में समय है। इस समय का उपयोग CURLOPT_TIMEVALUE विकल्प द्वारा निर्दिष्ट अनुसार किया जाता है, या डिफ़ॉल्ट TIMECOND_IFMODSINCE का उपयोग किया जाएगा।
  • CURLOPT_रिटर्नट्रांसफर: यदि आप चाहते हैं कि CURL प्राप्त जानकारी को सीधे प्रिंट करने के बजाय सीधे लौटाए तो एक गैर-शून्य मान पास करें।

पैरामीटर कीमतनिम्नलिखित पैरामीटर मानों के लिए एक स्ट्रिंग होनी चाहिए विकल्प :

निम्नलिखित विकल्प एक फ़ाइल डिस्क्रिप्टर की अपेक्षा करते हैं, जो फ़ंक्शन का उपयोग करके प्राप्त किया जाता है fopen() :

  • CURLOPT_फ़ाइल: वह फ़ाइल जहां आपके स्थानांतरण का आउटपुट रखा जाना चाहिए, डिफ़ॉल्ट रूप से वह STDOUT है।
  • CURLOPT_INFILE: वह फ़ाइल जिससे आपका स्थानांतरण इनपुट आता है।
  • CURLOPT_WRITEHEADER: आउटपुट के हेडर भाग को रिकॉर्ड करने के लिए फ़ाइल।
  • CURLOPT_STDERR: त्रुटियों को रिकॉर्ड करने के लिए stderr के बजाय फ़ाइल।

पैरामीटर कीमत लंबा राइट_कॉलबैक (संसाधन सीएच, स्ट्रिंग डेटा)(... रिटर्न स्ट्रलेन($डेटा);) विकल्प :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

पैरामीटर कीमतनिम्न प्रपत्र का एक फ़ंक्शन होना चाहिए स्ट्रिंग read_callback (संसाधन ch, संसाधन fd, लंबी लंबाई)()निम्नलिखित पैरामीटर मानों के लिए विकल्प :

  • CURLOPT_READFUNCTION: .

कर्ल_एक्सईसी

कर्ल_एक्सईसी - एक कर्ल सत्र निष्पादित करता है।

विवरण

बूल कर्ल_एक्सईसी(संसाधन सीएच)

आपके द्वारा CURL सत्र आरंभ करने के बाद इस फ़ंक्शन को कॉल किया जाना चाहिए और उस सत्र के लिए सभी विकल्प पहले ही सेट किए जा चुके हैं। इसका उद्देश्य बस एक पूर्वनिर्धारित कर्ल सत्र (पैरामीटर में निर्दिष्ट) निष्पादित करना है चौधरी).

कर्ल_बंद करें

कर्ल_क्लोज़ - कर्ल सत्र बंद करता है।

विवरण

खालीपन कर्ल_बंद करें(संसाधन सीएच)

यह फ़ंक्शन CURL सत्र को बंद कर देता है और सभी संसाधनों को रिलीज़ कर देता है। कर्ल हैंडल चौधरीभी हटा दिया गया है.

कर्ल_एरनो

कर्ल_एरनो - अंतिम त्रुटि संख्या वाला पूर्णांक लौटाता है।

विवरण

उदाहरण 1: एक नया कर्ल सत्र प्रारंभ करना और एक वेब पेज पुनर्प्राप्त करना।
उदाहरण 2: example.com प्राप्त करने के लिए PHP के CURL मॉड्यूल का उपयोग करना
उदाहरण 3: PHP के कर्ल का उपयोग करके यूआरएल पहुंच की जांच करना
उदाहरण 4: PHP के CURL का उपयोग करके हेडर को मुख्य भाग से अलग करना
उदाहरण 5: PHP के कर्ल का उपयोग करके एक रेफरल यूआरएल निर्धारित करना
समस्या: cur_setopt($ch,FOLLOW_LOCATION,1); त्रुटि: समाधान open_आधारित और सुरक्षित_मोड के साथ समस्या: एक फ़ंक्शन पहले से ही किसी व्यक्ति द्वारा समाधान n 2 विकसित किया गया है: वही फ़ंक्शन, संशोधित, मेरे लिए बहुत अच्छा काम करता है।= $curl_max_loops) ($curl_loops = 0; गलत वापसी; ) कर्ल_setopt($ch, CURLOPT_HEADER, सत्य); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, सत्य); $डेटा = कर्ल_एक्सईसी($ch); सूची($हेडर, $डेटा) = विस्फोट('\n\n', $डेटा, 2); $http_code = cur_getinfo($ch, CURLINFO_HTTP_CODE); यदि ($http_code == 301 || $http_code == 302) ($matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop($matches))); यदि (!$url) ( //url को $curl_loops = 0 पर रीडायरेक्ट करने के लिए संसाधित नहीं किया जा सका; $data लौटाएं; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; यदि (!$url["स्कीम"]) $url["स्कीम"] = $last_url["स्कीम"]; यदि (!$url["host"]) $url["host"] = $last_url[ "होस्ट"]; यदि (!$url["पथ"]) $url["पथ"] = $last_url["पथ"]; $new_url = $url["स्कीम"] . "://" . $ url["host"] . $url["path"] . ($url["query"]?"?".$url["query"]:""); cur_setopt($ch, CURLOPT_URL, $new_url) ; डीबग ("रीडायरेक्टिंग टू", $new_url); रिटर्न cur_redir_exec($ch); ) अन्य ($curl_loops=0; रिटर्न $डेटा; ) ) ?>
बिना FOLLOW_LOCATION के इस फ़ंक्शन का उपयोग करें और काम करना चाहिए। समस्या यह थी कि जब आप उस लाइन पर पहुंचते हैं जहां आप डेटा लौटाते हैं यदि http_code 301 oe 302 से भिन्न था, तो $data में अप्रचलित जानकारी है या कोई नहीं है। तो $debbbb काम करता है।
उदाहरण 6: CURL PHP का उपयोग करके हेडर से कुकी को पार्स करना
कभी-कभी आप सर्वर php-सेटिंग्स के कारण CURLOPT_COOKIEJAR और CURLOPT_COOKIEFILE का उपयोग नहीं कर सकते हैं (वे कहते हैं कि आप इन विकल्पों का उपयोग करके सर्वर से कोई भी फाइल ले सकते हैं)। यहां समाधान है 1) CURLOPT_FOLLOWLOCATION का उपयोग न करें 2) कर्ल_setopt($ch, का उपयोग करें) CURLOPT_HEADER, 1) 3) हेडर कुकीज़ से इस तरह प्राप्त करें: preg_match_all("|सेट-कुकी: (.*);|U", $सामग्री, $परिणाम); $कुकीज़ = विस्फोट(";", $परिणाम); 4) उन्हें cur_setopt($ch, CURLOPT_COOKIE, $cookies); का उपयोग करके सेट करें;
उदाहरण 7: CURL PHP का उपयोग करके हेडर से कुकी को पार्स करना
जैसा कि येवगेन ने पहले उल्लेख किया है कि कभी-कभी हम CURLOPT_COOKIEJAR और CURLOPT_COOKIEFILE का उपयोग नहीं कर सकते हैं। नीचे एक हेडर कॉलबैक फ़ंक्शन है जो मैंने जनवरी में लिखा था जो आपको कर्ल अनुरोधों के बीच कुकीज़ बनाए रखने की सुविधा देता है। कुकीज़ को पुनर्निर्देशन के दौरान भी सभी अनुरोधों के दौरान $ch में जोड़ा जाता है, ताकि आप ऐसा कर सकें CURLOPT_FOLLOWLOCATION के साथ इसका उपयोग करें। यहां कोड है: फ़ंक्शन read_header($ch, $string) (वैश्विक $स्थान; #स्थान का ट्रैक रखें/वैश्विक $cookiearr को पुनर्निर्देशित करता है; #कुकीज़ को यहां वैश्विक $ch संग्रहीत करें; # ^फ़ंक्शन पैरामीटर को ओवरराइड करता है $ch # यह ठीक है क्योंकि हमें वैश्विक $ch को # नई कुकीज़ $length = strlen($string); if(!strncmp($string, "Location:", 9)) के साथ # अपडेट करने की आवश्यकता है ( #का ट्रैक रखें अंतिम रीडायरेक्ट $स्थान = ट्रिम(substr($स्ट्रिंग, 9, -1)); ) यदि(!strncmp($string, "सेट-कुकी:", 11)) ( #कुकी प्राप्त करें $cookiestr = ट्रिम(substr( $स्ट्रिंग, 11, -1)); $कुकी = विस्फोट(";", $कुकीस्ट्र); $कुकी = विस्फोट("=', $कुकी); $कुकीनाम = ट्रिम(array_shift($कुकी)); $कुकीअर [$कुकीनाम] = ट्रिम(इम्प्लोड("=', $कुकी)); ) $कुकी = ""; if(trim($string) == "") ( #केवल हेडर foreach के अंत में निष्पादित करें ($key=>$value के रूप में $cookiearr) ( ​​$कुकी .= "$key=$value; "; ) कर्ल_सेटोप्ट ($ ch, CURLOPT_COOKIE, $कुकी); ) वापसी $length; ) कर्ल_सेटोप्ट($ch, CURLOPT_HEADERFUNCTION, "read_header"); यह कोड मानता है कि आप $ch को हर बार आरंभ किए बिना पुन: उपयोग करेंगे (शुरुआत में केवल एक बार cur_init पर कॉल करें)। यदि आपको अपने कोड में किसी भी बिंदु पर $ch को फिर से प्रारंभ करने की आवश्यकता है तो आप $cookiearr में वर्तमान में संग्रहीत कुकीज़ तक पहुंच सकते हैं और उन्हें नए $ch में शामिल कर सकते हैं। मैंने इस फ़ंक्शन को रेगुलर एक्सप्रेशन के साथ पर्याप्त अनुभव होने से पहले लिखा था, इसलिए आपको यहां कोई प्रीग_मैच कॉल नहीं मिलेगी। मैंने इस कोड का काफी समय तक उपयोग किया है और बिना किसी समस्या के जीमेल, याहू, हॉटमेल, एओएल आदि तक पहुंच बनाई है, जहां मुझे करना था। मैं जो खोज रहा था उस तक पहुंचने से पहले लॉगिन और कुछ पृष्ठों से गुजरें।
उदाहरण 8: CURL PHP का उपयोग करके हेडर लोड हैंडलर सेट करना
कर्ल का उपयोग करते हुए, मुझे एक तृतीय-पक्ष स्क्रिप्ट को कॉल करने की आवश्यकता थी जो पुनर्प्राप्त डेटा को अनुलग्नक के रूप में फिर से पास करने के लिए बाइनरी डेटा को अनुलग्नक के रूप में लौटा रही थी। समस्या यह थी कि तृतीय-पक्ष स्क्रिप्ट कभी-कभी HTTP त्रुटियाँ लौटाती थी और मैं ऐसे मामलों में शून्य-लंबाई अनुलग्नक को पारित करने से बचना चाहता था। CURLOPT_FAILONERROR और CURLOPT_HEADERFUNCTION कॉलबैक का उपयोग करने के संयोजन ने तृतीय-पक्ष स्क्रिप्ट HTTP त्रुटियों को बड़े करीने से संसाधित करने में मदद की: फ़ंक्शन कर्लहेडरकॉलबैक($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) ( हेडर($strHeader) ); हेडर('सामग्री-विस्थापन: अनुलग्नक; फ़ाइल नाम='फ़ाइल-नाम.ज़िप''); ) रिटर्न स्ट्रलेन($strHeader); ) $resURL = कर्ल_इनिट('http://site/'); कर्ल_सेटॉप ($resURL, CURLOPT_BINARYTRANSFER, 1); कर्ल_सेटॉप्ट($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); कर्ल_सेटॉप्ट($resURL, CURLOPT_FAILONERROR, 1); कर्ल_एक्सईसी($resURL); $intReturnCode = cur_getinfo($resURL, CURLINFO_HTTP_CODE); कर्ल_क्लोज़($resURL); यदि ($intReturnCode != 200) (प्रिंट करें "कोड के साथ त्रुटि:"। $intReturnCode; )
उदाहरण 9. किसी पृष्ठ को फ़ाइल में सहेजना और CURL PHP का उपयोग करके स्थानांतरण दर की गणना करना
WritePageToFile('http://es.php.net', 'es.php.net.txt'); फ़ंक्शन WritePageToFile($sHTMLpage, $sTxtfile) ($sh = cur_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); cur_setopt($sh, CURLOPT_FILE, $hFile); cur_setopt($sh, CURLOPT_HEADER, 0)
"; प्रतिध्वनि "औसत गति डाउनलोड =="। $sAverageSpeedDownload। " 
"; प्रतिध्वनि "औसत गति अपलोड =="। $sAverageSpeedUpload।"
"; प्रतिध्वनि "
"; $aCURLinfo = cur_getInfo($sh); print_r($aCURLinfo); इको "
"; कर्ल_क्लोज़ ($sh); FClose ($hFile); इको "( फ़ाइल ".$sTxtfile."" को होस्टिंग के उसी पथ में देखें।" " जहां यह स्क्रिप्ट PHP है).
"; }
उदाहरण 9. एसएसएल कनेक्शन (https) के माध्यम से एक पेज प्राप्त करना
$ch=curl_init('https://site'); कर्ल_सेटॉप ($ch, CURLOPT_HEADER, 0); कर्ल_सेटोप्ट($ch, CURLOPT_RETURNTRANSFER, 1); // त्रुटि को अक्षम करें "SSL प्रमाणपत्र समस्या, सत्यापित करें कि CA प्रमाणपत्र ठीक है" cur_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // त्रुटि को अक्षम करें "SSL: प्रमाणपत्र विषय का नाम "hostname.ru" लक्ष्य होस्ट नाम "123.123" से मेल नहीं खाता" cur_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $आउट=curl_exec($ch); //$http_code = cur_getinfo($ch, CURLINFO_HTTP_CODE); //echo "http_code='.$http_code,', err='.curl_error($ch); कर्ल_क्लोज़($ch);
उदाहरण 10: कर्ल में सत्र और कुकीज़ का उपयोग करना
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init('http://site'); कर्ल_सेटोप्ट($कर्ल, CURLOPT_RETURNTRANSFER, 1); कर्ल_सेटॉप($कर्ल, CURLOPT_COOKIEJAR, $कुकी_फ़ाइल नाम);//प्राप्त कुकीज़ को एक फ़ाइल में सहेजें कर्ल_सेटॉप($कर्ल, CURLOPT_COOKIEFILE, $कुकी_फ़ाइलनाम); // प्राधिकरण के दौरान प्राप्त कुकीज़ को सर्वर पर भेजें $out=curl_exec($curl);
उदाहरण 11: कर्ल में फ़ाइल अपलोड और बहुआयामी सरणी। CURLOPT_POSTFIELDS + कर्लफ़ाइल

यदि आपको POST अनुरोध में एक बहुआयामी सरणी और एक फ़ाइल भेजने की आवश्यकता है, तो आपको एक अघुलनशील समस्या का सामना करना पड़ेगा। यदि आप CURLOPT_POSTFIELDS के लिए एक बहुआयामी सरणी पास करते हैं, तो दूसरा स्तर स्ट्रिंग "ऐरे" के रूप में पारित किया जाएगा। यदि आप http_build_query का उपयोग करके कनवर्ट करते हैं, तो आप फ़ाइल को स्थानांतरित नहीं कर पाएंगे।

नीचे कर्ल के लिए फ़ाइल लोडिंग के साथ दो-आयामी सरणी एन्कोडिंग के लिए एक फ़ंक्शन है, जो PHP 5.3, PHP 5.4 और PHP 5.6 के दोनों पुराने संस्करणों में काम करेगा।

/** जटिल अनुक्रमणिका का उपयोग करके एक बहु-आयामी सरणी को एक-आयामी सरणी में परिवर्तित करता है और कर्ल में उपयोग के लिए उपसर्ग में @ को कर्लफ़ाइल से बदल देता है * @param $inputArray * @param string $inputKey * @return array $requestVars = array ("आईडी" => सरणी(1, 2,"आईडी"=>1234), "नाम" => "लॉग", "लॉगफ़ाइल" => "@/tmp/test.log"); हमें मिलता है: ["आईडी"]=> पूर्णांक(1) ["आईडी"]=> पूर्णांक(2) ["आईडी"]=> पूर्णांक(1234) ["नाम"]=> स्ट्रिंग(3) "लॉग" ["लॉगफ़ाइल"]=> स्ट्रिंग(13) "/tmp/test.log") */ function ConvertToStringArray($inputArray, $inputKey='') ( $resultArray=; foreach ($inputArray as $key => $value ) ( $tmpKey = (बूल)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) अन्यथा ($value = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? नया कर्लफाइल(ltrim($value, "@")) : $value; ) अन्यथा ( $resultArray[$tmpKey ] = $मूल्य; ) ) रिटर्न $resultArray; ) // चेक $requestVars = array("id" => array(1, 2,"id"=>1234), "नाम" => "लॉग", "लॉगफ़ाइल " => "@/tmp/test.log"); $ch = कर्ल_इनिट(); कर्ल_सेटॉप्ट($ch, CURLOPT_URL, "साइट"); कर्ल_सेटोप्ट($ch, CURLOPT_POST, 1); कर्ल_सेटॉप्ट($ch, CURLOPT_POSTFIELDS, ConvertToStringArray($requestVars)); $res = कर्ल_exec($ch); कर्ल_क्लोज़($ch); कर्ल का उपयोग करने के अनुप्रयोग उदाहरण