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 փոխանցումների առաջընթացի ցուցիչն անջատելու համար:
|
|
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_*.
|
Հեռացված է 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.
|
|
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 նկարագրիչն է, երկրորդը սերվերից սպասվող բայթերի ընդհանուր քանակն է, երրորդը՝ արդեն ներբեռնված բայթերի քանակը, չորրորդը՝ սերվերին սպասվող բայթերի ընդհանուր թիվը, և հինգերորդը արդեն ուղարկված բայթերի քանակն է:
Փոխանցումը չեղարկելու համար կարող եք վերադարձնել ոչ զրոյական արժեք: Այս դեպքում կցուցադրվի սխալ 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 ռեսուրս /* http://localhost/upload.php: $ch = curl_init(); $data = array("name" => "Foo" , "file" => "@/home/user/test.png" ); Curl_setopt ($ch, CURLOPT_URL, «http://localhost/upload.php»); Curl_exec ($ ch); Այս օրինակի գործարկման արդյունքը. Զանգված ( => Foo) զանգված ( => զանգված ( => test.png => պատկեր/png => /tmp/phpcpjNeQ => 0 => 279)) Մեկնաբանություն: Զանգվածի փոխանցումը CURLOPT_POSTFIELDSկոդավորում է տվյալները որպես բազմամաս/ձև-տվյալներ, մինչդեռ URL-ով կոդավորված տողը կոդավորի տվյալները որպես դիմում/x-www-form-urlencoded. cURL-ը գործիք է, որը թույլ է տալիս շփվել տարբեր սերվերների հետ և աջակցում է բազմաթիվ արձանագրությունների՝ HTTP, FTP, TELNET և այլն: cURL-ն ի սկզբանե հրամանի տող է: Բայց, բարեբախտաբար մեզ համար, PHP-ն աջակցում է cURL գրադարանի հետ աշխատելուն: Այս հոդվածում մենք կանդրադառնանք cURL-ի հետ աշխատելու ոչ տրիվիալ օրինակներին: Փաստորեն, կան բազմաթիվ այլ եղանակներ՝ հարցում ուղարկելու այլ սերվերի, օրինակ՝ էջի բովանդակությունը ստանալու համար: Շատ մարդիկ, հիմնականում ծուլությունից դրդված, cURL-ի փոխարեն օգտագործում են պարզ PHP ֆունկցիաներ. $content = file_get_contents ("http://www.example.com"); // կամ $lines = ֆայլ ("http://www.example.com"); // կամ readfile ("http://www.example.com"); Այնուամենայնիվ, դրանք թույլ չեն տալիս արդյունավետորեն լուծել սխալները: Կան նաև մի շարք առաջադրանքներ, որոնք նրանք ընդհանրապես չեն կարող անել՝ օրինակ՝ աշխատել թխուկների հետ, թույլտվություն, հարցումներ ուղարկել, ֆայլեր ներբեռնել։ cUrl-ը հզոր գործիք է, որն աջակցում է բազմաթիվ արձանագրություններին և տրամադրում է հարցումների ամբողջական տեղեկատվություն: Նախքան բարդ օրինակներին անցնելը, եկեք նայենք PHP-ում cURL հարցումի հիմնական կառուցվածքին: PHP-ում cURL հարցում կատարելու համար անհրաժեշտ է կատարել 4 հիմնական քայլ. Այս հոդվածում մենք հիմնականում կդիտարկենք թիվ 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"]; //... Արդյունքում, դուք կստանաք զանգված հետևյալ տեղեկատվությամբ. Այս օրինակում մենք կգրենք սցենար, որը կհայտնաբերի վերահղումները՝ հիմնված բրաուզերի տարբեր կարգավորումների վրա: Օրինակ, որոշ կայքեր վերահղում են այցելուներին շարժական սարքերից դեպի այլ երկրների այցելուներ: Մենք կօգտագործենք 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 Ֆրանսերեն. վերահղում չկա 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)) 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-ի օգտագործման ոչ տրիվիալ դեպք: Պատկերացրեք մի բլոգ, որտեղ կան բազմաթիվ գրառումներ, որոնք պարունակում են հղումներ դեպի արտաքին կայքեր: Այս հղումներից մի քանիսը կարող են չաշխատել: Եկեք գրենք մի սցենար, որը կգտնի բոլոր կոտրված հղումները և ցույց կտա մեզ: Նախ, մենք պետք է հանենք բոլոր արտաքին հղումները տվյալների բազայից. // 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++;) ) Եկեք ավելի մանրամասն նայենք ծածկագրին (համարակալումը համապատասխանում է կոդի մեկնաբանություններին). Եկեք գործարկենք սցենարը. Մեռած 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()
. Եթե 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); 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 linux հրամանը, եկեք նայենք ինքնին օգտակարին և դրա հիմնական տարբերակներին, որոնք մեզ անհրաժեշտ կլինեն: Օգտակար ծրագրի շարահյուսությունը շատ պարզ է. $ curl տարբերակների հղում Հիմա եկեք նայենք հիմնական տարբերակներին. Սա ամենևին էլ 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 մեթոդը: Հիշեցնեմ, որ այս մեթոդն օգտագործվում է տարբեր ձևերի տվյալներ ուղարկելու համար։ Նման հարցում ուղարկելու համար օգտագործեք -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: Մնացած արձանագրությունները մեզ առանձնապես հետաքրքիր չեն, եթե ինչ-որ մեկը ցանկանում է ավելի խորանալ այս թեմայի մեջ, նա ստիպված կլինի փորել անգլերեն լեզվով ռեսուրսներ, և այս հոդվածը կպարունակի օգտագործման հիմունքներ և օրինակներ: Այսպիսով, libcurl գրադարանը մեզ հնարավորություն է տալիս տվյալները փոխանցել սերվերին և ստանալ պատասխաններ դրանից: Ի՞նչ է սա մեզ տալիս: Օգտատիրոջ վարքագիծը ընդօրինակելու ունակություն կամ ! Դուք կարող եք ստանալ էջերի բովանդակությունը հետագա վերլուծության համար, կարող եք ստանալ ծառայության պատասխանների վերնագրեր և ծրագրային կերպով մուտք գործել կայքեր, ստեղծել հաղորդագրություններ (օրինակ՝ Twitter-ում կամ ֆորումներում) կամ տեղեկատվություն տեղադրելու սցենարներ: Ամեն ինչ սահմանափակված է միայն ձեր երևակայությամբ: Առաջին բանը, որ մենք պետք է անենք, գրադարանի տեղադրումն է: Իմ տեղական համակարգչում ես օգտագործում եմ Denwer build-ը, ինչպես սկսնակ վեբ վարպետների ճնշող մեծամասնությունը, որոնց համար նախատեսված է հոդվածը: Փորձառու օգտատերերը, ովքեր ինքնուրույն տեղադրում են php+apache+mysql համակցությունը, կկարողանան տեղադրել cURL, ես նրանց չեմ կարող բացատրել, թե ինչպես է դա արվում;) Իսկ մենք՝ սկսնակներս, օգտագործում ենք պատրաստի լուծումներ՝ հեշտացնելու համար։ Հետևաբար, տեղադրեք libcurl-ը հետևյալ կերպ. և տերմինների սկզբում հանել ստորակետը. ;extension=php_curl.dll Պատրաստ. Գրադարանի ֆունկցիոնալությունը ստուգելու համար կարող եք զանգահարել phpinfo() ֆունկցիան և գտնել այնտեղ գիծը՝ 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-ի հետ աշխատելիս. Օրինակ, ես դիմեցի ya.ru էջին և նայեցի գեներացված բրաուզերի հարցումը և սերվերից ստացված պատասխանը: Այստեղ են: Կարծում եմ, որ այն բանից հետո, երբ որոշ ընդհանուր կետեր արդեն պարզ են, և ամեն ինչ կարծես թե պարզ է, ապա ժամանակն է անցնել պրակտիկայի և կատարելագործել ձեր հմտությունները՝ օգտագործելով օրինակ: Անձամբ իմ ձեռքերը միշտ քոր են գալիս՝ ամեն ինչ գործնականում փորձելու համար :) Քանի որ 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;) Մուտքային պարամետրեր. Մենք օգտագործում ենք ֆունկցիան, օրինակ, այսպես. $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-ին՝ Դանիել Ստենբերգի կողմից ստեղծված գրադարան, որը թույլ է տալիս միանալ տարբեր տեսակի սերվերների և արձանագրությունների: Այս գործառույթները ներդրվել են PHP 4.0.2-ում: curl_init - սկզբնավորում է CURL նիստը: ռեսուրս curl_init() Գործառույթ curl_init ()սկզբնավորում է նոր նստաշրջան և վերադարձնում է CURL բռնակ՝ և գործառույթներում օգտագործելու համար: Եթե ընտրովի պարամետրը urlտրամադրվում է, ապա CURLOPT_URL տարբերակը կստանա այս պարամետրի արժեքը: Դուք կարող եք ձեռքով տեղադրել այն՝ օգտագործելով . curl_setopt - սահմանում է CURL փոխանցման/փոխանցման տարբերակները: բուլ curl_setopt(ռեսուրս ch, լարային տարբերակ, խառը արժեք) Գործառույթ curl_setopt ()սահմանում է պարամետրով բացահայտված CURL նստաշրջանի տարբերակները գլ. Պարամետր տարբերակայն տարբերակն է, որը ցանկանում եք սահմանել, և արժեքըսա օպցիոնի արժեքն է տարբերակ . Պարամետր արժեքըպետք է երկար լինի հետևյալ ընտրանքների համար (նշված ըստ պարամետրի տարբերակ): Պարամետր արժեքըպետք է լինի տող հետևյալ պարամետրերի արժեքների համար տարբերակ : Հետևյալ ընտրանքները ակնկալում են ֆայլի նկարագրիչ, որը ստացվում է ֆունկցիայի միջոցով fopen () : Պարամետր արժեքը long write_callback (ռեսուրս ch, տողային տվյալներ) ( ... վերադարձնել strlen ($data);) տարբերակ : Պարամետր արժեքըպետք է լինի հետևյալ ձևի ֆունկցիա string read_callback (ռեսուրս ch, ռեսուրս fd, երկար երկարություն)()հետևյալ պարամետրերի արժեքների համար տարբերակ : curl_exec - իրականացնում է CURL նիստը: բուլ curl_exec(ռեսուրս ch) Այս ֆունկցիան պետք է կանչվի այն բանից հետո, երբ դուք նախաստորագրեք CURL նիստը, և այդ սեսիայի բոլոր տարբերակներն արդեն դրված են: Դրա նպատակն է պարզապես կատարել նախապես սահմանված CURL նիստը (նշված է պարամետրում գլ). curl_close - փակում է CURL նիստը: անվավեր curl_close(ռեսուրս ch) Այս ֆունկցիան փակում է CURL նիստը և թողարկում բոլոր ռեսուրսները: CURL բռնակ գլնույնպես ջնջված է։ curl_errno - վերադարձնում է ամբողջ թիվ, որը պարունակում է վերջին սխալի համարը: Եթե Ձեզ անհրաժեշտ է ուղարկել բազմաչափ զանգված և ֆայլ POST հարցումով, դուք կհանդիպեք անլուծելի խնդրի: Եթե դուք փոխանցեք բազմաչափ զանգված CURLOPT_POSTFIELDS-ին, ապա երկրորդ մակարդակը կփոխանցվի որպես «Array» տող: Եթե փոխակերպեք՝ օգտագործելով http_build_query, դուք չեք կարողանա փոխանցել ֆայլը: Ստորև ներկայացված է Curl-ի համար ֆայլերի բեռնմամբ երկչափ զանգված կոդավորելու գործառույթ, որը կաշխատի PHP 5.3, PHP 5.4 և PHP 5.6 երկու հին տարբերակներում: /** բազմաչափ զանգվածը փոխակերպում է միաչափ զանգվածի՝ օգտագործելով բարդ ինդեքսներ և փոխարինում է @-ը նախածանցով CurlFile-ով՝ Curl * @param $inputArray * @param string $inputKey * @return զանգված $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-ի օգտագործման կիրառական օրինակներ
$ch = curl_init();
print_r ($_POST);
print_r ($_FILES);
*/
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
?>
Նշումներ
Ինչու cURL:
cUrl հիմունքներ
// 1. սկզբնավորում $ch = curl_init(); // 2. սահմանել ընտրանքներ, ներառյալ 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); Սխալների հետևում
Հարցման մասին տեղեկություններ ստանալը
Վերահղման հետևում, կախված զննարկիչից
POST հարցումների ուղարկում
Ֆայլերի բեռնում
Multi cURL
WordPress-ում արտաքին հղումների ստուգում
CURL-ի այլ առանձնահատկություններ PHP-ում
HTTP նույնականացում
Վերբեռնեք FTP-ի միջոցով
Օգտագործելով վստահված անձ
Հետադարձ զանգի գործառույթներ
Եզրակացություն
curl հրամանը
Ինչպե՞ս օգտագործել գանգուրը:
Արագության սահմանաչափ
Ֆայլերի փոխանցում
POST տվյալների ուղարկում
Թխուկների ուղարկում և ստացում
Վերնագրի փոխանցում և վերլուծություն
գանգուր վավերացում
Օգտագործելով վստահված անձ
եզրակացություններ
Ի՞նչ են կոնկրետ cURL-ը և libcurl-ը: Ընդհանուր կետեր
CURL-ի տեղադրում Denwer-ում (Դենվեր): Ինչպե՞ս սկսել օգտագործել libcurl-ը:
CURL-ի և առաջին քայլերի նկարագրությունը
HTTP հարցման վերնագրի կառուցվածքը
Հայց
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 գրադարանը: Շարունակիր.Գրադարանի հետ աշխատելու օրինակ
url - էջի կամ կայքի հասցեն:
Ելքային պարամետրի արժեքները (զանգված երեք տարրով).
header['errno'] - եթե ինչ-որ բան սխալ է տեղի ունեցել, այստեղ սխալի կոդ կլինի:
header['errmsg'] – սխալի տեքստը կհայտնվի այստեղ:
header['content'] - փաստացի էջ\ֆայլ\պատկեր և այլն։
Այնուհետև կարող եք էջի կոդով անել այն, ինչ ուզում եք, օրինակ՝ վերլուծել այն կանոնավոր արտահայտություններով։ Բայց այս ամենը հաջորդ դասերում, բայց առայժմ եկեք կանգ առնենք սրան:Գանգուր
libcurl-ը ներկայումս աջակցում է http, https, ftp, gopher, telnet, dict, file և ldap արձանագրությունները:
libcurl-ն աջակցում է նաև HTTPS վկայագրերին, HTTP POST-ին, HTTP PUT-ին, FTP-ի վերբեռնմանը (դա կարելի է անել նաև ftp PHP ընդլայնման միջոցով), HTTP ձևի վրա հիմնված վերբեռնում, վստահված անձեր, թխուկներ և օգտատեր+գաղտնաբառի իսկությունը:curl_init
Նկարագրություն
curl_setopt
Նկարագրություն
curl_exec
Նկարագրություն
curl_close
Նկարագրություն
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:
"; curl_close ($sh); FClose ($hFile); echo "( Տեսեք «».$sTxtfile.» ֆայլը հոսթինգի նույն ուղու վրա։).
"; echo "Վերբեռնման միջին արագություն == ". $sAverageSpeedUpload:
«; արձագանք»
"; $aCURLinfo = curl_getInfo ($sh); print_r ($aCURLinfo); echo "
";
}
Օրինակ 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