PHP CURL - գործառույթներ և օգտագործման օրինակներ: cURL-ի առաջադեմ օգտագործումը PHP Curl հրամանի տողի ընտրանքներում

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

curl_setopt — Սահմանում է պարամետր CURL նիստի համար

Պարամետրերի ցանկ

cURL բռնակ, որը ստացվել է curl_init ().

Սահմանվելիք պարամետր CURLOPT_XXX.

Օպցիոնի պարամետրի արժեքը.

բուլ:

Պարամետր Նշումներ
CURLOPT_AUTOREFERER ՃԻՇՏդաշտի ավտոմատ կարգավորումների համար Ուղղորդող:վերահղված հարցումներում Գտնվելու վայրը:.
CURLOPT_BINARYTRANSFER ՃԻՇՏհաստատուն օգտագործելիս չմշակված պատասխանը վերադարձնելու համար CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ. PHP 5.1.3-ի դրությամբ այս տարբերակն այլևս չի պահանջվում. չմշակված արդյունքը միշտ վերադարձվում է տարբերակն օգտագործելիս: CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ.
CURLOPT_COOKIESESSION ՃԻՇՏհանձնարարել ընթացիկ նիստին սկսել թխուկների նոր «սեսիա»: Սա կհանգեցնի նրան, որ libcurl-ն անտեսում է «սեսիայի» բոլոր թխուկները, որոնք նա պետք է բեռներ նախորդ նիստից: Լռելյայնորեն, libcurl-ը միշտ պահպանում և բեռնում է բոլոր թխուկները՝ անկախ նրանից՝ դրանք «սեսիոն» են, թե ոչ: «Session» քուքիները թխուկներ են, որոնց ժամկետը չի սպառվում և պետք է գոյություն ունենան միայն ընթացիկ «սեսիայի» համար:
CURLOPT_CERTINFO ՃԻՇՏ SSL վկայագրի տեղեկատվությունը հոսքի համար դուրս բերելու համար STDERRապահով կապերով: Ավելացված է cURL 7.19.1-ում: Հասանելի է՝ սկսած PHP 5.3.2-ից: Պահանջում է, որ այս տարբերակը միացված լինի ճիշտ աշխատանքի համար CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY ՃԻՇՏասում է գրադարանին կատարել անհրաժեշտ վստահված անձի նույնականացում և կապի կարգավորում, բայց չի փոխանցում տվյալներ: Այս տարբերակը ներդրված է HTTP, SMTP և POP3-ի համար: Ավելացված է 7.15.2-ում: Հասանելի է PHP 5.5.0-ից:
CURLOPT_CRLF ՃԻՇՏ Unix տողերի վերջավորությունները CRLF-ի փոխարկելու համար:
CURLOPT_DNS_USE_GLOBAL_CACHE ՃԻՇՏօգտագործել գլոբալ DNS քեշը: Այս տարբերակը անվտանգ չէ շղթաների համար և միացված է լռելյայն:
CURLOPT_FAILONERROR ՃԻՇՏձախողման մասին մանրամասն հաշվետվության համար, եթե ստացված HTTP կոդը մեծ է կամ հավասար է 400-ի: Լռելյայն վարքագիծը էջը վերադարձնում է նորմալ՝ անտեսելով կոդը:
CURLOPT_FILETIME ՃԻՇՏփորձել ստանալ հեռավոր փաստաթղթի փոփոխման ամսաթիվը: Այս արժեքը կարելի է ստանալ՝ օգտագործելով CURLINFO_FILETIME պարամետրը ֆունկցիայից curl_getinfo ().
CURLOPT_FOLLOWLOCATION ՃԻՇՏհետևել ցանկացած վերնագրի «Գտնվելու վայրը.ուղարկված է սերվերի կողմից իր պատասխանում (նկատի ունեցեք, որ դա տեղի է ունենում ռեկուրսիվ, PHP-ն կհետևի ուղարկված ցանկացած վերնագրի «Գտնվելու վայրը., բացառությամբ այն դեպքերի, երբ հաստատուն է սահմանված CURLOPT_MAXREDIRS).
CURLOPT_FORBID_REUSE ՃԻՇՏստիպել, որ կապը փակվի դրա մշակման ավարտից հետո, որպեսզի այն հնարավոր չլինի նորից օգտագործել:
CURLOPT_FRESH_CONNECT ՃԻՇՏստիպել նոր կապի օգտագործումը քեշավորվածի փոխարեն:
CURLOPT_FTP_USE_EPRT ՃԻՇՏօգտագործել EPRT (և LPRT) ակտիվ FTP վերբեռնումների համար: Օգտագործեք ՍՈՒՏ EPRT-ն և LPRT-ն անջատելու և միայն PORT-ն օգտագործելու համար:
CURLOPT_FTP_USE_EPSV ՃԻՇՏ FTP փոխանցումների ժամանակ EPSV հրամանի նախնական փորձարկման համար: Եթե ​​հրամանը ձախողվի, այն կվերադառնա PASV: Տեղադրեք ներս ՍՈՒՏ EPSV-ն անջատելու համար:
CURLOPT_FTP_CREATE_MISSING_DIRS ՃԻՇՏստեղծել բացակայող դիրեկտորիաներ, եթե FTP գործողությունը հանդիպի գոյություն չունեցող ճանապարհի:
CURLOPT_FTPAPPEND ՃԻՇՏհեռավոր ֆայլը մինչև վերջ գրելու համար՝ այն գոյություն ունեցող ֆայլի վրա վերագրելու փոխարեն:
CURLOPT_TCP_NODELAY Մշտապես նշում է, թե արդյոք TCP_NODELAY տարբերակը պետք է սահմանվի կամ մաքրվի (1 = սահմանել, 0 = մաքրել): Լռելյայն տարբերակը ջնջված է: Հասանելի է PHP 5.2.1-ից libcurl 7.11.2 կամ ավելի նոր տարբերակով կառուցված տարբերակների համար:
CURLOPT_FTPASCII Մականուն CURLOPT_TRANSFERTEXT. Փոխարենը օգտագործեք սա:
CURLOPT_FTPLISTONLY ՃԻՇՏվերադարձնել միայն անունների ցանկը FTP գրացուցակից:
CURLOPT_HEADER ՃԻՇՏելքի մեջ վերնագրեր ներառելու համար:
CURLINFO_HEADER_OUT ՃԻՇՏբռնակի հարցման տողին հետևելու համար: Հասանելի է՝ սկսած PHP 5.1.3-ից: Նախածանց CURLINFO_հատուկ օգտագործված.
CURLOPT_HTTPGET ՃԻՇՏ HTTP հարցման մեթոդը վերականգնելու համար GET մեթոդին: Քանի որ GET-ը լռելյայն է, այս պարամետրը անհրաժեշտ է միայն այն դեպքում, եթե հարցման մեթոդը նախկինում փոխվել է:
CURLOPT_HTTPPROXYTUNNEL ՃԻՇՏԹունել նշված HTTP վստահված անձի միջով:
CURLOPT_MUTE ՃԻՇՏ cURL ֆունկցիայի հաղորդագրություններն ամբողջությամբ անջատելու համար: Հեռացվել է cURL 7.15.5-ում (կարելի է օգտագործել CURLOPT_RETURNTRANSFER տարբերակը)
CURLOPT_NETRC ՃԻՇՏկարդալու համար ~/.netrc ֆայլը մուտքի և գաղտնաբառի համար այն հեռավոր կայքի համար, որի հետ կապը հաստատվում է:
CURLOPT_NOBODY ՃԻՇՏարձագանքման մարմինը ելքից բացառելու համար։ Հարցման մեթոդը դրված է HEAD: Փոխելով այս կարգավորումը ՍՈՒՏայն հետ չի փոխում GET-ի:
CURLOPT_NOPROGRESS

ՃԻՇՏ cURL փոխանցումների առաջընթացի ցուցիչն անջատելու համար:

Մեկնաբանություն:

PHP-ն ավտոմատ կերպով սահմանում է այս պարամետրը ՃԻՇՏ, փոխեք այն միայն վրիպազերծման նպատակով:

CURLOPT_NOSIGNAL ՃԻՇՏանտեսել ցանկացած cURL ֆունկցիա, որն ազդանշաններ է ուղարկում PHP գործընթացին: Այս ընտրանքը լռելյայն միացված է բազմաշերտ SAPI-ներում՝ թույլ տալու ժամանակի դադարման պարամետրերը ճիշտ աշխատել:
CURLOPT_POST ՃԻՇՏսովորական HTTP POST-ն օգտագործելու համար: Այս POST մեթոդը օգտագործում է նորմալ , սովորաբար օգտագործվում է HTML ձևերում։
CURLOPT_PUT ՃԻՇՏֆայլ ներբեռնելու համար՝ օգտագործելով HTTP PUT մեթոդը: Օգտագործված ֆայլը պետք է սահմանվի՝ օգտագործելով ընտրանքները CURLOPT_INFILEԵվ CURLOPT_INFILESIZE.
CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ ՃԻՇՏփոխանցման արդյունքը որպես տող վերադարձնել curl_exec ()բրաուզերի ուղիղ ելքի փոխարեն:
CURLOPT_SAFE_UPLOAD ՃԻՇՏնախածանցի աջակցությունն անջատելու համար @ ներբեռնված ֆայլերի համար CURLOPT_POSTFIELDS, ինչը նշանակում է, որ արժեքներն անցել են @ կարող է ապահով կերպով փոխանցվել որպես դաշտեր: Նախածանցի փոխարեն կարող եք օգտագործել տարբերակը CURLFileդ. Ավելացված է PHP 5.5.0-ում լռելյայն արժեքով ՍՈՒՏ. PHP 5.6.0-ում այն ​​հավասարվեց լռելյայն ՃԻՇՏ.
CURLOPT_SSL_VERIFYPEER ՍՈՒՏ cURL-ի կողմից հյուրընկալող վկայականի ստուգումը դադարեցնելու համար: Այլընտրանքային հավաստագրերը, որոնք պետք է ստուգվեն, կարող են սահմանվել պարամետրի միջոցով CURLOPT_CAINFOկամ պարամետրով նշված վկայագրերով գրացուցակը CURLOPT_CAPATH. Կանխադրված է ՃԻՇՏսկսած cURL 7.10 տարբերակից: Լռելյայն բաշխումը տեղադրված է սկսած cURL 7.10 տարբերակից:
CURLOPT_TRANSFERTEXT ՃԻՇՏ FTP փոխանցումների համար ASCII ռեժիմ օգտագործելու համար: LDAP-ն օգտագործելիս տվյալները HTML-ի փոխարեն վերադարձվում են պարզ տեքստով: Windows համակարգերում շարանը STDOUTչի դրվում երկուական ռեժիմի:
CURLOPT_UNRESTRICTED_AUTH ՃԻՇՏշարունակել մուտքի և գաղտնաբառի ուղարկումը վերահղումների ժամանակ (օգտագործելիս CURLOPT_FOLLOWLOCATION), նույնիսկ եթե հոսթի անունը փոխվի:
CURLOPT_UPLOAD ՃԻՇՏպատրաստվել ֆայլը սերվեր վերբեռնելու համար:
CURLOPT_VERBOSE ՃԻՇՏլրացուցիչ տեղեկություններ ցուցադրելու համար: Արդյունք է գրում հոսքի մեջ STDERR, կամ պարամետրով նշված ֆայլը CURLOPT_STDERR.

Հետևյալ տարբերակի պարամետրի արժեքների համար արժեքի պարամետրը պետք է լինի տեսակի ամբողջ թիվ:

Պարամետր Սահմանել արժեքի արժեքը Նշումներ
CURLOPT_BUFFERSIZE Յուրաքանչյուր ընթերցման համար օգտագործվող բուֆերի չափը: Այնուամենայնիվ, երաշխիք չկա, որ այս հարցումը կկատարվի: Ավելացված է cURL 7.10-ում:
CURLOPT_CLOSEPOLICY հաստատուններից մեկը CURLCLOSEPOLICY_*.

Մեկնաբանություն:

Այս տարբերակը հնացած է, քանի որ այն երբեք չի ներդրվել cURL-ում և չի աշխատել:

Հեռացված է PHP 5.6.0-ում:
CURLOPT_CONNECTTIMEOUT Միանալու ժամանակ սպասելու վայրկյանների քանակը: Օգտագործեք 0՝ անորոշ ժամանակով սպասելու համար:
CURLOPT_CONNECTTIMEOUT_MS Միլիվայրկյանների քանակը, որոնք պետք է սպասել, երբ փորձում եք միանալ: Օգտագործեք 0՝ անորոշ ժամանակով սպասելու համար: Եթե ​​libcurl-ը կազմված է համակարգի անվանման ստանդարտ լուծիչի միջոցով, ապա կապը դեռ կօգտագործի ամբողջ երկրորդ սպասումը որպես ժամանակի վերջ, նվազագույն թույլատրելի ժամկետը 1 վայրկյանով: Ավելացված է cURL 7.16.2 տարբերակում: Հասանելի է՝ սկսած PHP 5.2.3-ից:
CURLOPT_DNS_CACHE_TIMEOUT DNS գրառումների հիշողության մեջ պահվող վայրկյանների քանակը: Լռելյայնորեն, այս պարամետրը 120 է (2 րոպե):
CURLOPT_FTPSSLAUTH FTP վավերացման մեթոդ (ակտիվ ռեժիմում). CURLFTPAUTH_SSL(SSL-ը նախ ստուգվում է), CURLFTPAUTH_TLS(Առաջինը ստուգվեց TLS-ը) կամ CURLFTPAUTH_DEFAULT(cURL-ն ինքն է որոշում): Ավելացված է cURL 7.12.2 տարբերակում:
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (լռելյայն, CURL-ն ընտրում է, թե որ տարբերակը օգտագործել), CURL_HTTP_VERSION_1_0 (հարկադիր HTTP/1.0) կամ CURL_HTTP_VERSION_1_1 (հարկադիր HTTP/1.1):
CURLOPT_HTTPAUTH

Դուք կարող եք օգտագործել bitwise օպերատորը | (կամ) համատեղել մի քանի մեթոդներ միասին: Այս դեպքում, cURL-ը սերվերից կհարցնի աջակցվող թույլտվության մեթոդները և կընտրի լավագույնը:

CURLAUTH_ANY-ը կեղծանուն է CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE-ն այլանուն է CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE Ֆայլի ակնկալվող չափը, բայթերով, ֆայլը հեռավոր սերվեր բեռնելիս: Խնդրում ենք նկատի ունենալ, որ այս տարբերակի օգտագործումը չի դադարեցնի այս արժեքից ավելի հետագա տվյալների ուղարկումը, քանի որ ուղարկված տվյալները կախված են արդյունքից: CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT Տվյալների փոխանցման արագության վերին շեմը՝ բայթ/վրկ: Ստուգումը տեղի է ունենում ներսում CURLOPT_LOW_SPEED_TIMEվայրկյան, որից հետո PHP-ն փոխանցումը չափազանց դանդաղ է համարում և ընդհատում է այն։
CURLOPT_LOW_SPEED_TIME Վայրկյանների առավելագույն քանակը, որոնց ընթացքում փոխանցման արագությունը չպետք է գերազանցի CURLOPT_LOW_SPEED_LIMIT, հակառակ դեպքում PHP-ն կնշի փոխանցումը որպես չափազանց դանդաղ և կդադարեցնի այն:
CURLOPT_MAXCONNECTS Մշտական ​​կապերի առավելագույն քանակը: Երբ սահմանը հասնում է, պարամետրն օգտագործվում է որոշելու համար, թե որ կապը պետք է փակվի: CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS Ընդունված վերահղումների առավելագույն քանակը: Օգտագործեք այս տարբերակը տարբերակի հետ միասին CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Այլընտրանքային միացման նավահանգիստ:
CURLOPT_POSTREDIR Բիթային դիմակ, որը պարունակում է 1 (301 Տեղափոխվել է Մշտապես), 2 (302 Գտնվել է) և 4 (303 Տես Այլ)՝ ճշտելու համար, թե արդյոք HTTP POST մեթոդը պետք է մշակվի, երբ տարբերակը միացված է: CURLOPT_FOLLOWLOCATIONեթե տեղի է ունեցել վերահղման նշված տեսակը: Ավելացված է cURL 7.19.1-ում: Հասանելի է PHP 5.3.2-ից:
CURLOPT_PRROTOCOLS

Արժեքների քիչ դիմակ CURLPROTO_*. Այս դիմակը սահմանափակում է libcurl-ի կողմից օգտագործվող արձանագրությունները: Սա թույլ է տալիս libcurl աշխատել մեծ թվով արձանագրությունների հետ և սահմանափակել որոշակի փոխանցումների գործարկումը դրանց միայն ենթաբազմությամբ: Լռելյայնորեն, libcurl-ն օգտագործում է բոլոր աջակցվող արձանագրությունները: Տես նաև պարամետր CURLOPT_REDIR_PRROTOCOLS.

Արձանագրության ճիշտ արժեքները՝ CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_FTP, CURLPROTO_FTPS, CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_TELNET, CURLPROTO_TELNET, CURLPROTO_FTP , CURLPROTO_FILE , CURLP ROTO_TFTP, CURLPROTO_ALL

CURLOPT_PROXYAUTH HTTP թույլտվության մեթոդներ, որոնք օգտագործվում են վստահված սերվերին միանալու ժամանակ: Օգտագործեք նույն բիթային դիմակները, որոնք նկարագրված են պարամետրի համար CURLOPT_HTTPAUTH. Ներկայումս միայն CURLAUTH_BASIC և CURLAUTH_NTLM են աջակցվում վստահված անձի թույլտվության համար: Ավելացված է cURL 7.10.7 տարբերակում:
CURLOPT_PROXYPORT Պրոքսի սերվերի պորտի համարը, որի հետ կապն է: Այս թիվը կարող է սահմանվել նաև պարամետրի միջոցով CURLOPT_PROXY.
CURLOPT_PROXYTYPE Կամ CURLPROXY_HTTP (կանխադրված) կամ CURLPROXY_SOCKS5: Ավելացված է cURL 7.10-ում:
CURLOPT_REDIR_PRROTOCOLS Արժեքների քիչ դիմակ CURLPROTO_*. Այս bitmask-ը սահմանափակում է libcurl-ի կողմից վերահղման ժամանակ օգտագործվող արձանագրությունները (միացված պարամետրով CURLOPT_FOLLOWLOCATION) Սա թույլ է տալիս սահմանափակել որոշ հաղորդումների համար վերահղման ժամանակ օգտագործվող արձանագրությունների շարքը: Լռելյայնորեն, libcurl-ն աջակցում է բոլոր արձանագրություններին, բացառությամբ FILE-ի և SCP-ի: 7.19.4-ին նախորդող տարբերակներում վերահղումը օգտագործվել է բոլոր արձանագրությունների համար՝ առանց բացառության: Տես նաև պարամետրի նկարագրությունը CURLOPT_PRROTOCOLSարձանագրության արժեքներով հաստատունների ցանկի համար: Ավելացվել է cURL 7.19.4 տարբերակում:
CURLOPT_RESUME_FROM-ից Փոխանցման մեկնարկի օֆսեթ, բայթերով:
CURLOPT_SSL_VERIFYHOST Օգտագործեք 1՝ SSL վկայագրում ընդհանուր անվան առկայությունը ստուգելու համար: Օգտագործեք 2-ը՝ ստուգելու համար, որ ընդհանուր անունը գոյություն ունի, ինչպես նաև համապատասխանում է նշված հոսթին: Մարտական ​​միջավայրում այս պարամետրի արժեքը պետք է լինի 2 (սահմանված է լռելյայն): 1 արժեքի աջակցությունը հանվել է cURL 7.28.1-ում
CURLOPT_SSLVERSION հաստատուններից մեկը CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1(5) կամ CURL_SSLVERSION_TLSv1_2 (6).
CURLOPT_TIMECONDITION Պարամետրերի մեկնաբանման մեթոդ CURLOPT_TIMEVALUE. Օգտագործեք CURL_TIMECOND_IFMODSINCE էջը վերադարձնելու համար միայն այն դեպքում, եթե այն փոխվել է պարամետրում նշված ժամանակից ի վեր CURLOPT_TIMEVALUE. Եթե ​​էջը չի փոփոխվել, վերնագիրը կվերադարձվի «304 Չփոփոխված», ենթադրելով, որ պարամետրը CURLOPT_HEADERտեղադրված է ՃԻՇՏ. Հակառակ էֆեկտի համար օգտագործեք CURL_TIMECOND_IFUNMODSINCE: Կանխադրվածը CURL_TIMECOND_IFMODSINCE է:
CURLOPT_TIMEOUT cURL գործառույթների կատարման համար թույլատրելի վայրկյանների առավելագույն քանակը:
CURLOPT_TIMEOUT_MS cURL գործառույթների կատարման համար թույլատրելի միլիվայրկյանների առավելագույն քանակը: Եթե ​​libcurl-ը կառուցված է համակարգի անվանման սովորական լուծիչի միջոցով, ապա այս կապի տիրույթը դեռ կօգտագործի երկրորդ կլորացման ժամանակի վերջնաժամկետը, նվազագույն թույլատրելի ժամկետը մեկ վայրկյանով: Ավելացված է cURL 7.16.2 տարբերակում: Հասանելի է՝ սկսած PHP 5.2.3-ից:
CURLOPT_TIMEVALUE 1970 թվականի հունվարի 1-ից վայրկյանների քանակը։ Այս անգամ կօգտագործվի պարամետրով CURLOPT_TIMECONDITION. Լռելյայնորեն օգտագործվում է CURL_TIMECOND_IFMODSINCE պարամետրը:
CURLOPT_MAX_RECV_SPEED_LARGE Եթե ​​ներբեռնման արագությունը գերազանցում է այս արժեքը (նշված է բայթ/վրկ) միջինում ողջ փոխանցման ընթացքում, ներբեռնումը կդադարեցվի՝ միջին արագությունը պահպանելու համար այս պարամետրից փոքր կամ հավասար: Լռելյայն արագությունը սահմանափակված չէ:
CURLOPT_MAX_SEND_SPEED_LARGE Եթե ​​վերբեռնումը սերվերին գերազանցում է այս արժեքը (նշված է բայթ/վայրկյանում) միջինում ողջ փոխանցման ընթացքում, ապա վերբեռնումը կդադարեցվի այս պարամետրից փոքր կամ հավասար միջին արագություն պահպանելու համար: Լռելյայն արագությունը սահմանափակված չէ: Ավելացված է cURL 7.15.5-ում: Հասանելի է՝ սկսած PHP 5.4.0-ից:
CURLOPT_SSH_AUTH_TYPES Բիթդիմակ, որը բաղկացած է մեկ կամ մի քանի հաստատուններից. CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Տեղադրեք CURLSSH_AUTH_ANYորպեսզի libcurl-ն ինքնուրույն ընտրի դրանցից մեկը: Ավելացված է cURL 7.16.1-ում:
CURLOPT_IPRESOLVE Թույլ է տալիս հավելվածին ընտրել IP հասցեի տեսակը, որով որոշվում է հոսթի անունը: Սա անհրաժեշտ է, եթե դուք օգտագործում եք հոսթի անուն, որը բխում է IP հասցեի մեկից ավելի տարբերակներից: Հնարավոր արժեքները կարող են լինել CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, և լռելյայն CURL_IPRESOLVE_WHATEVER. Ավելացված է cURL 7.10.8-ում:

Հետևյալ տարբերակի պարամետրի արժեքների համար արժեքի պարամետրը պետք է լինի տեսակի լար:

Պարամետր Սահմանել արժեքի արժեքը Նշումներ
CURLOPT_CAINFO Մեկ կամ մի քանի վկայական պարունակող ֆայլի անվանումը, որոնց նկատմամբ կստուգվեն հանգույցները: Այս պարամետրը իմաստ ունի միայն այն դեպքում, երբ օգտագործվում է հետ միասին CURLOPT_SSL_VERIFYPEER. Պահանջում է բացարձակ ճանապարհ:
CURLOPT_CAPATH Գրացուցակ, որը պարունակում է մի քանի CA վկայագրեր: Օգտագործեք այս տարբերակը հետ միասին CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Վերնագրի բովանդակություն «Թխվածքաբլիթ»., օգտագործվում է HTTP հարցումում: Խնդրում ենք նկատի ունենալ, որ բազմաթիվ թխուկներ բաժանված են ստորակետով, որին հաջորդում է բացատ (օրինակ՝ « միրգ=խնձոր; գույն = կարմիր")
CURLOPT_COOKIEFILE Թխուկներ պարունակող ֆայլի անվանումը: Այս ֆայլը պետք է լինի Netscape ձևաչափով կամ պարզապես ֆայլում գրված HTTP վերնագրերով: Եթե ​​դատարկ տողը փոխանցվի որպես ֆայլի անուն, ապա թխուկները չեն պահպանվի, բայց դրանց մշակումը դեռ միացված կլինի:
CURLOPT_COOKIEJAR Ֆայլի անվանումը, որում կպահվեն ընթացիկ փոխանցման բոլոր ներքին թխուկները բռնիչը փակելուց հետո, օրինակ՝ curl_close կանչելուց հետո:
CURLOPT_CUSTOMREQUEST

Փոխարենը օգտագործվում է անհատական ​​հարցումների մեթոդ «ՍՏԱՆԵԼ»կամ "ԳԼՈՒԽ" HTTP հարցում կատարելիս: Սա օգտակար է հարցումների համար «Ջնջել»կամ այլ, ավելի հազվադեպ HTTP հարցումներ: Ճիշտ իմաստները կլինեն այնպիսի բառեր, ինչպիսիք են «ՍՏԱՆԵԼ», «ՓՈՍՏ», «ՄԻԱՑՆԵԼ»և այլն; դրանք. Այստեղ մի մուտքագրեք HTTP հարցման ամբողջ տողը: Օրինակ, ցուցում «GET /index.html HTTP/1.0\r\n\r\n»սխալ կլինի.

Մեկնաբանություն:

Մի օգտագործեք այս հատկությունը, քանի դեռ համոզված չեք, որ սերվերն աջակցում է այս տեսակի հարցումներին:

CURLOPT_EGDSOCKET Հավանել CURLOPT_RANDOM_FILE, բացառությամբ, որ ֆայլի անունը դրված է Entropy Gathering Daemon վարդակից:
CURLOPT_ENCODING Վերնագրի բովանդակություն «Ընդունել-կոդավորում.». Սա թույլ է տալիս խնդրանքը վերծանել: Աջակցվող կոդավորումներն են «ինքնություն», «թափել»Եվ «gzip». Եթե ​​դատարկ տող է փոխանցվում, "" , ուղարկվում է վերնագիր, որը պարունակում է բոլոր աջակցվող կոդավորման տեսակները: Ավելացված է cURL 7.10-ում:
CURLOPT_FTPPORT Արժեքը, որը կօգտագործվի FTP «PORT» հրամանի IP հասցեն որոշելու համար: «PORT» հրամանը սերվերին ասում է, թե որ IP հասցեին պետք է միանա: Սա կարող է լինել IP հասցե, հոսթի անունը, ցանցային ինտերֆեյսի անունը (Unix-ի տակ) կամ պարզապես «-»՝ համակարգի լռելյայն IP հասցեն օգտագործելու համար:
CURLOPT_INTERFACE Օգտագործվող ցանցային ինտերֆեյսի անվանումը: Կարող է լինել ինտերֆեյսի անուն, IP հասցե կամ հյուրընկալող անուն:
CURLOPT_KEYPASSWD Անձնական բանալին օգտագործելու համար անհրաժեշտ է գաղտնաբառ CURLOPT_SSLKEYկամ CURLOPT_SSH_PRIVATE_KEYFILE. Ավելացված է cURL 7.16.1-ում:
CURLOPT_KRB4LEVEL Անվտանգության մակարդակ KRB4 (Kerberos 4): Հետևյալ արժեքներից որևէ մեկը (ըստ ամենաթույլից ուժեղին) ճիշտ է. «պարզ», «անվտանգ», «գաղտնի», «մասնավոր».. Եթե ​​նշված տողը տարբերվում է տրված արժեքներից, արժեքը կօգտագործվի «մասնավոր». Կարգավորելով այս տարբերակը ԴԱՏԱՐԿամբողջությամբ կանջատի KRB4 անվտանգությունը: Այս պահին KRB4 անվտանգությունն աշխատում է միայն FTP գործարքներով։
CURLOPT_POSTFIELDS HTTP POST հարցումով փոխանցված բոլոր տվյալները: Ֆայլ փոխանցելու համար ֆայլի անվանումից առաջ նշեք @ , ինչպես նաև օգտագործեք ֆայլի ամբողջական ուղին: Ֆայլի տեսակը կարող է նաև սահմանվել՝ օգտագործելով « ձևաչափը ;type=mimetype«հետևելով ֆայլի անունին: Այս պարամետրը կարող է փոխանցվել որպես url կոդավորված տող, ինչպես « para1=val1¶2=val2&...«, և զանգվածի տեսքով, որի բանալիները կլինեն դաշտերի անվանումները, իսկ արժեքները՝ դրանց բովանդակությունը: Եթե արժեքը զանգված է, ապա վերնագիրը Բովանդակություն-Տեսակկսահմանվի բազմամաս/ձև-տվյալներ. Սկսած PHP 5.2.0-ից՝ նախածանցով ֆայլեր փոխանցելիս @ , արժեքը պետք է լինի զանգված: Քանի որ PHP 5.5.0, նախածանց @ հնացած է, և ֆայլերը կարող են ուղարկվել՝ օգտագործելով CURLFile. Նախածանց @ կարող է անջատվել՝ թույլ տալու համար սկսած արժեքները @ տարբերակը դնելով CURLOPT_SAFE_UPLOADիմաստով ՃԻՇՏ.
CURLOPT_PROXY HTTP վստահված անձ, որի միջոցով կուղարկվեն հարցումները:
CURLOPT_PROXYUSERPWD Մուտք և գաղտնաբառ գրված ձևով ":" , օգտագործվում է վստահված անձի միջոցով միանալիս:
CURLOPT_RANDOM_FILE SSL-ի համար պատահական թվերի գեներատորը սկզբնավորելու համար օգտագործվող ֆայլի անվանումը:
CURLOPT_RANGE Ներբեռնվող տվյալների շրջանակը, ձևաչափով «X-Y», և X կամ Y կարող են բաց թողնել: HTTP արձանագրությունն աջակցում է նաև ստորակետերով բաժանված բազմաթիվ տիրույթների փոխանցմանը, դրանք նշված են ձևաչափով «X-Y, N-M».
CURLOPT_REFERER Վերնագրի բովանդակություն «Հղորդող., որը կօգտագործվի HTTP հարցումում:
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 32 տասնվեցական թվանշան պարունակող տող: Տողը պետք է լինի հեռավոր համակարգչի հանրային բանալու MD5 ստուգիչ գումարը, և libcurl-ը կվերակայի կապը հեռավոր հոսթին, մինչև ստուգիչ գումարը համընկնի հանրային բանալիի հետ: Այս տարբերակը նախատեսված է միայն տվյալների փոխանցման համար՝ օգտագործելով SCP և SFTP: Ավելացված է cURL 7.17.1-ում:
CURLOPT_SSH_PUBLIC_KEYFILE Ձեր հանրային բանալու ֆայլի անունը: Եթե ​​նշված չէ, libcurl-ը կանխադրված է դարձնում $HOME/.ssh/id_dsa.pub ֆայլը, եթե HOME միջավայրի փոփոխականը սահմանված է, և «id_dsa.pub» ֆայլը ընթացիկ գրացուցակում, եթե HOME միջավայրի փոփոխականը սահմանված չէ: Ավելացված է cURL 7.16.1-ում:
CURLOPT_SSH_PRIVATE_KEYFILE Ձեր անձնական բանալիի ֆայլի անունը: Եթե ​​նշված չէ, libcurl-ը կանխադրված է դարձնում $HOME/.ssh/id_dsa ֆայլը, եթե դրված է HOME միջավայրի փոփոխականը, և «id_dsa» ֆայլը ընթացիկ գրացուցակում, եթե HOME միջավայրի փոփոխականը սահմանված չէ: Եթե ​​ֆայլը պաշտպանված է գաղտնաբառով, սահմանեք գաղտնաբառը՝ օգտագործելով CURLOPT_KEYPASSWD. Ավելացված է cURL 7.16.1-ում:
CURLOPT_SSL_CIPHER_LIST SSL փոխանցումներում օգտագործվող ծածկագրերի ցանկը: Օրինակ, RC4-SHAԵվ TLSv1վավեր գաղտնագրային ցուցակներ են:
CURLOPT_SSLCERT Ճիշտ ձևաչափված PEM վկայականով ֆայլի անվանումը:
CURLOPT_SSLCERTPASSWD Վկայագիրը օգտագործելու համար անհրաժեշտ է գաղտնաբառը CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Վկայագրի ձևաչափ. Աջակցված ձևաչափեր «ՊԵՄ»(կանխադրված), «ԴԵՐ»Եվ «ENG». Ավելացված է cURL 7.9.3 տարբերակում:
CURLOPT_SSLENGINE Պարամետրում նշված SSL մասնավոր բանալու համար գաղտնագրման շարժիչի ID-ն CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Ասիմետրիկ գաղտնագրման գործողությունների համար օգտագործվող գաղտնագրման մեխանիզմի նույնացուցիչը:
CURLOPT_SSLKEY SSL մասնավոր բանալի ֆայլի անվանումը:
CURLOPT_SSLKEYPASSWD

Պարամետրով նշված SSL մասնավոր բանալին օգտագործելու համար անհրաժեշտ գաղտնի գաղտնաբառը CURLOPT_SSLKEY.

Մեկնաբանություն:

Քանի որ այս պարամետրը պարունակում է արժեքավոր գաղտնաբառ, հիշեք, որ այս PHP սկրիպտը պահեք ապահով տեղում:

CURLOPT_SSLKEYTYPE SSL մասնավոր բանալու տեսակը, որը նշված է պարամետրում CURLOPT_SSLKEY. Աջակցվում են հետևյալ հիմնական տեսակները. «ՊԵՄ»(կանխադրված), «ԴԵՐ»Եվ «ENG».
CURLOPT_URL Ներբեռնվող URL: Այս պարամետրը կարող է սահմանվել նաև նիստի սկզբնավորման ժամանակ՝ օգտագործելով curl_init ().
CURLOPT_USERAGENT Վերնագրի բովանդակություն «Օգտատեր-գործակալ.», ուղարկվել է HTTP հարցումով:
CURLOPT_USERPWD Մուտք և գաղտնաբառ, որոնք օգտագործվում են միացման ընթացքում, նշված ձևաչափով ":" .

Ընտրանքի պարամետրի հետևյալ արժեքների համար արժեքի պարամետրը պետք է լինի զանգված.

Պարամետր Սահմանել արժեքի արժեքը Նշումներ
CURLOPT_HTTP200ALIASES HTTP 200 պատասխանների զանգված, որը կդիտարկվի որպես ճիշտ պատասխաններ, այլ ոչ թե սխալ: Ավելացված է cURL 7.10.3 տարբերակում:
CURLOPT_HTTPHEADER Սահմանված HTTP վերնագրերի զանգված՝ ֆորմատի զանգվածով («Բովանդակության տեսակը՝ տեքստ/պարզ», «Բովանդակության երկարություն՝ 100»)
CURLOPT_POSTQUOTE FTP հրամանների զանգված, որը կատարվում է սերվերում FTP հարցումն ավարտելուց հետո:
CURLOPT_QUOTE FTP հրամանների զանգված, որը կատարվում է սերվերում նախքան FTP հարցում կատարելը:

Հետևյալ տարբերակի պարամետրի արժեքների համար արժեքի պարամետրը պետք է լինի հոսքի բռնակ (վերադարձված է, օրինակ, ֆունկցիայի միջոցով fopen ()):

Պարամետր Սահմանել արժեքի արժեքը
CURLOPT_FILE Ֆայլը, որում կգրվի փոխանցման արդյունքը։ Կանխադրված ելքային հոսք STDOUT(զննարկիչի պատուհան):
CURLOPT_INFILE Այն ֆայլը, որից տվյալները պետք է կարդալ սերվերում բեռնելիս:
CURLOPT_STDERR Այլընտրանքային սխալի ելքային ֆայլ, որն օգտագործվում է սխալի հոսքի փոխարեն STDERR.
CURLOPT_WRITEHEADER Ֆայլը, որում կգրվեն ընթացիկ գործողության վերնագրերը:

Ընտրանքի պարամետրի հետևյալ արժեքների համար արժեքի պարամետրը պետք է լինի վավեր ֆունկցիայի անվանում կամ փակում.

Պարամետր Սահմանել արժեքի արժեքը
CURLOPT_HEADERFUNCTION Հետադարձ զանգի գործառույթը վերցնում է երկու պարամետր: Առաջին պարամետրը cURL բռնակն է, երկրորդ պարամետրը գրվող վերնագրեր պարունակող տող է: Վերնագրերը պետք է գրվեն՝ օգտագործելով այս հետադարձ կապի գործառույթը: Պետք է վերադարձնի գրված բայթերի քանակը:
CURLOPT_PASSWDFUNCTION Հետ կանչելու գործառույթը վերցնում է երեք պարամետր: Առաջին պարամետրը cURL բռնակն է, երկրորդ պարամետրը գաղտնաբառի հուշման տողը, իսկ երրորդ պարամետրը գաղտնաբառի առավելագույն երկարությունն է: Պետք է վերադարձնի գաղտնաբառ պարունակող տողը:
CURLOPT_PROGRESSFUNCTION

Հետադարձ զանգի գործառույթը վերցնում է հինգ պարամետր: Առաջինը cURL նկարագրիչն է, երկրորդը սերվերից սպասվող բայթերի ընդհանուր քանակն է, երրորդը՝ արդեն ներբեռնված բայթերի քանակը, չորրորդը՝ սերվերին սպասվող բայթերի ընդհանուր թիվը, և հինգերորդը արդեն ուղարկված բայթերի քանակն է:

Մեկնաբանություն:

Հետ կանչելու գործառույթը կանչվում է միայն այն դեպքում, եթե տարբերակը CURLOPT_NOPROGRESSսահմանել արժեքը ՍՈՒՏ.

Փոխանցումը չեղարկելու համար կարող եք վերադարձնել ոչ զրոյական արժեք: Այս դեպքում կցուցադրվի սխալ CURLE_ABORTED_BY_BACK.

CURLOPT_READFUNCTION Հետ կանչելու գործառույթը վերցնում է երեք պարամետր: Առաջին պարամետրը cURL բռնակն է, երկրորդը՝ հոսքի ռեսուրսը, որը փոխանցվել է cURL-ին ընտրանքի միջոցով: CURLOPT_INFILE, իսկ երրորդ պարամետրը ընթերցվող տվյալների առավելագույն թույլատրելի քանակն է: Հետ կանչելու գործառույթը պետք է վերադարձնի տվյալների պահանջվող քանակից ոչ ավելի երկարությամբ տող, սովորաբար կարդալով փոխանցված հոսքային ռեսուրսը: Պետք է վերադարձնի դատարկ տողը, որպեսզի ազդարարի ֆայլի ավարտը ԷՕՖ.
CURLOPT_WRITEFUNCTION Հետադարձ զանգի գործառույթը վերցնում է երկու պարամետր: Առաջին պարամետրը cURL բռնակն է, իսկ երկրորդ պարամետրը՝ գրվող տվյալները պարունակող տողը: Տվյալները պետք է պահպանվեն այս գործառույթի միջոցով: Այն պետք է վերադարձնի գրված բայթերի ճշգրիտ թիվը, հակառակ դեպքում ներբեռնումը կդադարեցվի սխալմամբ:

Այլ իմաստներ.

Վերադարձի արժեքներ

Վերադարձնում է ՃԻՇՏհաջող ավարտից հետո կամ ՍՈՒՏսխալի դեպքում.

Փոփոխությունների ցանկ

Տարբերակ Նկարագրություն
5.6.0 Տարբերակ CURL_SAFE_UPLOADայժմ ունի լռելյայն արժեք ՃԻՇՏ.
5.6.0 Հեռացված տարբերակ CURLOPT_CLOSEPOLICYև դրա հետ կապված իմաստները:
5.5.0 CURL ռեսուրսը ավելացվում է որպես հետադարձ կապի ֆունկցիայի առաջին փաստարկ CURLOPT_PROGRESSFUNCTION.
5.5.0 Ավելացված տարբերակ CURLOPT_SHARE.
5.3.0 Ավելացված տարբերակ CURLOPT_PROGRESSFUNCTION.
5.2.10 Ավելացված ընտրանքներ CURLOPT_PRROTOCOLSԵվ CURLOPT_REDIR_PRROTOCOLS.
5.1.0 Ավելացված ընտրանքներ CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTHԵվ CURLOPT_TIMECONDITION.
5.0.0 Ավելացված ընտրանքներ CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPEԵվ CURLOPT_HTTP200ALIASES.

Օրինակներ

Օրինակ #1 CURL նստաշրջանի սկզբնավորում և վեբ էջ բեռնում

// ստեղծել նոր cURL ռեսուրս
$ch = curl_init();

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

$ch = curl_init();

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

Curl_setopt ($ch, CURLOPT_URL, «http://localhost/upload.php»);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);

Curl_exec ($ ch);
?>

Այս օրինակի գործարկման արդյունքը.

Զանգված ( => Foo) զանգված ( => զանգված ( => test.png => պատկեր/png => /tmp/phpcpjNeQ => 0 => 279))

Նշումներ

Մեկնաբանություն:

Զանգվածի փոխանցումը CURLOPT_POSTFIELDSկոդավորում է տվյալները որպես բազմամաս/ձև-տվյալներ, մինչդեռ URL-ով կոդավորված տողը կոդավորի տվյալները որպես դիմում/x-www-form-urlencoded.

cURL-ը գործիք է, որը թույլ է տալիս շփվել տարբեր սերվերների հետ և աջակցում է բազմաթիվ արձանագրությունների՝ HTTP, FTP, TELNET և այլն: cURL-ն ի սկզբանե հրամանի տող է: Բայց, բարեբախտաբար մեզ համար, PHP-ն աջակցում է cURL գրադարանի հետ աշխատելուն: Այս հոդվածում մենք կանդրադառնանք cURL-ի հետ աշխատելու ոչ տրիվիալ օրինակներին:

Ինչու cURL:

Փաստորեն, կան բազմաթիվ այլ եղանակներ՝ հարցում ուղարկելու այլ սերվերի, օրինակ՝ էջի բովանդակությունը ստանալու համար: Շատ մարդիկ, հիմնականում ծուլությունից դրդված, cURL-ի փոխարեն օգտագործում են պարզ PHP ֆունկցիաներ.

$content = file_get_contents ("http://www.example.com"); // կամ $lines = ֆայլ ("http://www.example.com"); // կամ readfile ("http://www.example.com");

Այնուամենայնիվ, դրանք թույլ չեն տալիս արդյունավետորեն լուծել սխալները: Կան նաև մի շարք առաջադրանքներ, որոնք նրանք ընդհանրապես չեն կարող անել՝ օրինակ՝ աշխատել թխուկների հետ, թույլտվություն, հարցումներ ուղարկել, ֆայլեր ներբեռնել։

cUrl-ը հզոր գործիք է, որն աջակցում է բազմաթիվ արձանագրություններին և տրամադրում է հարցումների ամբողջական տեղեկատվություն:

cUrl հիմունքներ

Նախքան բարդ օրինակներին անցնելը, եկեք նայենք PHP-ում cURL հարցումի հիմնական կառուցվածքին: PHP-ում cURL հարցում կատարելու համար անհրաժեշտ է կատարել 4 հիմնական քայլ.

  1. Նախնականացում.
  2. Կարգավորման ընտրանքներ.
  3. Հարցման կատարում.
  4. Մաքրման ռեսուրսներ.
// 1. սկզբնավորում $ch = curl_init(); // 2. սահմանել ընտրանքներ, ներառյալ URL curl_setopt ($ch, CURLOPT_URL, «http://www.google.com»); curl_setopt ($ch, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); curl_setopt ($ch, CURLOPT_HEADER, 0); // 3. հարցումը կատարելը և պատասխանը ստանալը $output = curl_exec($ch); // 4. մաքրման ռեսուրսները curl_close($ch);

Այս հոդվածում մենք հիմնականում կդիտարկենք թիվ 2 քայլը, քանի որ հենց այստեղ է տեղի ունենում կախարդանքը: CURL տարբերակների ցանկը շատ մեծ է, ուստի մենք այսօր չենք դիտարկի բոլոր տարբերակները, այլ կօգտագործենք դրանք, որոնք օգտակար են կոնկրետ խնդիրների լուծման համար։

Սխալների հետևում

Անհրաժեշտության դեպքում կարող եք ավելացնել հետևյալ տողերը՝ հետևելու սխալներին.

// ... $ ելք = curl_exec ($ ch); if ($output === FALSE) ( echo "cURL Սխալ. " . curl_error ($ch); ) // ...

Խնդրում ենք նկատի ունենալ, որ մենք օգտագործում ենք «===» «==»-ի փոխարեն, քանի որ Անհրաժեշտ է տարբերակել դատարկ սերվերի պատասխանը և բուլյան արժեքը FALSE, որը վերադարձվում է սխալի դեպքում։

Հարցման մասին տեղեկություններ ստանալը

Մեկ այլ ընտրովի քայլ է cURL հարցման մասին տեղեկատվություն ստանալը այն կատարելուց հետո:

// ... curl_exec ($ch); $info = curl_getinfo ($ch); echo «Վերցրեց» . $info["total_time"]: «վայրկյաններ url-ի համար»: $info["url"]; //...

Արդյունքում, դուք կստանաք զանգված հետևյալ տեղեկատվությամբ.

  • «url»
  • «բովանդակության_տեսակ»
  • «http_code»
  • «վերնագրի_չափը»
  • «հարցման_չափ»
  • «ֆայլի ժամանակ»
  • «ssl_verify_result»
  • «վերահղման_հաշվիչը»
  • «total_time»
  • «namelookup_time»
  • «connect_time»
  • «նախ փոխանցման_ժամանակ»
  • «size_upload»
  • «չափ_ներբեռնում»
  • «speed_download»
  • «speed_upload»
  • «ներբեռնման_բովանդակության_երկարություն»
  • «upload_content_length»
  • «starttransfer_time»
  • «վերահղման_ժամանակ»

Վերահղման հետևում, կախված զննարկիչից

Այս օրինակում մենք կգրենք սցենար, որը կհայտնաբերի վերահղումները՝ հիմնված բրաուզերի տարբեր կարգավորումների վրա: Օրինակ, որոշ կայքեր վերահղում են այցելուներին շարժական սարքերից դեպի այլ երկրների այցելուներ:

Մենք կօգտագործենք CURLOPT_HTTPHEADER տարբերակը՝ սահմանելու մեր սեփական վերնագրերը, ներառյալ User-Agent-ը և Language, և տեսնելու, թե ուր են մեզ վերահղում կայքերը:

// URLs $urls = array ("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // բրաուզերներ $browsers = array("standard" => զանգված ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5. 6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => զանգված ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU, ինչպես Mac OS X; en) AppleWebKit/420+ (KHTML, ինչպես Gecko) Տարբերակ/3.0 Mobile/1A537a Safari/419.3», «language» => «en»), «french» => զանգված («user_agent» = > "Mozilla/4.0 (համատեղելի; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls որպես $url) ( արձագանքել «URL. , $url); // նշեք օգտագործվող դիտարկիչը և լեզուն curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["language" ]) ")); // մեզ պետք չեն curl_setopt էջի բովանդակությունը ($ch, CURLOPT_NOBODY, 1); // մեզ միայն անհրաժեշտ են curl_setopt վերնագրեր ($ch, CURLOPT_HEADER, 1); // փոխարենը վերադարձրեք արդյունքը իր ելքի curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); // սահմանել վերահղումները HTTP վերնագրերում? if (preg_match("!Գտնվելու վայրը. (.*)!" , $output, $matches)) ( echo "$test_name. վերահղումներ դեպի $matches\n";) else (echo "$test_name. առանց վերահղում\n";) ) echo "\n\n";)

Մի օղակում մենք ստուգում ենք բրաուզերները յուրաքանչյուր URL-ի համար: Սկզբում մենք սահմանեցինք մեր հարցման ընտրանքները՝ URL-ը և դիտարկիչը և փորձարկվող լեզուն:

Որովհետեւ Մենք հատուկ տարբերակ ենք սահմանել, հարցման արդյունքը կպարունակի միայն HTTP վերնագրեր: Օգտագործելով պարզ կանոնավոր արտահայտություն, մենք կարող ենք ստուգել, ​​թե արդյոք պատասխանը պարունակում է «Location:» տողը:

Սցենարի կատարման արդյունքը.

URL՝ http://www.cnn.com ստանդարտ. վերահղումներ դեպի http://edition.cnn.com/ iphone. վերահղումներ դեպի http://edition.cnn.com/ ֆրանսերեն՝ վերահղումներ դեպի http://edition.cnn .com/ URL՝ http://www.mozilla.com ստանդարտ. վերահղումներ դեպի https://www.mozilla.org/firefox/ iphone. վերահղումներ դեպի https://www.mozilla.org/firefox/ ֆրանսերեն՝ վերահղումներ դեպի https://www.mozilla.org/firefox/ URL՝ http://www.facebook.com ստանդարտ՝ վերահղումներ դեպի https://www.facebook.com/ iphone՝ վերահղումներ դեպի 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 մեթոդը: Այս դեպքում տվյալները ուղարկվում են հարցման հաղորդագրության մեջ, այլ ոչ թե բուն URL-ում:

Եկեք գրենք մի սցենար, որը կուղարկի POST հարցումներ: Նախ, եկեք ստեղծենք պարզ PHP ֆայլ, որը կընդունի այս հարցումները և կվերադարձնի իրեն ուղարկված տվյալները: Եկեք այն անվանենք post_output.php :

$url = «http://localhost/post_output.php»; $post_data = զանգված ("foo" => "bar", "query" => "FooBar", "action" => "Ներկայացնել"); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); // կատարել POST հարցում curl_setopt($ch, CURLOPT_POST, 1); // ավելացնել տվյալներ curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data); $ ելք = curl_exec ($ ch); curl_close ($ ch); echo $ ելք;

Այս սցենարը կարտադրի.

Զանգված ( => բար => FooBar => Ներկայացնել)

Այս սցենարը POST հարցում ուղարկեց post_output.php ֆայլին: որը թողարկեց $_POST զանգվածի բովանդակությունը, և մենք ստացանք այս պատասխանը՝ օգտագործելով cURL:

Ֆայլերի բեռնում

Ինչպես նախորդ օրինակում, եկեք ստեղծենք մի ֆայլ, որը կընդունի հարցումները, upload_output.php :

Print_r ($_FILES);

Եվ ինքնին սցենարը, որը ներբեռնում է ֆայլերը.

$url = «http://localhost/upload_output.php»; $post_data = զանգված ("foo" => "bar", // ֆայլ վերբեռնելու համար "upload" => "@/tmp/desert.jpg"); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data); $ ելք = curl_exec ($ ch); curl_close ($ ch); echo $ ելք;

Եթե ​​ցանկանում եք վերբեռնել ֆայլ, ապա ձեզ հարկավոր է ընդամենը փոխանցել դրա ուղին, ինչպես սովորական POST հարցման պարամետրը, նախածանցով «@»: Սցենարի արդյունքը.

Զանգված ( => Զանգված ( => desert.jpg => հավելված/օկտետ հոսք => /tmp/phpAhEvXy => 0 => 845941))

Multi cURL

PHP-ում cURL-ի առաջադեմ առանձնահատկություններից մեկը միաժամանակ և ասինխրոն մի քանի հարցումներ կատարելու հնարավորությունն է:

Սովորական պայմաններում սկրիպտը կանգ է առնում և սպասում, որ հարցումը ավարտվի: Եվ եթե ձեզ անհրաժեշտ է շատ հարցումներ կատարել, դա կարող է շատ ժամանակ խլել, քանի որ... դուք հաջորդաբար հանդես կգաք. Այս սահմանափակումը կարելի է շրջանցել.

// ստեղծել մշակիչներ $ch1 = curl_init(); $ch2 = curl_init(); // սահմանել ընտրանքները curl_setopt ($ch1, CURLOPT_URL, «http://lxr.php.net/»); curl_setopt ($ ch1, CURLOPT_HEADER, 0); curl_setopt ($ch2, CURLOPT_URL, «http://www.php.net/»); curl_setopt ($ ch2, CURLOPT_HEADER, 0); //ստեղծել բազմակի cURL բռնակ $mh = curl_multi_init(); // ավելացնել մշակիչներ curl_multi_add_handle ($mh,$ch1); curl_multi_add_handle ($mh,$ch2); $running = null; // կատարիր հարցումները (curl_multi_exec($mh, $running); ) while ($running > 0); // ազատել ռեսուրսները curl_multi_remove_handle ($mh, $ch1); curl_multi_remove_handle ($mh, $ch2); curl_multi_close ($mh);

Գաղափարն այն է, որ դուք կարող եք ստեղծել մի քանի cURL բռնակներ, միավորել դրանք մեկ բազմաբռնակի տակ և կատարել դրանք ասինքրոն:

Նախ, ամեն ինչ նույնն է, ինչ սովորական cURL հարցումով - ստեղծվում է նկարագրիչ ( curl_init () ), պարամետրերը սահմանված են ( curl_setopt () ) Այնուհետև ստեղծվում է բազմաբնույթ նկարագրիչ ( curl_multi_init() ) և ավելացվում են նախկինում ստեղծված կանոնավոր նկարագրիչները ( curl_multi_add_handle() ) Curl_exec() նորմալ կանչելու փոխարեն մենք կկանչենք curl_multi_exec() այս ֆունկցիան մեզ տեղեկացնում է ակտիվ կապերի քանակի մասին՝ օգտագործելով երկրորդ պարամետրը՝ $running: Հետևաբար, օղակն աշխատում է այնքան ժամանակ, մինչև $running-ը հավասարվի 0-ի: Եվ, իհարկե, աշխատանքն ավարտելուց հետո անհրաժեշտ է ազատել ռեսուրսները:

Այս օրինակում մենք պարզապես հարցումների արդյունքը ուղարկում ենք STDOUT: Դիտարկենք multi cURL-ի օգտագործման ոչ տրիվիալ դեպք:

WordPress-ում արտաքին հղումների ստուգում

Պատկերացրեք մի բլոգ, որտեղ կան բազմաթիվ գրառումներ, որոնք պարունակում են հղումներ դեպի արտաքին կայքեր: Այս հղումներից մի քանիսը կարող են չաշխատել:

Եկեք գրենք մի սցենար, որը կգտնի բոլոր կոտրված հղումները և ցույց կտա մեզ:

Նախ, մենք պետք է հանենք բոլոր արտաքին հղումները տվյալների բազայից.

// CONFIG $db_host = "localhost"; $db_user = «արմատ»; $db_pass = ""; $db_name = «wordpress»; $excluded_domains = զանգված ("localhost", "site"); $ max_connections = 10; $url_list = զանգված (); $working_urls = զանգված (); $dead_urls = զանգված(); $not_found_urls = զանգված(); $ակտիվ = null; // միանալ MySQL-ին, եթե (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Չհաջողվեց միանալ. չընտրեք db. ""; $r = mysql_query ($ q) կամ die (mysql_error ()); while ($d = mysql_fetch_assoc($r)) ( // հավաքել բոլոր հղումները՝ օգտագործելով կանոնավոր արտահայտությունը, if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($ համապատասխանում է $url-ին) ( // զտել ավելորդ տիրույթները $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) ( շարունակել; ) // միասին դնել $url_list = $url; ) ) ) // հեռացնել կրկնությունները $url_list = array_values(array_unique ($url_list)); if (!$url_list) ( die ("Չկա ստուգելու URL"); )

Սցենարի այս մասում մենք պարզապես հանում ենք բոլոր արտաքին հղումները տվյալների բազայից: Եկեք ստուգենք դրանք.

$mh = curl_multi_init(); // 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); curl_multi_close ($mh); echo "==Մեռած URLs==\n"; echo implode("\n", $dead_urls) . «\n\n»; echo "==404 URL==\n"; echo implode("\n", $not_found_urls) . «\n\n»; echo "==Աշխատանքային URL==\n"; echo implode("\n", $working_urls); echo «\n\n»; // 9. ավելացնում է բռնակ տվյալ URL ֆունկցիայով add_url_to_multi_handle ($mh, $url_list) ( ստատիկ $index = 0; // եթե դեռ կան հղումներ, եթե (isset($url_list[$index])) ( // ամեն ինչ սովորական է $ ch = curl_init(); // սահմանել ընտրանքները curl_setopt ($ch, CURLOPT_URL, $url_list[$index]); // վերադարձնել, քան ցուցադրել արդյունքը curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // թույլատրել վերահղումներ curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1); // ստանալ միայն վերնագրեր՝ ժամանակ խնայելու համար curl_setopt ($ch, CURLOPT_NOBODY, 1); // ավելացնել բազմաբռնակին curl_multi_add_handle ($mh, $ch); $index++;) )

Եկեք ավելի մանրամասն նայենք ծածկագրին (համարակալումը համապատասխանում է կոդի մեկնաբանություններին).

  1. Մենք ավելացնում ենք նկարագրիչների սկզբնական թիվը, որպեսզի համակարգը չծանրաբեռնենք թելերով։ Թիվը կառավարվում է $max_connections փոփոխականով:
  2. $curRunning փոփոխականը պահպանում է գործող թելերի քանակը, $running-ը պահպանում է նախորդ արժեքը, եթե դրանք դառնում են անհավասար, ապա թելերից մեկն ավարտել է աշխատանքը։
  3. Մենք տեղեկատվություն ենք ստանում լրացված հարցման մասին:
  4. Եթե ​​սերվերից պատասխան չկա, ապա հղումը չի աշխատում:
  5. Սերվերի պատասխանը 404 է:
  6. Հակառակ դեպքում հղումն աշխատում է։
  7. Հարցումն ավարտված է, մենք թողարկում ենք ռեսուրսներ:
  8. Եկեք ավելացնենք նոր URL մուլտի նկարագրիչին:
  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: 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 կոդը: 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

Ստուգումը տևեց մոտ 2 վայրկյան։ Միաժամանակ 10 թեմա գործարկելով, կատարողականը 10 անգամ ավելանում է սովորական cURL հարցումների համեմատ: Սերվերի պատասխանի բովանդակությունը ստանալու համար օգտագործեք գործառույթը curl_multi_getcontent ($ch) , որտեղից $ch-ը նկարագրիչ է curl_multi_info_read() .

CURL-ի այլ առանձնահատկություններ PHP-ում

HTTP նույնականացում

Եթե ​​HTTP հարցումը պահանջում է նույնականացում, օգտագործեք հետևյալ կոդը.

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); // ուղարկել օգտանունը և գաղտնաբառը curl_setopt ($ch, CURLOPT_USERPWD, «myusername:mypassword»); // եթե վերահղումները թույլատրված են curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL-ը կուղարկի գաղտնաբառը curl_setopt ($ch, CURLOPT_UNRESTRICTED_AUTH, 1) վերահղումներից հետո; $ ելք = curl_exec ($ ch); curl_close ($ ch);

Վերբեռնեք FTP-ի միջոցով

PHP-ն ունի իր սեփական գրադարանը FTP-ի հետ աշխատելու համար, բայց կարող եք նաև օգտագործել cURL:

// կարդալ ֆայլը $file = fopen("/path/to/file", "r"); // url-ն արդեն պարունակում է անհրաժեշտ տվյալները $url = "ftp://username: [էլփոստը պաշտպանված է]:21/ուղի/դեպի/նոր/ֆայլ"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ընտրանքներ curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt ($ch, CURLOPT_INFILE, $fp); curl_setopt ($ch, CURLOPT_INFILESIZE, ֆայլի չափը ("/ուղի/դեպի/ֆայլ")); curl_setopt ($ch, CURLOPT_FTPASCII, 1); $ելք = curl_exec($ ch), curl_close ($ch);

Օգտագործելով վստահված անձ

Հարցումները կարող են կատարվել հատուկ վստահված անձի միջոցով.

$ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt ($ch, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); // վստահված անձի հասցե curl_setopt ($ch, CURLOPT_PROXY, «11.11.11.11:8080»); // եթե պահանջվում է թույլտվություն curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $ ելք = curl_exec ($ ch); curl_close ($ ch);

Հետադարձ զանգի գործառույթներ

Հնարավոր է օգտագործել հետադարձ զանգեր, երբ հարցումն աշխատում է, չսպասելով դրա ավարտին: Օրինակ, մինչ սերվերի պատասխանը ներբեռնվում է, մենք կարող ենք օգտագործել արդեն ստացված տվյալները՝ չսպասելով ամբողջական ներբեռնմանը:

$ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,"http://example.com"); curl_setopt ($ ch, CURLOPT_WRITEFUNCTION, «progress_function»); curl_exec ($ ch); curl_close ($ ch); ֆունկցիա progress_function($ch,$str) (echo $str; return strlen($str);)

Հետ կանչելու ֆունկցիան պետք է վերադարձնի տողի երկարությունը, որպեսզի հարցումը ճիշտ աշխատի:

Ամեն անգամ, երբ ստացվում է սերվերի պատասխանի հաջորդ մասը, կկանչվի հետադարձ զանգ:

Եզրակացություն

Այս հոդվածում մենք նայեցինք cURL-ի առաջադեմ առանձնահատկություններին PHP-ում: Հաջորդ անգամ, երբ դուք պետք է URL հարցումներ կատարեք, օգտագործեք cURL:

Մենք հաճախ ստիպված ենք լինում ինտերնետից ներբեռնել տարբեր ֆայլեր, օրինակ՝ գործարկվող ծրագրային ֆայլեր, սցենարային ֆայլեր, սկզբնաղբյուրների արխիվներ։ Բայց դա միշտ չէ, որ անհրաժեշտ է անել բրաուզերի միջոցով: Շատ իրավիճակներում շատ ավելի հեշտ է բոլոր գործողությունները կատարել տերմինալի միջոցով: Քանի որ այս կերպ դուք կարող եք ավտոմատացնել գործընթացը: Մյուս կողմից, վեբ վարպետները ժամանակ առ ժամանակ պետք է փորձարկեն կայքի հասանելիությունը, ստուգեն ուղարկված և ստացված վերնագրերը և շատ ավելին:

Նման տիրույթի նման խնդիրներն ու խնդիրները լուծելու համար կարող եք օգտագործել curl կոմունալը: Այն թույլ է տալիս լուծել խնդիրների շատ ավելի լայն շրջանակ, ներառյալ նույնիսկ կայքում օգտագործողի գործողությունների մոդելավորումը: Այս հոդվածում մենք կանդրադառնանք, թե ինչպես օգտագործել գանգուրը, ինչ է դա և ինչու է անհրաժեշտ այս ծրագիրը:

Իրականում, curl-ը ավելին է, քան պարզապես հրամանի տող օգտակար ծրագիր Linux-ի կամ Windows-ի համար: Սա գրադարանների մի շարք է, որոնք իրականացնում են URL էջերի հետ աշխատելու և ֆայլեր փոխանցելու հիմնական հնարավորությունները: Գրադարանը աջակցում է արձանագրությունների հետ աշխատելուն՝ FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, ինչպես նաև POP3, IMAP և SMTP: Այն հիանալի է էջերում օգտատերերի գործողությունները և URL-ներով այլ գործողությունները մոդելավորելու համար:

Curl գրադարանի աջակցությունն ավելացվել է բազմաթիվ տարբեր ծրագրավորման լեզուների և հարթակների: Curl utility-ը անկախ փաթաթող է այս գրադարանի համար: Հենց այս օգտակարությունն է, որի վրա մենք կկենտրոնանանք այս հոդվածում:

curl հրամանը

Նախքան նկարագրությանը անցնելը, թե ինչպես կարող է օգտագործվել curl linux հրամանը, եկեք նայենք ինքնին օգտակարին և դրա հիմնական տարբերակներին, որոնք մեզ անհրաժեշտ կլինեն: Օգտակար ծրագրի շարահյուսությունը շատ պարզ է.

$ curl տարբերակների հղում

Հիմա եկեք նայենք հիմնական տարբերակներին.

  • -# - ցուցադրել պարզ առաջընթացի սանդղակը բեռնման ժամանակ;
  • -0 - օգտագործել http 1.0 արձանագրությունը;
  • -1 - օգտագործել tlsv1 գաղտնագրման արձանագրությունը;
  • -2 - օգտագործել sslv2;
  • -3 - օգտագործել sslv3;
  • -4 - օգտագործել ipv4;
  • -6 - օգտագործել ipv6;
  • - նշեք ձեր USER_AGENT;
  • - պահպանել Cookie-ը ֆայլում;
  • - ուղարկել Cookie սերվերին ֆայլից;
  • - շարունակեք ներբեռնել ֆայլը ընդմիջման կետից կամ նշված օֆսեթից;
  • - առավելագույն սպասման ժամանակը սերվերից պատասխանի համար.
  • - ուղարկել տվյալներ POST մեթոդով;
  • - պահպանել սերվերի կողմից վերադարձված վերնագրերը ֆայլում.
  • - սահմանել Referer-uri դաշտը՝ նշելով, թե որ կայքից է օգտատերը եկել.
  • - օգտագործել արտաքին SSL վկայագիր;
  • - մի ցուցադրեք սխալի հաղորդագրություններ;
  • - ուղարկել տվյալներ ձևի տեսքով.
  • - եթե այս տարբերակը միացված է, ապա -d տարբերակում նշված բոլոր տվյալները կփոխանցվեն GET մեթոդով;
  • - վերնագրերի փոխանցում սերվերին;
  • -Ես- ստանալ միայն HTTP վերնագիրը և անտեսել էջի ամբողջ բովանդակությունը.
  • - կարդալ և ուղարկել թխուկներ ֆայլից;
  • - հեռացնել վերնագիրը հարցումից;
  • - ընդունել և մշակել վերահղումները;
  • - Վերահղումների առավելագույն քանակը՝ օգտագործելով Location;
  • - ելքային էջի բովանդակությունը ֆայլ;
  • - պահպանել բովանդակությունը սերվերի վրա գտնվող էջի կամ ֆայլի անունով ֆայլում.
  • -էջ- օգտագործել վստահված անձ;
  • -- պրոտո- նշեք օգտագործվող արձանագրությունը.
  • - պահպանել հեռավոր ֆայլի վերջին փոփոխության ժամանակը.
  • - ցուցադրել նվազագույն տեղեկատվություն սխալների մասին.
  • - ցուցադրել սխալի հաղորդագրությունները;
  • - վերբեռնեք ֆայլը սերվերին;
  • -v- առավել մանրամասն արդյունքը;
  • -y- ներբեռնման նվազագույն արագություն;
  • - ներբեռնման առավելագույն արագություն;
  • - ներբեռնեք ֆայլը միայն այն դեպքում, եթե այն փոփոխվել է նշված ժամանակից ուշ.
  • - ցուցադրել տարբերակը:

Սա ամենևին էլ curl linux-ի բոլոր տարբերակներից չէ, բայց այն թվարկում է այն հիմունքները, որոնք դուք պետք է օգտագործեք:

Ինչպե՞ս օգտագործել գանգուրը:

Մենք լուսաբանել ենք այն ամենը, ինչ կապված է curl utility-ի հետ աշխատելու տեսության հետ, այժմ ժամանակն է անցնել պրակտիկայի և նայել curl հրամանի օրինակներին:

Ամենատարածված առաջադրանքը սա է. Ֆայլը ներբեռնելը շատ պարզ է: Դա անելու համար պարզապես ֆայլի անունը կամ html էջը փոխանցեք օգտակարին պարամետրերում.

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

Բայց այստեղ ձեզ սպասում է մեկ անակնկալ. ֆայլի ամբողջ բովանդակությունը կուղարկվի ստանդարտ ելք: Այն ցանկացած ֆայլում գրելու համար օգտագործեք՝

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

Եվ եթե ցանկանում եք, որ ստացված ֆայլը անվանվի նույնը, ինչ սերվերի ֆայլը, օգտագործեք -O տարբերակը.

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

curl -# -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Անհրաժեշտության դեպքում կարող եք ներբեռնել մի քանի ֆայլ մեկ հրամանով.

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

Մեկ այլ բան, որը կարող է օգտակար լինել ադմինիստրատորի համար, ֆայլի ներբեռնումն է միայն այն դեպքում, եթե այն փոփոխված է.

curl -z 21-դեկտեմբեր-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Արագության սահմանաչափ

Դուք կարող եք սահմանափակել ներբեռնման արագությունը պահանջվող սահմանաչափով, որպեսզի չծանրաբեռնեք ցանցը՝ օգտագործելով -Y տարբերակը.

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

Այստեղ դուք պետք է նշեք վայրկյանում ներբեռնվող կիլոբայթների քանակը: Կարող եք նաև դադարեցնել կապը, եթե արագությունը բավարար չէ, սա անելու համար օգտագործեք -Y տարբերակը.

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

Ֆայլերի փոխանցում

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

Կամ եկեք ստուգենք, որ ֆայլն ուղարկված է HTTP-ի միջոցով, դրա համար կա հատուկ ծառայություն.

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

Ի պատասխան, կոմունալը ձեզ կասի, թե որտեղ կարող եք գտնել ներբեռնված ֆայլը:

POST տվյալների ուղարկում

Դուք կարող եք ուղարկել ոչ միայն ֆայլեր, այլև ցանկացած տվյալ՝ օգտագործելով POST մեթոդը: Հիշեցնեմ, որ այս մեթոդն օգտագործվում է տարբեր ձևերի տվյալներ ուղարկելու համար։ Նման հարցում ուղարկելու համար օգտագործեք -d տարբերակը։ Փորձարկման համար մենք կօգտագործենք նույն ծառայությունը.

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

Եթե ​​դուք գոհ չեք այս ներկայացման տարբերակից, կարող եք ձևացնել, որ ներկայացնում եք ձևը: Դրա համար կա տարբերակ -F.

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

Այստեղ գաղտնաբառի դաշտը ձևով փոխանցում ենք որպես պարզ տեքստ, նույն կերպ կարող եք փոխանցել մի քանի պարամետր։

Թխուկների ուղարկում և ստացում

Քուքիները օգտագործվում են կայքերի կողմից՝ օգտատիրոջ կողմից որոշակի տեղեկատվություն պահելու համար: Սա կարող է անհրաժեշտ լինել, օրինակ, նույնականացման համար: Դուք կարող եք ուղարկել և ստանալ թխուկներ՝ օգտագործելով curl-ը: Ստացված թխուկները ֆայլում պահելու համար օգտագործեք -c տարբերակը.

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

Այնուհետև կարող եք ետ ուղարկել curl cookie-ը.

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

Վերնագրի փոխանցում և վերլուծություն

Մեզ միշտ չէ, որ էջի բովանդակությունը պետք է: Երբեմն միայն վերնագրերը կարող են հետաքրքիր լինել: Միայն դրանք ցուցադրելու համար կա -I տարբերակը.

գանգուր -I https://site

Իսկ -H տարբերակը թույլ է տալիս ուղարկել մի քանի կամ ավելի սերվեր, օրինակ՝ կարող եք փոխանցել If-Modified-Since վերնագիրը, որպեսզի էջը վերադարձվի միայն այն դեպքում, եթե այն փոփոխված է.

գանգուր վավերացում

Եթե ​​սերվերը պահանջում է նույնականացման սովորական տեսակներից մեկը, ինչպիսին է HTTP Basic-ը կամ FTP-ն, ապա curl-ը կարող է շատ հեշտությամբ լուծել այս խնդիրը: Նույնականացման մանրամասները նշելու համար պարզապես նշեք դրանք երկու կետով առանձնացված -u տարբերակում.

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

Նույն կերպ կիրականացվի նույնականացումը HTTP սերվերների վրա:

Օգտագործելով վստահված անձ

Եթե ​​Ձեզ անհրաժեշտ է պրոքսի սերվեր օգտագործել ֆայլեր ներբեռնելու համար, ապա դա նույնպես շատ պարզ է: -x տարբերակում բավական է նշել պրոքսի սերվերի հասցեն.

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

եզրակացություններ

Այս հոդվածում մենք նայեցինք, թե ինչպես օգտագործել գանգուրը, ինչու է անհրաժեշտ այս օգտակար ծրագիրը և դրա հիմնական հնարավորությունները: Չնայած նրանց նմանությանը, նրանք շատ տարբեր են: Curl linux հրամանը նախատեսված է ավելի շատ սերվերի վրա տարբեր գործողություններ վերլուծելու և մոդելավորելու համար, մինչդեռ wget-ն ավելի հարմար է ֆայլեր ներբեռնելու և սողացող կայքերի համար:

Այս հոդվածում կխոսվի այնպիսի հզոր գործիքի մասին, ինչպիսին է cURL-ը, ինչպես նաև PHP-ի գրադարանը, որն ապահովում է այս գործիքի հասանելիությունը՝ libcurl: Ինչի՞ համար է այս ամենը։ Սերվերի հետ հաղորդակցվելու համար՝ օգտագործելով տվյալների փոխանցման արձանագրությունները, օրինակ՝ http կամ ftp: Մնացած արձանագրությունները մեզ առանձնապես հետաքրքիր չեն, եթե ինչ-որ մեկը ցանկանում է ավելի խորանալ այս թեմայի մեջ, նա ստիպված կլինի փորել անգլերեն լեզվով ռեսուրսներ, և այս հոդվածը կպարունակի օգտագործման հիմունքներ և օրինակներ:

Ի՞նչ են կոնկրետ cURL-ը և libcurl-ը: Ընդհանուր կետեր

Այսպիսով, libcurl գրադարանը մեզ հնարավորություն է տալիս տվյալները փոխանցել սերվերին և ստանալ պատասխաններ դրանից: Ի՞նչ է սա մեզ տալիս: Օգտատիրոջ վարքագիծը ընդօրինակելու ունակություն կամ ! Դուք կարող եք ստանալ էջերի բովանդակությունը հետագա վերլուծության համար, կարող եք ստանալ ծառայության պատասխանների վերնագրեր և ծրագրային կերպով մուտք գործել կայքեր, ստեղծել հաղորդագրություններ (օրինակ՝ Twitter-ում կամ ֆորումներում) կամ տեղեկատվություն տեղադրելու սցենարներ: Ամեն ինչ սահմանափակված է միայն ձեր երևակայությամբ:

CURL-ի տեղադրում Denwer-ում (Դենվեր): Ինչպե՞ս սկսել օգտագործել libcurl-ը:

Առաջին բանը, որ մենք պետք է անենք, գրադարանի տեղադրումն է: Իմ տեղական համակարգչում ես օգտագործում եմ Denwer build-ը, ինչպես սկսնակ վեբ վարպետների ճնշող մեծամասնությունը, որոնց համար նախատեսված է հոդվածը: Փորձառու օգտատերերը, ովքեր ինքնուրույն տեղադրում են php+apache+mysql համակցությունը, կկարողանան տեղադրել cURL, ես նրանց չեմ կարող բացատրել, թե ինչպես է դա արվում;) Իսկ մենք՝ սկսնակներս, օգտագործում ենք պատրաստի լուծումներ՝ հեշտացնելու համար։ Հետևաբար, տեղադրեք libcurl-ը հետևյալ կերպ.

  • Ներբեռնեք պատրաստի ընդլայնման փաթեթը «PHP5. լրացուցիչ մոդուլներ»:
  • Համապատասխանաբար, մենք այն տեղադրում ենք: Ոչ մի բարդ բան, համաձայնեք :)
  • Բացեք ֆայլը Notepad-ում (ես միշտ խորհուրդ եմ տալիս Notepad++): X:/webservers/usr/local/php5/php.ini //որտեղ X-ը ձեր սկավառակն է, որտեղ տեղադրված է վեբսերվերը:

    և տերմինների սկզբում հանել ստորակետը.

    ;extension=php_curl.dll

  • Մենք վերագործարկում ենք Դենվերի սերվերը:

Պատրաստ. Գրադարանի ֆունկցիոնալությունը ստուգելու համար կարող եք զանգահարել phpinfo() ֆունկցիան և գտնել այնտեղ գիծը՝ cURL աջակցությունը միացված է։ Շնորհավորում եմ ձեր առաջին հաղթանակի կապակցությամբ։

CURL-ի և առաջին քայլերի նկարագրությունը

Գործիքի հետ աշխատելու համար այն պետք է նախաստորագրվի: Դա արվում է հետևյալ կերպ.

$ch = curl_init();

Մենք օգտագործեցինք cURL նիստի սկզբնավորման գործառույթը: Այս դեպքում դուք կարող եք անմիջապես տեղադրել URL-ը, այսպես.

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

Եվ դուք կարող եք դա անել ավելի ուշ, տարբերակներում: Ընտրանքների տեղադրման հերթականությունը նշանակություն չունի: Սա կատարվում է մեկ այլ գործառույթով.

Curl_setopt (ռեսուրս ch, լարային տարբերակ, խառը արժեք)

Մենք արդեն ստեղծել ենք այս ֆունկցիայի առաջին պարամետրը, այսինքն՝ ռեսուրսը ch, հենց վերևում, բայց կան բազմաթիվ տարբերակների և արժեքների պարամետրեր: Կարծում եմ, որ չպետք է բոլորը copy-paste անել այստեղ, այլ ուղղակի հղում տալ գործառույթի մանրամասն նկարագրությանը, հուսով եմ, որ ոչ ոք չի վիրավորվի՝ curl_setopt:

Ես կտամ ընտրանքների կարգավորման օրինակ՝ օգտագործելով URL որպես օրինակ.

$url = «https://site»; curl_setopt ($ch, CURLOPT_URL, $url);

Կարգավորման ընտրանքների ևս մի քանի օրինակ. եկեք ստանանք սերվերի պատասխանի վերնագիրը՝ առանց էջը ստանալու։

Curl_setopt ($ch, CURLOPT_HEADER, 1); // կարդալ curl_setopt վերնագիրը ($ch, CURLOPT_NOBODY, 1); // կարդալ ՄԻԱՅՆ վերնագիրը առանց մարմնի

Այսպիսով, մենք նախաստորագրել ենք նիստը, սահմանել ենք մեզ անհրաժեշտ պարամետրերը, այժմ մենք կատարում ենք ստացված հարցումը, փակում ենք նիստը և ցուցադրում արդյունքը.

$ արդյունք = curl_exec ($ ch); curl_close ($ ch); echo $ արդյունք;

Արդյունքում մենք ստանում ենք libcurl գրադարանի օգտագործման մեր առաջին լիարժեք օրինակը.

$ch = curl_init(); $url = «https://site»; curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_HEADER, 1); // կարդալ curl_setopt վերնագիրը ($ch, CURLOPT_NOBODY, 1); // կարդալ ՄԻԱՅՆ վերնագիրը առանց մարմնի $result = curl_exec($ch); curl_close ($ ch); echo $ արդյունք;

Ինչպես է այն աշխատում, հուսով եմ, պարզ է, քանի որ մենք յուրաքանչյուր քայլին առանձին ենք նայել :) Արդյունքում սերվերից ստանում ենք HTTP պատասխանի վերնագիր, որն անպայման կվերլուծենք ստորև՝ ավելի լավ հասկանալու համար փոխգործակցության բոլոր փուլերը։ բրաուզերը և սերվերը.

HTTP/1.1 200 OK Սերվեր՝ nginx/1.2..php 1

Հիասքանչ! Մենք ստացանք պատասխանի վերնագիրը սերվերից և փորձարկեցինք գրադարանը գործողության մեջ: Ինչպե՞ս է սա օգտակար մեզ համար: Քանի որ այժմ դուք կարող եք մոտավորապես պատկերացնել գործողությունների հաջորդականությունը cURL-ի հետ աշխատելիս.

  • Նախաձեռնել նստաշրջանը (curl_init)
  • Սահմանեք մեզ անհրաժեշտ տարբերակները (curl_setopt)
  • Կատարել ստացված հարցումը (curl_exec)
  • Ավարտել նստաշրջանը (curl_close)

HTTP հարցման վերնագրի կառուցվածքը

Օրինակ, ես դիմեցի ya.ru էջին և նայեցի գեներացված բրաուզերի հարցումը և սերվերից ստացված պատասխանը: Այստեղ են:
Հայց
GET / HTTP/1.1 - Մենք փորձում ենք ստանալ էջը /-ով, այսինքն՝ հիմնական էջը, որը գտնվում է թղթապանակի արմատում: Մենք օգտագործում ենք արձանագրության 1.1 տարբերակը:
Օգտվողի գործակալ. Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Տարբերակ/12.14— Մենք ներկայանում ենք սերվերին, մենք Opera բրաուզերն ենք։
Հաղորդավար՝ ya.ru — Հայցվող ռեսուրսի տիրույթի անվանումը:
Ընդունել՝ տեքստ/html, հավելված/xml;q=0.9, հավելված/xhtml+xml, պատկեր/png, պատկեր/վեբ, պատկեր/jpeg, պատկեր/գիֆ, պատկեր/x-xbitmap, */*;q=0.1- ընդունելի ռեսուրսների ձևաչափերի ցանկ:
Ընդունել-Լեզու՝ ru-RU,ru;q=0.9,en;q=0.8— Աջակցվող լեզուների ցանկ:
Ընդունել-կոդավորում՝ gzip, deflate— Աջակցված կոդավորման մեթոդներ:
Թխուկ՝ yandexuid=ХХХХХ - Թխուկներ, անհրաժեշտության դեպքում:
Միացում. Keep-Alive - Խնդրում ենք մի խզեք կապը և մնացեք կապի մեջ:
Պատասխանել
HTTP/1.1 200 Ok - Մենք պատասխան ենք ստանում 200 կոդով, ինչը նշանակում է, որ ամեն ինչ կարգին է:
Սերվեր՝ nginx - Սերվերն իրեն ներկայացրեց՝ սա nginx է:
Ամսաթիվ՝ Կիր, 10 Մարտ 2013 14:10:50 GMT— Ընթացիկ ամսաթիվը և ժամը սերվերում:
Content-Type՝ text/html; նիշերի հավաքածու=UTF-8- Բովանդակության տեսակը և կոդավորումը:
Միացում՝ փակ - սերվերը չի ցանկանում մշտական ​​կապ պահպանել մեզ հետ, ուստի անմիջապես փակում է այն: Հաջորդ հարցման համար կստեղծվի նոր կապ:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate— Քեշավորման կառավարում: Այս դեպքում այն ​​անջատված է:
Սպառվում է՝ Կիր, 10 Մարտ 2013, 14:10:50 GMT— Նիստի ակնկալվող ավարտի ամսաթիվը. Մեր դեպքում դա համընկնում է բացման ժամանակի հետ, քանի որ սերվերը անմիջապես փակել է այն՝ մշակումից անմիջապես հետո։
Վերջին փոփոխությունը՝ Կիր, 10 մարտի 2013 14:10:50 GMT- Վերջին փոփոխության ժամանակը:
Content-Encoding. gzip — Տեղեկատվության կոդավորման մեթոդ:
Բոլոր պարամետրերի ամբողջական ցանկը, որոնք կարելի է գտնել HTTP հարցման վերնագրում, կարելի է գտնել Վիքիպեդիայում:
Այժմ դուք մոտավոր պատկերացում ունեք, թե ինչպես են ձեր զննարկիչը և վեբ սերվերը շփվում միմյանց հետ: Սա շատ օգտակար է իմանալու և հասկանալու համար, քանի որ մենք կփորձենք ընդօրինակել բրաուզերի գործողությունները՝ օգտագործելով libcurl գրադարանը: Շարունակիր.

Գրադարանի հետ աշխատելու օրինակ

Կարծում եմ, որ այն բանից հետո, երբ որոշ ընդհանուր կետեր արդեն պարզ են, և ամեն ինչ կարծես թե պարզ է, ապա ժամանակն է անցնել պրակտիկայի և կատարելագործել ձեր հմտությունները՝ օգտագործելով օրինակ: Անձամբ իմ ձեռքերը միշտ քոր են գալիս՝ ամեն ինչ գործնականում փորձելու համար :)

Քանի որ cURL-ն այնքան լավ է վերլուծողների համար, եկեք դիտարկենք էջի կոդը իր հասցեով ստանալու գործառույթը: Այս դեպքում ելքը կլինի վերնագրի, էջի բովանդակության և նույնիսկ սխալի կոդերի զանգված, եթե ինչ-որ բան սխալ լինի:

Գործառույթ get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Տարբերակ/12.14"; $ch = curl_init ($url); curl_setopt ($ch, CURLOPT_RETRANS); // վերադարձնում է վեբ էջը curl_setopt ($ch, CURLOPT_HEADER, 0); // չի վերադարձնում վերնագրերը curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); // հետևում է curl_setopt վերահղումներին ($ch, CURLOPT_ENCODING, ""); // գործընթացներ բոլոր կոդավորումները curl_setopt ($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 120); // կապի ժամկետի ավարտը curl_setopt ($ch, CURLOPT_TIMEOUT, 120); // պատասխանի ժամանակի ավարտ , 10); // դադարեցնել 10-րդ վերահղումից հետո $content = curl_exec ($ch); $err = curl_errno ($ch); $errmsg = curl_error ($ch); $header = curl_getinfo ($ch); curl_close ( $ ch); $header["errno"] = $err; $header["errmsg"] = $errmsg; $header["content"] = $content; վերադարձնել $header;)

Մուտքային պարամետրեր.
url - էջի կամ կայքի հասցեն:
Ելքային պարամետրի արժեքները (զանգված երեք տարրով).
header['errno'] - եթե ինչ-որ բան սխալ է տեղի ունեցել, այստեղ սխալի կոդ կլինի:
header['errmsg'] – սխալի տեքստը կհայտնվի այստեղ:
header['content'] - փաստացի էջ\ֆայլ\պատկեր և այլն։

Մենք օգտագործում ենք ֆունկցիան, օրինակ, այսպես.

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

Ամեն ինչ պետք է անցնի առանց սխալների, և դուք կստանաք էջի կոդը $page փոփոխականում: Եթե ​​փորձենք ստանալ գոյություն չունեցող yaaaaaaaaaaa.ru էջը, ապա կստանանք սխալ.

Չհաջողվեց լուծել հյուրընկալողը՝ yaaaaaaaaaaaa.ru; Հյուրընկալը չի ​​գտնվել

Ամեն ինչ ճիշտ և գեղեցիկ է մշակված :)
Այնուհետև կարող եք էջի կոդով անել այն, ինչ ուզում եք, օրինակ՝ վերլուծել այն կանոնավոր արտահայտություններով։ Բայց այս ամենը հաջորդ դասերում, բայց առայժմ եկեք կանգ առնենք սրան:

JavaScript-ն արգելափակված է ձեր դիտարկիչում: Խնդրում ենք միացնել JavaScript-ը, որպեսզի կայքը գործի:

Գանգուր

PHP-ն աջակցում է libcurl-ին՝ Դանիել Ստենբերգի կողմից ստեղծված գրադարան, որը թույլ է տալիս միանալ տարբեր տեսակի սերվերների և արձանագրությունների:
libcurl-ը ներկայումս աջակցում է http, https, ftp, gopher, telnet, dict, file և ldap արձանագրությունները:
libcurl-ն աջակցում է նաև HTTPS վկայագրերին, HTTP POST-ին, HTTP PUT-ին, FTP-ի վերբեռնմանը (դա կարելի է անել նաև ftp PHP ընդլայնման միջոցով), HTTP ձևի վրա հիմնված վերբեռնում, վստահված անձեր, թխուկներ և օգտատեր+գաղտնաբառի իսկությունը:

Այս գործառույթները ներդրվել են PHP 4.0.2-ում:

curl_init

curl_init - սկզբնավորում է CURL նիստը:

Նկարագրություն

ռեսուրս curl_init()

Գործառույթ curl_init ()սկզբնավորում է նոր նստաշրջան և վերադարձնում է CURL բռնակ՝ և գործառույթներում օգտագործելու համար: Եթե ​​ընտրովի պարամետրը urlտրամադրվում է, ապա CURLOPT_URL տարբերակը կստանա այս պարամետրի արժեքը: Դուք կարող եք ձեռքով տեղադրել այն՝ օգտագործելով .

curl_setopt

curl_setopt - սահմանում է CURL փոխանցման/փոխանցման տարբերակները:

Նկարագրություն

բուլ curl_setopt(ռեսուրս ch, լարային տարբերակ, խառը արժեք)

Գործառույթ curl_setopt ()սահմանում է պարամետրով բացահայտված CURL նստաշրջանի տարբերակները գլ. Պարամետր տարբերակայն տարբերակն է, որը ցանկանում եք սահմանել, և արժեքըսա օպցիոնի արժեքն է տարբերակ .

Պարամետր արժեքըպետք է երկար լինի հետևյալ ընտրանքների համար (նշված ըստ պարամետրի տարբերակ):

  • CURLOPT_INFILESIZEԵթե ​​դուք ֆայլ եք վերբեռնում հեռավոր կայք, այս տարբերակը պետք է օգտագործվի՝ PHP-ին ասելու համար, թե որքան է լինելու ակնկալվող ինֆայլի չափը:
  • CURLOPT_VERBOSEՍահմանեք այս տարբերակը ոչ զրոյական արժեքի, եթե ցանկանում եք, որ CURL-ը զեկուցի բոլոր գործողությունները:
  • CURLOPT_HEADERՍահմանեք այս տարբերակը ոչ զրոյական արժեքի, եթե ցանկանում եք, որ վերնագիրը ներառվի ելքի մեջ:
  • CURLOPT_NOPROGRESSՍահմանեք այս տարբերակը ոչ զրոյական արժեքի, եթե չեք ցանկանում, որ PHP-ն ցուցադրի CURL փոխանցման առաջընթացի ցուցիչը: (PHP-ն ավտոմատ կերպով սահմանում է այս տարբերակը ոչ զրոյական արժեքի, դուք միայն այն պետք է փոխեք վրիպազերծման ժամանակ:)
  • CURLOPT_NOBODYՍահմանեք այս տարբերակը ոչ զրոյական արժեքի, եթե չեք ցանկանում, որ մարմինը ներառվի ելքի մեջ:
  • CURLOPT_FAILONERRORՍահմանեք այս ընտրանքը ոչ զրոյական արժեքի, եթե ցանկանում եք, որ PHP-ն անաղմուկ դուրս գա, եթե վերադարձված HTTP կոդը 300-ից մեծ է: Լռելյայնորեն, էջը սովորաբար վերադարձվում է՝ անտեսելով կոդը:
  • CURLOPT_UPLOAD: Սահմանեք այս տարբերակը ոչ զրոյական արժեքի, եթե ցանկանում եք, որ PHP-ն պատրաստի ֆայլը վերբեռնման համար:
  • CURLOPT_POSTՍահմանեք այս տարբերակը ոչ զրոյական արժեքի, եթե ցանկանում եք, որ PHP-ն կատարի սովորական HTTP POST: Այս POST-ը սովորական դիմումի ձևով է/x-www-form-urlencoded, ամենից հաճախ օգտագործվում է HTML ձևերի կողմից:
  • CURLOPT_FTPLISTONLYՍահմանեք այս տարբերակը ոչ զրոյական արժեքի, և PHP-ն կցուցադրի FTP գրացուցակի անունները:
  • CURLOPT_FTPAPPENDՍահմանեք այս ընտրանքը ոչ զրոյական արժեքի, և PHP-ն այն վերագրելու փոխարեն կավելացվի հեռավոր ֆայլին:
  • CURLOPT_NETRCՍահմանեք այս ընտրանքը ոչ զրոյական արժեքի, և PHP-ն կսկանավորի ձեր ~./netrc ֆայլը՝ գտնելու ձեր օգտանունը և գաղտնաբառը այն հեռավոր կայքի համար, որին միանում եք:
  • CURLOPT_FOLLOWLOCATIONՍահմանեք այս տարբերակը ոչ զրոյական արժեքի՝ հետևելու ցանկացած «Location. )
  • CURLOPT_PUT: Սահմանեք այս տարբերակը ոչ զրոյական արժեքի վրա HTTP PUT ֆայլը: PUT-ի ֆայլը պետք է սահմանվի CURLOPT_INFILE-ի և CURLOPT_INFILESIZE-ի միջոցով:
  • CURLOPT_MUTEՍահմանեք այս ընտրանքը ոչ զրոյական արժեքի վրա, և PHP-ն կգործի թաքնված՝ կապված CURL ֆունկցիաների հետ:
  • CURLOPT_TIMEOUT. Անցեք երկար որպես պարամետր, որը պարունակում է վայրկյանների առավելագույն ժամանակը, որը թույլ եք տալիս CURL գործառույթներին գործարկել:
  • CURLOPT_CONNECTTIMEOUTԱնցեք երկարություն որպես պարամետր, որը պարունակում է առավելագույն ժամանակը, վայրկյաններով, որը թույլ եք տալիս սպասել, երբ փորձում եք միանալ: Օգտագործեք 0՝ ընդմիշտ սպասելու համար:
  • CURLOPT_LOW_SPEED_LIMITԱնցեք երկար որպես պարամետր, որը պարունակում է փոխանցման արագություն, բայթ/վրկ, որից ցածր փոխանցումը պետք է կատարվի CURLOPT_LOW_SPEED_TIME-ի կատարման ընթացքում, վայրկյաններով, որպեսզի PHP-ն այն չափազանց դանդաղ համարի և ընդհատի այն:
  • CURLOPT_LOW_SPEED_TIMEԱնցեք երկար որպես պարամետր, որը պարունակում է վայրկյաններով այն ժամանակը, որից ցածր փոխանցումը պետք է գործարկվի CURLOPT_LOW_SPEED_LIMIT, որպեսզի PHP-ն այն չափազանց դանդաղ համարի և դադարեցնի այն:
  • CURLOPT_RESUME_FROM-ից. Անցեք երկար որպես պարամետր, որը պարունակում է բայթերի օֆսեթ, որից պետք է սկսվի փոխանցումը:
  • CURLOPT_SSLVERSION. Անցեք երկար որպես պարամետր, որը պարունակում է SSL տարբերակը օգտագործելու համար (2 կամ 3): Լռելյայնորեն, PHP-ն փորձում է ինքնուրույն որոշել սա, թեև որոշ դեպքերում ձեզանից պահանջվում է ձեռքով սահմանել այն:
  • CURLOPT_SSL_VERIFYHOSTԱնցեք երկար, եթե CURL-ը պետք է ստուգի հասակակից վկայագրի ընդհանուր անունը SSL ձեռքսեղմումով: 1 արժեքը ցույց է տալիս, որ մենք պետք է ստուգենք ընդհանուր /ընդհանուր անունի առկայությունը, 2 արժեքը ցույց է տալիս, որ մենք պետք է համոզվենք, որ այն համապատասխանում է տրամադրված հոսթի անվանմանը:
  • CURLOPT_TIMECONDITION. Անցեք երկար որպես պարամետր, որը որոշում է, թե ինչպես է վերաբերվում CURLOPT_TIMEVALUE-ին: Դուք կարող եք այս պարամետրը սահմանել TIMECOND_IFMODSINCE կամ TIMECOND_ISUNMODSINCE: Սա աշխատում է միայն HTTP-ի համար:
  • CURLOPT_TIMEVALUEԱնցեք երկար որպես պարամետր, որը վայրկյաններով ժամանակն է 1970 թվականի հունվարի 1-ից: Այս ժամանակը օգտագործվում է CURLOPT_TIMEVALUE տարբերակով սահմանված կարգով, կամ կօգտագործվի լռելյայն TIMECOND_IFMODSINCE:
  • CURLOPT_RETURNՓՈԽԱՆՑՈՒՄԱնցեք ոչ զրոյական արժեք, եթե ցանկանում եք, որ CURL-ը ուղղակիորեն վերադարձնի ստացված տեղեկատվությունը, այն ուղղակիորեն տպելու փոխարեն:

Պարամետր արժեքըպետք է լինի տող հետևյալ պարամետրերի արժեքների համար տարբերակ :

Հետևյալ ընտրանքները ակնկալում են ֆայլի նկարագրիչ, որը ստացվում է ֆունկցիայի միջոցով fopen () :

  • CURLOPT_FILEՖայլը, որտեղ պետք է տեղադրվի ձեր փոխանցման ելքը, լռելյայն այն STDOUT է:
  • CURLOPT_INFILEՖայլը, որից ստացվում է ձեր փոխանցման մուտքագրումը:
  • CURLOPT_WRITEHEADERՖայլ՝ ելքի վերնագրի մասի ձայնագրման համար:
  • CURLOPT_STDERRՖայլ՝ սխալներ գրանցելու համար, stderr-ի փոխարեն:

Պարամետր արժեքը long write_callback (ռեսուրս ch, տողային տվյալներ) ( ... վերադարձնել strlen ($data);) տարբերակ :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

Պարամետր արժեքըպետք է լինի հետևյալ ձևի ֆունկցիա string read_callback (ռեսուրս ch, ռեսուրս fd, երկար երկարություն)()հետևյալ պարամետրերի արժեքների համար տարբերակ :

  • CURLOPT_READFUNCTION: .

curl_exec

curl_exec - իրականացնում է CURL նիստը:

Նկարագրություն

բուլ curl_exec(ռեսուրս ch)

Այս ֆունկցիան պետք է կանչվի այն բանից հետո, երբ դուք նախաստորագրեք CURL նիստը, և այդ սեսիայի բոլոր տարբերակներն արդեն դրված են: Դրա նպատակն է պարզապես կատարել նախապես սահմանված CURL նիստը (նշված է պարամետրում գլ).

curl_close

curl_close - փակում է CURL նիստը:

Նկարագրություն

անվավեր curl_close(ռեսուրս ch)

Այս ֆունկցիան փակում է CURL նիստը և թողարկում բոլոր ռեսուրսները: CURL բռնակ գլնույնպես ջնջված է։

curl_errno

curl_errno - վերադարձնում է ամբողջ թիվ, որը պարունակում է վերջին սխալի համարը:

Նկարագրություն

Օրինակ 1. Նոր CURL նստաշրջանի սկզբնավորում և վեբ էջի առբերում:
Օրինակ 2. PHP-ի CURL մոդուլի օգտագործումը օրինակ.com ստանալու համար
Օրինակ 3. URL-ի հասանելիության ստուգում PHP-ի CURL-ի միջոցով
Օրինակ 4. PHP-ի CURL-ի միջոցով ստացված վերնագրի բաժանում մարմնից
Օրինակ 5. Ուղղորդման URL-ի որոշում՝ օգտագործելով PHP-ի CURL-ը
խնդիրը՝ curl_setopt($ch,FOLLOW_LOCATION,1); Սխալը. open_basedir-ի և safe_mode-ի հետ կապված խնդիր, լուծում. ինչ-որ մեկի կողմից արդեն մշակված գործառույթ, լուծումը n 2. նույն գործառույթը, փոփոխված, ինձ համար հիանալի է աշխատում:= $curl_max_loops) ( $curl_loops = 0; վերադարձ FALSE; ) curl_setopt ($ch, CURLOPT_HEADER, ճշմարիտ); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, ճշմարիտ); $ data = curl_exec ($ ch); ցուցակ ($header, $data) = պայթել ("\n\n", $data, 2); $http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match ("/Տեղադրավայր:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop ($matches))); եթե (!$url) (//couldn"t մշակել url-ը $curl_loops = 0 վերահղման համար; վերադարձնել $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; if (!$url["host"]) $url["host"] = $last_url[ «հյուրընկալող»]; եթե (!$url["ուղի"]) $url["ուղի"] = $last_url["ուղի"]; $new_url = $url["սխեմա"] . "://" . $ url["host"] . $url["ուղի"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; վրիպազերծում («Վերահղում դեպի», $new_url); վերադարձ curl_redir_exec($ch); ) else ($curl_loops=0; վերադարձնել $data;) ) ?>
պարզապես օգտագործեք այս ֆունկցիան առանց FOLLOW_LOCATION-ի և պետք է աշխատի: Խնդիրն այն էր, որ երբ դուք հասնում եք այն տողին, որտեղ դուք վերադարձնում եք տվյալները, եթե http_code-ը տարբերվում էր 301 oe 302-ից, $data-ն ունի հնացած տեղեկատվություն կամ ոչ: այնպես որ $debbbb-ն անում է գործը:
Օրինակ 6. Քուքիի վերլուծություն վերնագրից՝ օգտագործելով CURL PHP
Երբեմն դուք չեք կարող օգտագործել CURLOPT_COOKIEJAR-ը և CURLOPT_COOKIEFILE-ը սերվերի php- կարգավորումներից (Ասում են, որ դուք կարող եք ցանկացած ֆայլ վերցնել սերվերից՝ օգտագործելով այս ընտրանքները): Ահա լուծումը 1) Մի օգտագործեք CURLOPT_FOLLOWLOCATION 2) Օգտագործեք curl_setopt ($ch, CURLOPT_HEADER, 1) 3) Վերցրեք վերնագրի թխուկներից այսպես. preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4) Սահմանեք դրանք՝ օգտագործելով curl_setopt ($ch, CURLOPT_COOKIE, $cookies);
Օրինակ 7. Քուքիի վերլուծություն վերնագրից՝ օգտագործելով CURL PHP
Ինչպես նախկինում նշեց Եվգենը, երբեմն մենք չենք կարող օգտագործել CURLOPT_COOKIEJAR-ը և CURLOPT_COOKIEFILE-ը: Ստորև բերված է վերնագրի հետ կանչման գործառույթը, որը ես գրել եմ դեռևս հունվարին, որը թույլ է տալիս պահպանել քուքիները cURL հարցումների միջև: Քուքիները ավելացվում են $ch-ին բոլոր հարցումների ընթացքում, նույնիսկ վերահղման ժամանակ, այնպես որ կարող եք օգտագործեք այն CURLOPT_FOLLOWLOCATION-ի հետ միասին: Ահա կոդը՝ read_header ֆունկցիան($ch, $string) ( գլոբալ $location; #հետևել գտնվելու վայրին/վերահղումներ գլոբալ $cookiearr; #store թխուկները այստեղ գլոբալ $ch; # ^անտեսում է ֆունկցիայի պարամետրը: $ch # սա նորմալ է, քանի որ մենք պետք է # թարմացնենք գլոբալ $ch-ը # նոր թխուկներով $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep track of վերջին վերահղում $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get the cookie $cookiestr = trim(substr( $string, 11, -1)); $cookie = պայթել (";", $cookistr); $cookie = պայթել ("=", $cookie); $cookiename = կրճատել (array_shift ($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute միայն foreach վերնագրի վերջում ($cookiearr որպես $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) վերադարձնել $length; ) curl_setopt ($ch, CURLOPT_HEADERFUNCTION, «read_header»); Այս կոդը ենթադրում է, որ դուք նորից կօգտագործեք $ch՝ առանց սկզբնավորման ամեն անգամ (սկզբում զանգահարեք curl_init-ին միայն մեկ անգամ)։ Եթե ​​Ձեզ անհրաժեշտ է նորից սկզբնավորել $ch-ը Ձեր կոդի ցանկացած կետում, կարող եք մուտք գործել $cookiearr-ում պահվող քուքիները և ներառել դրանք նոր $ch-ում: Ես գրել եմ այս գործառույթը նախքան սովորական արտահայտությունների հետ բավականաչափ փորձ ունենալը, այնպես որ դուք այստեղ չեք գտնի preg_match զանգեր: Ես օգտագործել եմ այս կոդը բավականին երկար ժամանակ և առանց որևէ խնդիր մուտք գործելու gmail, yahoo, hotmail, aol և այլն, որտեղ ես ստիպված էի: անցեք մուտքի և մի քանի էջերի միջով, նախքան իմ փնտրածին հասնելը:
Օրինակ 8. Վերնագրի բեռնման կարգավորիչի կարգավորում՝ օգտագործելով CURL PHP
Օգտագործելով cURL-ը, ես պետք է կանչեի երրորդ կողմի սկրիպտ, որը վերադարձնում էր երկուական տվյալները որպես կցորդ՝ վերցված տվյալները կրկին որպես հավելված փոխանցելու համար: Խնդիրն այն էր, որ երրորդ կողմի սկրիպտը երբեմն վերադարձնում էր HTTP սխալներ, և ես ուզում էի խուսափել զրոյական երկարության կցորդից նման դեպքերում: CURLOPT_FAILONERROR-ի և CURLOPT_HEADERFUNCTION-ի հետ կանչի համակցությունը օգնեց մշակել երրորդ կողմի սկրիպտի HTTP սխալները. ֆունկցիա curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader($str) վերնագիր ("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); if ($intReturnCode != 200) (տպել «Սխալ կոդի հետ.» . $intReturnCode; )
Օրինակ 9. Էջը ֆայլում պահելը և փոխանցման արագության հաշվարկը CURL PHP-ի միջոցով
WritePageToFile ("http://es.php.net", "es.php.net.txt"); ֆունկցիա WritePageToFile ($sHTMLpage, $sTxtfile) ($sh = curl_init ($sHTMLpage); $hFile = FOpen ($sTxtfile, «w»); curl_setopt ($sh, CURLOPT_FILE, $hFile); curl_setopt ($sh, CURLOPT_ 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo ($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo ($sh, CURLINFO_SPEED_UPLOAD); echo "
"; echo "Ներբեռնման միջին արագություն == ". $sAverageSpeedDownload: 
"; echo "Վերբեռնման միջին արագություն == ". $sAverageSpeedUpload:
«; արձագանք»
"; $aCURLinfo = curl_getInfo ($sh); print_r ($aCURLinfo); echo "
"; curl_close ($sh); FClose ($hFile); echo "( Տեսեք «».$sTxtfile.» ֆայլը հոսթինգի նույն ուղու վրա։).
"; }
Օրինակ 9. Էջի ստացում SSL կապի միջոցով (https)
$ch=curl_init ("https://site"); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); // Անջատել սխալը «SSL վկայագրի խնդիր, ստուգեք, որ CA վկայագիրը կարգին է» curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Անջատել սխալը «SSL. վկայագրի թեմայի անունը «hostname.ru» չի համապատասխանում թիրախային հոսթի անվան «123.123»» curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $out=curl_exec ($ch); //$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //echo "http_code=".$http_code,", err=".curl_error($ch); curl_close ($ ch);
Օրինակ 10. Սեսիաների և թխուկների օգտագործումը գանգուրներով
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init ("http://site"); curl_setopt ($ curl, CURLOPT_RETURNՓՈԽԱՆՑՈՒՄ, 1); curl_setopt ($curl, CURLOPT_COOKIEJAR, $cookie_filename);//ստացված COOKIE-ները պահել curl_setopt ֆայլում ($curl, CURLOPT_COOKIEFILE, $cookie_filename); //ուղարկեք սերվերին թույլտվության ժամանակ նրանից ստացված COOKIE-ները $out=curl_exec($curl);
Օրինակ 11. Ֆայլերի վերբեռնում և բազմաչափ զանգված Curl-ում: CURLOPT_POSTFIELDS + CurlFile

Եթե ​​Ձեզ անհրաժեշտ է ուղարկել բազմաչափ զանգված և ֆայլ POST հարցումով, դուք կհանդիպեք անլուծելի խնդրի: Եթե ​​դուք փոխանցեք բազմաչափ զանգված CURLOPT_POSTFIELDS-ին, ապա երկրորդ մակարդակը կփոխանցվի որպես «Array» տող: Եթե ​​փոխակերպեք՝ օգտագործելով http_build_query, դուք չեք կարողանա փոխանցել ֆայլը:

Ստորև ներկայացված է Curl-ի համար ֆայլերի բեռնմամբ երկչափ զանգված կոդավորելու գործառույթ, որը կաշխատի PHP 5.3, PHP 5.4 և PHP 5.6 երկու հին տարբերակներում:

/** բազմաչափ զանգվածը փոխակերպում է միաչափ զանգվածի՝ օգտագործելով բարդ ինդեքսներ և փոխարինում է @-ը նախածանցով CurlFile-ով՝ Curl * @param $inputArray * @param string $inputKey * @return զանգված $requestVars = զանգված ("id" => զանգված( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); մենք ստանում ենք՝ ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ ֆունկցիա convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray որպես $key => $value ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value) = = "@")( $resultArray[$tmpKey] = (class_exists("CURLFile", կեղծ)) ? new CurlFile(ltrim($value, "@")): $value;) else ($resultArray[$tmpKey) ] = $value; ) ) վերադարձնել $resultArray; ) // ստուգել $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile" " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, «կայք»); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, convertToStringArray ($requestVars)); $res = curl_exec ($ch); curl_close ($ ch); Curl-ի օգտագործման կիրառական օրինակներ