PHP CURL - mga function at halimbawa ng paggamit. Advanced na paggamit ng cURL sa PHP Curl command line na mga opsyon
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Nagtatakda ng parameter para sa CURL session
Listahan ng mga parameter
cURL handle na nakuha mula sa curl_init().
Parameter na itatakda CURLOPT_XXX.
Ang halaga ng parameter ng opsyon.
bool:
Parameter | Mga Tala | |
---|---|---|
CURLOPT_AUTOREFERER | TOTOO para sa awtomatikong setting ng field Referrer: sa mga kahilingang na-redirect ng header Lokasyon:. | |
CURLOPT_BINARYTRANSFER | TOTOO upang ibalik ang hilaw na tugon kapag gumagamit ng isang pare-pareho CURLOPT_RETURNTRANSFER. | Sa PHP 5.1.3 hindi na kailangan ang opsyong ito: palaging ibinabalik ang raw output kapag ginagamit ang opsyon CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | TOTOO upang turuan ang kasalukuyang session na magsimula ng bagong "session" ng cookies. Magiging sanhi ito ng libcurl na huwag pansinin ang anumang cookies na "session" na dapat ay na-load nito mula sa nakaraang session. Bilang default, ang libcurl ay palaging nagse-save at naglo-load ng lahat ng cookies, hindi alintana kung ang mga ito ay "session" o hindi. Ang cookies na "Session" ay mga cookies na hindi nag-e-expire at dapat lang umiral para sa kasalukuyang "session". | |
CURLOPT_CERTINFO | TOTOO upang mag-output ng impormasyon ng SSL certificate upang mai-stream STDERR na may mga secure na koneksyon. | Idinagdag sa cURL 7.19.1. Available simula sa PHP 5.3.2. Nangangailangan ng pagpipiliang ito na paganahin para sa tamang operasyon CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | TOTOO nagsasabi sa library na gawin ang kinakailangang pagpapatunay ng proxy at pag-setup ng koneksyon, ngunit hindi nagpapadala ng data. Ang opsyong ito ay ipinatupad para sa HTTP, SMTP at POP3. | Idinagdag sa 7.15.2. Available mula sa PHP 5.5.0. |
CURLOPT_CRLF | TOTOO para i-convert ang Unix line endings sa CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | TOTOO para gamitin ang global DNS cache. Ang pagpipiliang ito ay hindi ligtas sa thread at pinagana bilang default. | |
CURLOPT_FAILONERROR | TOTOO para sa isang detalyadong ulat sa pagkabigo kung ang natanggap na HTTP code ay mas malaki sa o katumbas ng 400. Ang default na gawi ay ibinabalik ang pahina bilang normal, hindi pinapansin ang code. | |
CURLOPT_FILETIME | TOTOO upang subukang makuha ang petsa ng pagbabago ng isang malayong dokumento. Maaaring makuha ang halagang ito gamit ang parameter na CURLINFO_FILETIME mula sa function curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | TOTOO upang sundin ang anumang heading "Lokasyon: " ipinadala ng server bilang tugon nito (tandaan na ito ay nangyayari nang paulit-ulit, susundan ng PHP ang anumang mga header na ipinadala "Lokasyon: ", maliban kung ang isang pare-pareho ay nakatakda CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | TOTOO upang piliting isara ang isang koneksyon pagkatapos makumpleto ang pagproseso nito upang hindi na ito magamit muli. | |
CURLOPT_FRESH_CONNECT | TOTOO upang pilitin ang paggamit ng isang bagong koneksyon sa halip na isang naka-cache. | |
CURLOPT_FTP_USE_EPRT | TOTOO upang gamitin ang EPRT (at LPRT) para sa mga aktibong pag-upload ng FTP. Gamitin MALI upang hindi paganahin ang EPRT at LPRT at gumamit lamang ng PORT. | |
CURLOPT_FTP_USE_EPSV | TOTOO para sa paunang pagsubok ng utos ng EPSV sa panahon ng paglilipat ng FTP. Kung nabigo ang utos, babalik ito sa PASV. I-install sa MALI upang huwag paganahin ang EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | TOTOO upang lumikha ng mga nawawalang direktoryo kung ang isang operasyon ng FTP ay nakatagpo ng isang hindi umiiral na landas. | |
CURLOPT_FTPAPPEND | TOTOO upang magsulat ng isang malayuang file hanggang sa dulo, sa halip na i-overwrite ito sa isang umiiral na file. | |
CURLOPT_TCP_NODELAY | Permanenteng tinutukoy kung ang opsyong TCP_NODELAY ay dapat itakda o i-clear (1 = set, 0 = clear). Bilang default, ang opsyon ay na-clear. | Available mula sa PHP 5.2.1 para sa mga bersyon na binuo gamit ang libcurl 7.11.2 o mas bago. |
CURLOPT_FTPASCII | Palayaw CURLOPT_TRANSFERTEXT. Gamitin ito sa halip. | |
CURLOPT_FTPLISTONLY | TOTOO upang ibalik lamang ang isang listahan ng mga pangalan mula sa direktoryo ng FTP. | |
CURLOPT_HEADER | TOTOO upang isama ang mga header sa output. | |
CURLINFO_HEADER_OUT | TOTOO upang subaybayan ang string ng query sa handle. | Available simula sa PHP 5.1.3. Prefix CURLINFO_ ginamit partikular. |
CURLOPT_HTTPGET | TOTOO upang i-reset ang paraan ng paghiling ng HTTP sa pamamaraang GET. Dahil ang GET ay ang default, ang parameter na ito ay kailangan lamang kung ang paraan ng kahilingan ay nabago dati. | |
CURLOPT_HTTPPROXYTUNNEL | TOTOO sa tunnel sa pamamagitan ng tinukoy na HTTP proxy. | |
CURLOPT_MUTE | TOTOO upang ganap na huwag paganahin ang mga mensahe ng function ng cURL. | Inalis sa cURL 7.15.5 (CURLOPT_RETURNTRANSFER na opsyon ay maaaring gamitin) |
CURLOPT_NETRC | TOTOO para basahin ang ~/.netrc file para sa login at password para sa remote na site kung saan itinatatag ang koneksyon. | |
CURLOPT_NOBODY | TOTOO upang ibukod ang katawan ng tugon mula sa output. Ang paraan ng paghiling ay nakatakda sa HEAD. Pinapalitan ang setting na ito sa MALI hindi binabago ito pabalik sa GET. | |
CURLOPT_NOPROGRESS | TOTOO para i-disable ang progress indicator sa mga cURL transfer.
|
|
CURLOPT_NOSIGNAL | TOTOO upang huwag pansinin ang anumang cURL function na nagpapadala ng mga signal sa proseso ng PHP. Ang opsyong ito ay pinagana bilang default sa mga multi-threaded na SAPI upang payagan ang mga parameter ng timeout na gumana nang tama. | |
CURLOPT_POST | TOTOO para gumamit ng regular na HTTP POST. Ginagamit ng POST method na ito ang normal , karaniwang ginagamit sa mga HTML form. | |
CURLOPT_PUT | TOTOO upang mag-download ng file gamit ang pamamaraang HTTP PUT. Ang file na ginamit ay dapat itakda gamit ang mga opsyon CURLOPT_INFILE At CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | TOTOO upang ibalik ang resulta ng paglilipat bilang isang string mula sa curl_exec() sa halip na direktang output sa browser. | |
CURLOPT_SAFE_UPLOAD | TOTOO upang huwag paganahin ang suporta sa prefix @ para sa mga na-download na file sa CURLOPT_POSTFIELDS, na nangangahulugan na ang mga halaga ay pumasa sa @ maaaring mailipat nang ligtas bilang mga patlang. Sa halip na isang prefix, maaari mong gamitin ang opsyon CURLfile d. | Idinagdag sa PHP 5.5.0 na may default na halaga MALI. Sa PHP 5.6.0 naging katumbas ito bilang default TOTOO. |
CURLOPT_SSL_VERIFYPEER | MALI upang ihinto ang cURL sa pagsuri sa sertipiko ng host. Maaaring tukuyin ang mga alternatibong certificate na ibe-verify gamit ang parameter CURLOPT_CAINFO o ang direktoryo na may mga sertipiko na tinukoy ng parameter CURLOPT_CAPATH. | Default ay TOTOO mula noong bersyon ng cURL 7.10. Ang default na pamamahagi ay naka-install simula sa cURL na bersyon 7.10. |
CURLOPT_TRANSFERTEXT | TOTOO para gamitin ang ASCII mode para sa FTP transfers. Kapag gumagamit ng LDAP, ibinabalik ang data sa plain text sa halip na HTML. Sa mga sistema ng Windows ang thread STDOUT hindi nakatakda sa binary mode. | |
CURLOPT_UNRESTRICTED_AUTH | TOTOO upang magpatuloy sa pagpapadala ng login at password sa panahon ng mga pag-redirect (kapag ginagamit CURLOPT_FOLLOWLOCATION), kahit na magbago ang hostname. | |
CURLOPT_UPLOAD | TOTOO upang maghanda para sa pag-upload ng file sa server. | |
CURLOPT_VERBOSE | TOTOO upang magpakita ng karagdagang impormasyon. Nagsusulat ng output sa isang stream STDERR, o ang file na tinukoy ng parameter CURLOPT_STDERR. |
Para sa mga sumusunod na value ng parameter ng opsyon, dapat na nasa uri ang parameter ng value integer:
Parameter | Itakda ang halaga ng halaga | Mga Tala |
---|---|---|
CURLOPT_BUFFERSIZE | Ang laki ng buffer na ginagamit para sa bawat pagbabasa. Gayunpaman, walang garantiya na makukumpleto ang kahilingang ito. | Idinagdag sa cURL 7.10. |
CURLOPT_CLOSEPOLICY | Isa sa mga pare-pareho CURLCLOSEPOLICY_*.
|
Inalis sa PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Ang bilang ng mga segundo upang maghintay kapag sinusubukang kumonekta. Gamitin ang 0 upang maghintay nang walang katapusan. | |
CURLOPT_CONNECTTIMEOUT_MS | Ang bilang ng mga millisecond na hihintayin kapag sinusubukang kumonekta. Gamitin ang 0 upang maghintay nang walang katapusan. Kung pinagsama-sama ang libcurl gamit ang karaniwang solver ng pangalan ng system, gagamit pa rin ang koneksyon ng isang buong segundong paghihintay bilang timeout, na may minimum na pinapayagang timeout na 1 segundo. | Idinagdag sa cURL na bersyon 7.16.2. Available simula sa PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Ang bilang ng mga segundo na ang mga tala ng DNS ay naka-imbak sa memorya. Bilang default, ang parameter na ito ay 120 (2 minuto). | |
CURLOPT_FTPSSLAUTH | Paraan ng pagpapatunay ng FTP (sa aktibong mode): CURLFTPAUTH_SSL(SSL ay sinusuri muna), CURLFTPAUTH_TLS(TLS checked muna) o CURLFTPAUTH_DEFAULT(Nagpapasya ang cURL para sa sarili nito). | Idinagdag sa cURL na bersyon 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (bilang default, pipiliin ng CURL kung aling bersyon ang gagamitin), CURL_HTTP_VERSION_1_0 (force HTTP/1.0), o CURL_HTTP_VERSION_1_1 (force HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Maaari mong gamitin ang bitwise operator | (o) upang pagsamahin ang ilang mga pamamaraan nang magkasama. Sa kasong ito, ipo-poll ng cURL ang server para sa mga sinusuportahang paraan ng pahintulot at pipiliin ang pinakamahusay. Ang CURLAUTH_ANY ay isang alias CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. Ang CURLAUTH_ANYSAFE ay isang alias CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Ang inaasahang laki ng file, sa bytes, kapag nag-a-upload ng file sa isang malayuang server. Pakitandaan na ang paggamit sa opsyong ito ay hindi titigil sa pagpapadala ng karagdagang data sa halagang ito, dahil ang data na ipinadala ay nakadepende sa resulta. CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Itaas na threshold para sa rate ng paglilipat ng data, sa byte bawat segundo. Nagaganap ang pag-verify sa loob CURLOPT_LOW_SPEED_TIME segundo, pagkatapos ay itinuturing ng PHP na masyadong mabagal ang paglipat at ibinabagsak ito. | |
CURLOPT_LOW_SPEED_TIME | Ang maximum na bilang ng mga segundo kung saan ang rate ng paglipat ay hindi dapat lumampas CURLOPT_LOW_SPEED_LIMIT, kung hindi, mamarkahan ng PHP ang paglipat bilang masyadong mabagal at ihihinto ito. | |
CURLOPT_MAXCONNECTS | Pinakamataas na bilang ng patuloy na koneksyon. Kapag naabot na ang limitasyon, ginagamit ang parameter upang matukoy kung aling koneksyon ang isasara. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Ang maximum na bilang ng mga tinatanggap na pag-redirect. Gamitin ang opsyong ito kasama ng opsyon CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Alternatibong koneksyon port. | |
CURLOPT_POSTREDIR | Isang kaunting mask na naglalaman ng 1 (301 Permanenteng Inilipat), 2 (302 Nahanap) at 4 (303 Tingnan Iba pa) upang tukuyin kung ang pamamaraang HTTP POST ay dapat iproseso kapag ang opsyon ay pinagana CURLOPT_FOLLOWLOCATION kung naganap ang tinukoy na uri ng pag-redirect. | Idinagdag sa cURL 7.19.1. Available simula PHP 5.3.2. |
CURLOPT_PROTOCOLS |
Bit mask ng mga halaga CURLPROTO_*. Nililimitahan ng maskara na ito ang mga protocol na ginagamit ng libcurl. Ito ay nagpapahintulot sa iyo na magkaroon ng libcurl na gumana sa isang malaking bilang ng mga protocol, at limitahan ang pagpapatakbo ng ilang mga paglilipat sa isang subset lamang ng mga ito. Bilang default, ginagamit ng libcurl ang lahat ng sinusuportahang protocol. Tingnan din ang parameter CURLOPT_REDIR_PROTOCOLS. Mga tamang halaga ng protocol: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLPROTO_LDAPS , CURLPROTO_LDAPS , CURLPROTO_LDAPS . TFTP, CURLPROTO_ALL |
|
CURLOPT_PROXYAUTH | Ginagamit ang mga pamamaraan ng awtorisasyon ng HTTP kapag kumokonekta sa isang proxy server. Gamitin ang parehong mga bit mask na inilarawan para sa parameter CURLOPT_HTTPAUTH. Sa kasalukuyan, tanging CURLAUTH_BASIC at CURLAUTH_NTLM lang ang sinusuportahan para sa awtorisasyon ng proxy. | Idinagdag sa cURL na bersyon 7.10.7. |
CURLOPT_PROXYPORT | Ang port number ng proxy server kung saan ginawa ang koneksyon. Ang numerong ito ay maaari ding itakda gamit ang parameter CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Alinman sa CURLPROXY_HTTP (default) o CURLPROXY_SOCKS5 . | Idinagdag sa cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Bit mask ng mga halaga CURLPROTO_*. Nililimitahan ng bitmask na ito ang mga protocol na ginagamit ng libcurl kapag nagre-redirect (na pinagana ang parameter CURLOPT_FOLLOWLOCATION). Binibigyang-daan ka nitong limitahan ang hanay ng mga protocol na ginagamit kapag nagre-redirect para sa ilang mga pagpapadala. Bilang default, sinusuportahan ng libcurl ang lahat ng mga protocol maliban sa FILE at SCP. Sa mga bersyon bago ang 7.19.4, ginamit ang pag-redirect para sa lahat ng protocol nang walang pagbubukod. Tingnan din ang paglalarawan ng parameter CURLOPT_PROTOCOLS para sa isang listahan ng mga constant na may mga halaga ng protocol. | Idinagdag sa cURL na bersyon 7.19.4. |
CURLOPT_RESUME_FROM | Ang pagsisimula ng paghahatid ay offset, sa bytes. | |
CURLOPT_SSL_VERIFYHOST | Gumamit ng 1 upang suriin ang pagkakaroon ng isang karaniwang pangalan sa SSL certificate. Gumamit ng 2 upang suriin kung umiiral ang karaniwang pangalan at tumutugma din sa tinukoy na host. Sa kapaligiran ng labanan, ang halaga ng parameter na ito ay dapat na 2 (itinakda bilang default). | Inalis ang suporta para sa value 1 sa cURL 7.28.1 |
CURLOPT_SSLVERSION | Isa sa mga pare-pareho 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) o CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Paraan ng interpretasyon ng parameter CURLOPT_TIMEVALUE. Gamitin ang CURL_TIMECOND_IFMODSINCE upang ibalik lamang ang pahina kung nagbago ito mula noong tinukoy na oras sa parameter CURLOPT_TIMEVALUE. Kung ang pahina ay hindi nabago, ang pamagat ay ibabalik "304 Hindi Binago", na nagpapahiwatig na ang parameter CURLOPT_HEADER naka-install sa TOTOO. Gamitin ang CURL_TIMECOND_IFUNMODSINCE para sa kabaligtaran na epekto. Ang default ay CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | Ang maximum na bilang ng mga segundo na pinapayagan para sa pagpapatupad ng mga function ng cURL. | |
CURLOPT_TIMEOUT_MS | Ang maximum na bilang ng mga millisecond na pinapayagan para sa pagpapatupad ng mga function ng cURL. Kung ang libcurl ay binuo gamit ang normal na system name resolver, ang tagal ng koneksyon na ito ay gagamit pa rin ng pangalawang rounding timeout, na may minimum na timeout na pinapayagan ng isang segundo. | Idinagdag sa cURL na bersyon 7.16.2. Available simula sa PHP 5.2.3. |
CURLOPT_TIMEVALUE | Bilang ng mga segundo mula noong Enero 1, 1970. Ang oras na ito ay gagamitin ng parameter CURLOPT_TIMECONDITION. Bilang default, ginagamit ang parameter na CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Kung ang bilis ng pag-download ay lumampas sa halagang ito (tinukoy sa mga byte bawat segundo) sa average sa buong paglilipat, ang pag-download ay ipo-pause upang mapanatili ang average na bilis na mas mababa sa o katumbas ng parameter na ito. Bilang default, ang bilis ay hindi limitado. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Kung ang pag-upload sa server ay lumampas sa halagang ito (tinukoy sa mga byte bawat segundo) sa average sa buong paglilipat, ang pag-upload ay ipo-pause upang mapanatili ang isang average na bilis na mas mababa sa o katumbas ng parameter na ito. Bilang default, ang bilis ay hindi limitado. | Idinagdag sa cURL 7.15.5. Available simula sa PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Isang bitmask na binubuo ng isa o higit pang mga constant: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. I-install CURLSSH_AUTH_ANY upang mapili ng libcurl ang isa sa kanila nang nakapag-iisa. | Idinagdag sa cURL 7.16.1. |
CURLOPT_IPRESOLVE | Nagbibigay-daan sa isang application na piliin ang uri ng IP address kung saan tinutukoy ang hostname. Ito ay kinakailangan kung gumagamit ka ng hostname na nagmula sa higit sa isang bersyon ng IP address. Posibleng mga halaga CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, at bilang default CURL_IPRESOLVE_WHATEVER. | Idinagdag sa cURL 7.10.8. |
Para sa mga sumusunod na value ng parameter ng opsyon, dapat na nasa uri ang parameter ng value string:
Parameter | Itakda ang halaga ng halaga | Mga Tala |
---|---|---|
CURLOPT_CAINFO | Ang pangalan ng isang file na naglalaman ng isa o higit pang mga sertipiko laban sa kung aling mga node ang susuriin. Ang parameter na ito ay may katuturan lamang kapag ginamit kasabay ng CURLOPT_SSL_VERIFYPEER. | Nangangailangan ng ganap na landas. |
CURLOPT_CAPATH | Isang direktoryo na naglalaman ng ilang mga sertipiko ng CA. Gamitin ang opsyong ito kasabay ng CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Nilalaman ng header "Cookie:", ginamit sa kahilingan sa HTTP. Pakitandaan na ang maraming cookies ay pinaghihiwalay ng isang semicolon na sinusundan ng isang puwang (halimbawa, " prutas=mansanas; kulay=pula") | |
CURLOPT_COOKIEFILE | Ang pangalan ng file na naglalaman ng cookies. Ang file na ito ay dapat nasa Netscape na format o simpleng HTTP header na nakasulat sa file. Kung ang isang walang laman na string ay ipinasa bilang ang pangalan ng file, ang cookies ay hindi mase-save, ngunit ang kanilang pagpoproseso ay papaganahin pa rin. | |
CURLOPT_COOKIEJAR | Ang pangalan ng file kung saan mase-save ang lahat ng panloob na cookies ng kasalukuyang paglilipat pagkatapos isara ang handle, halimbawa pagkatapos tawagan ang curl_close. | |
CURLOPT_CUSTOMREQUEST | Custom na paraan ng kahilingan ang ginamit sa halip "KUMUHA" o "ULO" kapag gumagawa ng HTTP na kahilingan. Ito ay kapaki-pakinabang para sa mga query "TANGGAL" o iba pa, mas bihirang mga kahilingan sa HTTP. Ang mga tamang kahulugan ay mga salitang tulad ng "KUMUHA", "POST", "KONEKTA" at iba pa; mga. Huwag ilagay ang buong linya ng kahilingan sa HTTP dito. Halimbawa, isang indikasyon "KUMUHA /index.html HTTP/1.0\r\n\r\n" magiging mali.
|
|
CURLOPT_EGDSOCKET | Gaya ng CURLOPT_RANDOM_FILE, maliban na ang filename ay nakatakda sa Entropy Gathering Daemon socket. | |
CURLOPT_ENCODING | Nilalaman ng header "Tanggapin-Pag-encode: ". Ito ay nagpapahintulot sa kahilingan na ma-decode. Ang mga sinusuportahang encoding ay "pagkakakilanlan", "deflate" At "gzip". Kung ang isang walang laman na string ay naipasa, "" , isang header na naglalaman ng lahat ng sinusuportahang uri ng pag-encode ay ipinapadala. | Idinagdag sa cURL 7.10. |
CURLOPT_FTPPORT | Ang halaga na gagamitin upang matukoy ang IP address para sa FTP "PORT" na utos. Ang command na "PORT" ay nagsasabi sa server kung aling IP address ang dapat itong kumonekta. Ito ay maaaring isang IP address, isang hostname, isang network interface name (sa ilalim ng Unix), o simpleng "-" upang magamit ang default na IP address ng system. | |
CURLOPT_INTERFACE | Ang pangalan ng interface ng network na gagamitin. Maaaring isang pangalan ng interface, isang IP address, o isang pangalan ng host. | |
CURLOPT_KEYPASSWD | Kinakailangan ang password upang magamit ang pribadong key CURLOPT_SSLKEY o CURLOPT_SSH_PRIVATE_KEYFILE. | Idinagdag sa cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Antas ng seguridad KRB4 (Kerberos 4). Ang alinman sa mga sumusunod na halaga (sa pagkakasunud-sunod mula sa pinakamahina hanggang sa pinakamalakas) ay tama: "malinaw", "ligtas", "kumpidensyal", "pribado".. Kung ang tinukoy na string ay naiiba sa mga ibinigay na halaga, ang halaga ay gagamitin "pribado". Ang pagtatakda ng opsyong ito sa WALA ganap na hindi papaganahin ang seguridad ng KRB4. Sa ngayon, gumagana lang ang seguridad ng KRB4 sa mga transaksyon sa FTP. | |
CURLOPT_POSTFIELDS | Lahat ng data na ipinadala sa isang kahilingan sa HTTP POST. Upang maglipat ng file, tukuyin bago ang pangalan ng file @ , at gamitin din ang buong path sa file. Ang uri ng file ay maaari ding tukuyin gamit ang format na " ;type=mimetype" kasunod ng pangalan ng file. Maaaring ipasa ang parameter na ito bilang string na naka-encode ng url, tulad ng " para1=val1¶2=val2&...", at sa anyo ng isang array, ang mga susi kung saan ay ang mga pangalan ng mga field, at ang mga halaga ay ang kanilang mga nilalaman. Kung ang halaga ay isang array, ang header Uri ng Nilalaman itatakda sa maramihang bahagi/form-data. Simula sa PHP 5.2.0, kapag naglilipat ng mga file na may prefix @ , dapat ay isang array ang value. Dahil PHP 5.5.0, prefix @ ay hindi na ginagamit at maaaring ipadala ang mga file gamit ang CURLfile. Prefix @ maaaring hindi paganahin upang payagan ang mga halaga na nagsisimula sa @ sa pamamagitan ng pagtatakda ng opsyon CURLOPT_SAFE_UPLOAD sa kahulugan TOTOO. | |
CURLOPT_PROXY | HTTP proxy kung saan iruruta ang mga kahilingan. | |
CURLOPT_PROXYUSERPWD | Login at password na nakasulat sa form ":" , ginagamit kapag kumokonekta sa pamamagitan ng isang proxy. | |
CURLOPT_RANDOM_FILE | Ang pangalan ng file na ginamit upang simulan ang random number generator para sa SSL. | |
CURLOPT_RANGE | Saklaw ng data na ida-download, sa format "X-Y", at maaaring alisin ang alinman sa X o Y. Sinusuportahan din ng HTTP protocol ang pagpapadala ng maraming hanay na pinaghihiwalay ng mga kuwit, ang mga ito ay tinukoy sa format "X-Y, N-M". | |
CURLOPT_REFERER | Nilalaman ng header "Referrer:", na gagamitin sa kahilingan sa HTTP. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Isang string na naglalaman ng 32 hexadecimal digit. Ang string ay dapat na isang MD5 checksum ng pampublikong key ng remote na computer, at ire-reset ng libcurl ang koneksyon sa remote host hanggang ang checksum ay tumugma sa pampublikong key. Ang opsyong ito ay para lamang sa paglilipat ng data gamit ang SCP at SFTP. | Idinagdag sa cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Ang pangalan ng file para sa iyong pampublikong key. Kung hindi tinukoy, ang libcurl ay magiging default sa file na $HOME/.ssh/id_dsa.pub kung ang HOME environment variable ay nakatakda at ang file na "id_dsa.pub" sa kasalukuyang directory kung ang HOME environment variable ay hindi nakatakda. | Idinagdag sa cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Ang pangalan ng file para sa iyong pribadong key. Kung hindi tinukoy, ang libcurl ay magde-default sa $HOME/.ssh/id_dsa file kung ang HOME environment variable ay nakatakda at ang "id_dsa" file sa kasalukuyang directory kung ang HOME environment variable ay hindi nakatakda. Kung protektado ng password ang file, itakda ang password gamit CURLOPT_KEYPASSWD. | Idinagdag sa cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Listahan ng mga cipher na ginamit sa mga paglilipat ng SSL. Halimbawa, RC4-SHA At TLSv1 ay mga wastong listahan ng cipher. | |
CURLOPT_SSLCERT | Ang pangalan ng isang file na may wastong na-format na PEM certificate. | |
CURLOPT_SSLCERTPASSWD | Kinakailangan ang password para magamit ang certificate CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Format ng sertipiko. Mga format na suportado "PEM"(default), "DER" At "ENG". | Idinagdag sa cURL na bersyon 7.9.3. |
CURLOPT_SSLENGINE | Ang encryption engine ID para sa SSL private key na tinukoy sa parameter CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Ang identifier ng mekanismo ng pag-encrypt na ginagamit para sa mga operasyon ng asymmetric na pag-encrypt. | |
CURLOPT_SSLKEY | Ang pangalan ng SSL private key file. | |
CURLOPT_SSLKEYPASSWD | Ang lihim na password na kinakailangan para magamit ang SSL private key na tinukoy ng parameter CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Ang uri ng SSL private key na tinukoy sa parameter CURLOPT_SSLKEY. Ang mga sumusunod na uri ng pangunahing ay suportado: "PEM"(default), "DER" At "ENG". | |
CURLOPT_URL | Nada-download na URL. Ang parameter na ito ay maaari ding itakda kapag sinisimulan ang isang session gamit curl_init(). | |
CURLOPT_USERAGENT | Nilalaman ng header "User-Agent: ", ipinadala sa isang kahilingan sa HTTP. | |
CURLOPT_USERPWD | Login at password na ginamit sa panahon ng koneksyon, na tinukoy sa format ":" . |
Para sa mga sumusunod na value ng parameter ng opsyon, dapat na isang array ang parameter ng value:
Parameter | Itakda ang halaga ng halaga | Mga Tala |
---|---|---|
CURLOPT_HTTP200ALIASES | Isang hanay ng mga HTTP 200 na tugon na ituturing bilang mga tamang tugon sa halip na mga mali. | Idinagdag sa cURL na bersyon 7.10.3. |
CURLOPT_HTTPHEADER | Isang hanay ng mga nakatakdang HTTP header, sa format na array("Content-type: text/plain", "Content-length: 100") | |
CURLOPT_POSTQUOTE | Isang hanay ng mga FTP command na naisakatuparan sa server pagkatapos makumpleto ang isang kahilingan sa FTP. | |
CURLOPT_QUOTE | Isang hanay ng mga utos ng FTP na ipinatupad sa server bago gumawa ng kahilingan sa FTP. |
Para sa mga sumusunod na value ng parameter ng opsyon, dapat na stream handle ang value parameter (ibinalik, halimbawa, ng function fopen()):
Parameter | Itakda ang halaga ng halaga |
---|---|
CURLOPT_FILE | Ang file kung saan isusulat ang resulta ng paglilipat. Default na stream ng output STDOUT(window ng browser). |
CURLOPT_INFILE | Ang file kung saan dapat basahin ang data kapag na-upload sa server. |
CURLOPT_STDERR | Alternatibong error na output file na ginamit bilang kapalit ng error stream STDERR. |
CURLOPT_WRITEHEADER | Ang file kung saan isusulat ang mga header ng kasalukuyang operasyon. |
Para sa mga sumusunod na value ng parameter ng opsyon, dapat na valid na pangalan ng function o pagsasara ang parameter ng value:
Parameter | Itakda ang halaga ng halaga |
---|---|
CURLOPT_HEADERFUNCTION | Ang callback function ay tumatagal ng dalawang parameter. Ang unang parameter ay ang cURL handle, ang pangalawang parameter ay isang string na naglalaman ng mga header na isusulat. Dapat isulat ang mga header gamit ang callback function na ito. Dapat ibalik ang bilang ng mga byte na nakasulat. |
CURLOPT_PASSWDFUNCTION | Ang callback function ay tumatagal ng tatlong parameter. Ang unang parameter ay ang cURL handle, ang pangalawang parameter ay ang password prompt string, at ang ikatlong parameter ay ang maximum na haba ng password. Dapat magbalik ng string na naglalaman ng password. |
CURLOPT_PROGRESSFUNCTION |
Ang callback function ay tumatagal ng limang parameter. Ang una ay ang cURL descriptor, ang pangalawa ay ang kabuuang bilang ng mga byte na inaasahang mada-download mula sa server, ang pangatlo ay ang bilang ng mga byte na na-download na, ang pang-apat ay ang kabuuang bilang ng mga byte na inaasahang ipapadala sa server, at ang panglima ay ang bilang ng mga byte na naipadala na.
Maaari kang magbalik ng hindi zero na halaga upang kanselahin ang paglipat. Sa kasong ito, isang error ang ipapakita CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Ang callback function ay tumatagal ng tatlong parameter. Ang unang parameter ay ang cURL handle, ang pangalawang parameter ay ang stream resource na ipinasa sa cURL sa pamamagitan ng opsyon CURLOPT_INFILE, at ang pangatlong parameter ay ang maximum na pinapayagang dami ng data na babasahin. Ang callback function ay dapat magbalik ng isang string na may haba na hindi hihigit sa hiniling na dami ng data, kadalasan sa pamamagitan ng pagbabasa mula sa naipasa na mapagkukunan ng streaming. Dapat magbalik ng walang laman na string upang hudyat ang pagtatapos ng file EOF. |
CURLOPT_WRITEFUNCTION | Ang callback function ay tumatagal ng dalawang parameter. Ang unang parameter ay ang cURL handle, at ang pangalawang parameter ay ang string na naglalaman ng data na isusulat. Dapat i-save ang data gamit ang function na ito. Dapat nitong ibalik ang eksaktong bilang ng mga byte na nakasulat, kung hindi ay maa-abort ang pag-download nang may error. |
Iba pang kahulugan:
Ibalik ang mga halaga
Nagbabalik TOTOO sa matagumpay na pagkumpleto o MALI sa kaso ng isang error.
Listahan ng mga pagbabago
Bersyon | Paglalarawan |
---|---|
5.6.0 | Pagpipilian CURL_SAFE_UPLOAD ngayon ay may default na halaga ng TOTOO. |
5.6.0 | Inalis ang opsyon CURLOPT_CLOSEPOLICY at mga kaakibat nitong kahulugan. |
5.5.0 | Ang cURL resource ay idinagdag bilang unang argumento sa callback function CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Idinagdag na opsyon CURLOPT_SHARE. |
5.3.0 | Idinagdag na opsyon CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Nagdagdag ng mga opsyon CURLOPT_PROTOCOLS At CURLOPT_REDIR_PROTOCOLS. |
5.1.0 | Nagdagdag ng mga opsyon CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH At CURLOPT_TIMECONDITION. |
5.0.0 | Nagdagdag ng mga opsyon CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE At CURLOPT_HTTP200ALIASES. |
Mga halimbawa
Halimbawa #1 Pagsisimula ng CURL session at pag-load ng web page
// lumikha ng bagong mapagkukunan ng 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); Ang resulta ng pagpapatakbo ng halimbawang ito: Array ( => Foo) Array ( => Array ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) Magkomento: Pagpasa ng array sa CURLOPT_POSTFIELDS ine-encode ang data bilang maramihang bahagi/form-data, samantalang ang pagpasa ng string na naka-encode ng URL ay i-encode ang data bilang application/x-www-form-urlencoded. Ang cURL ay isang tool na nagbibigay-daan sa iyong makipag-ugnayan sa iba't ibang server at sumusuporta sa maraming protocol: HTTP, FTP, TELNET, atbp. Ang cURL ay orihinal na isang command line utility. Ngunit, sa kabutihang palad para sa amin, sinusuportahan ng PHP ang pagtatrabaho sa cURL library. Sa artikulong ito titingnan natin ang mga di-maliit na halimbawa ng pagtatrabaho sa cURL. Sa katunayan, mayroong maraming iba pang mga paraan upang magpadala ng isang kahilingan sa isa pang server upang, halimbawa, makuha ang nilalaman ng isang pahina. Maraming tao, kadalasan dahil sa katamaran, ay gumagamit ng mga simpleng PHP function sa halip na cURL: $content = file_get_contents("http://www.example.com"); // o $lines = file("http://www.example.com"); // or readfile("http://www.example.com"); Gayunpaman, hindi nila pinapayagan ang mahusay na paghawak ng error. Mayroon ding ilang mga gawain na hindi nila magagawa - halimbawa, nagtatrabaho sa cookies, awtorisasyon, mga kahilingan sa pag-post, pag-download ng mga file. Ang cUrl ay isang mahusay na tool na sumusuporta sa maraming protocol at nagbibigay ng kumpletong impormasyon ng kahilingan. Bago lumipat sa kumplikadong mga halimbawa, tingnan natin ang pangunahing istraktura ng isang kahilingan sa cURL sa PHP. Para magsagawa ng cURL request sa PHP, kailangan mong gumawa ng 4 na pangunahing hakbang: Karamihan ay titingnan natin ang hakbang #2 sa artikulong ito dahil doon nangyayari ang mahika. Ang listahan ng mga opsyon sa cURL ay napakalaki, kaya hindi namin isasaalang-alang ang lahat ng mga opsyon ngayon, ngunit gagamitin ang mga kapaki-pakinabang para sa paglutas ng mga partikular na problema. Kung kinakailangan, maaari mong idagdag ang mga sumusunod na linya upang subaybayan ang mga error: // ... $output = curl_exec($ch); kung ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ... Pakitandaan na ginagamit namin ang “===” sa halip na “==” dahil Ito ay kinakailangan upang makilala sa pagitan ng isang walang laman na tugon ng server at ang Boolean na halaga FALSE, na ibinalik sa kaso ng isang error. Ang isa pang opsyonal na hakbang ay ang pagkuha ng impormasyon tungkol sa kahilingan ng cURL pagkatapos itong maisakatuparan. // ... curl_exec($ch); $info = curl_getinfo($ch); echo "Kinuha " . $info["kabuuang_oras"] . "segundo para sa url". $info["url"]; // ... Bilang resulta, makakatanggap ka ng array na may sumusunod na impormasyon: Sa halimbawang ito, susulat kami ng script na tutuklasin ang mga pag-redirect batay sa iba't ibang setting ng browser. Halimbawa, ang ilang mga site ay nagre-redirect ng mga bisita mula sa mga mobile device patungo sa mga bisita mula sa ibang mga bansa. Gagamitin namin ang opsyong CURLOPT_HTTPHEADER upang itakda ang aming sariling mga header, kabilang ang User-Agent at Wika, at tingnan kung saan kami nire-redirect ng mga site. // URLs $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // browsers $browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5. 6 (.NET CLR 3.5.30729)", "wika" => "en-us,en;q=0.5"), "iphone" => array ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU tulad ng Mac OS X; en) AppleWebKit/420+ (KHTML, tulad ng Tuko) Bersyon/3.0 Mobile/1A537a Safari/419.3", "wika" => "en"), "french" => array ("user_agent" = > "Mozilla/4.0 (tugma; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "wika" => "fr,fr-FR;q=0.5")); foreach ($mga url bilang $url) (echo "URL: $url\n"; foreach ($mga browser bilang $test_name => $browser) ($ch = curl_init(); // itakda ang address curl_setopt($ch, CURLOPT_URL , $url); // ipahiwatig ang browser at wikang ginamit curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["language" ]) ")); // hindi namin kailangan ang mga nilalaman ng pahina curl_setopt($ch, CURLOPT_NOBODY, 1); // kailangan lang namin ng mga header curl_setopt($ch, CURLOPT_HEADER, 1); // ibalik ang resulta sa halip ng output nitong curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // tukuyin ang mga pag-redirect sa mga header ng HTTP? kung (preg_match("!Lokasyon: (.*)!" , $output, $matches)) ( echo "$test_name: redirects to $matches\n"; ) else ( echo "$test_name: walang redirection\n"; ) ) echo "\n\n"; ) Sa isang loop, sinusuri namin ang mga browser para sa bawat URL. Una naming itinakda ang mga opsyon para sa aming kahilingan: URL at browser at wika na susuriin. kasi Nagtakda kami ng isang espesyal na opsyon; ang resulta ng kahilingan ay maglalaman lamang ng mga header ng HTTP. Gamit ang isang simpleng regular na expression, maaari naming suriin kung ang tugon ay naglalaman ng string na "Lokasyon:". Resulta ng pagpapatupad ng script: URL: http://www.cnn.com standard: redirects to http://edition.cnn.com/ iphone: redirects to http://edition.cnn.com/ French: redirects to http://edition.cnn .com/ URL: http://www.mozilla.com standard: redirects to https://www.mozilla.org/firefox/ iphone: redirects to https://www.mozilla.org/firefox/ french: redirects to https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: redirects to https://www.facebook.com/ iphone: redirects to http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr French: walang redirection Kapag nagsasagawa ng mga kahilingan sa GET, maaaring maipasa ang data sa string ng query. Halimbawa, kapag naghanap ka sa Google, isinasalin ang iyong query sa isang URL: http://www.google.com/search?q=google Upang makuha ang resulta ng query na ito hindi mo na kailangan ang cURL, maaari kang maging tamad at gumamit ng "file_get_contents()". Ngunit ang ilang mga form sa HTML ay gumagamit ng POST method. Sa kasong ito, ipinapadala ang data sa katawan ng mensahe ng kahilingan sa halip na sa mismong URL. Sumulat tayo ng script na magpapadala ng mga kahilingan sa POST. Una, gumawa tayo ng simpleng PHP file na tatanggap sa mga kahilingang ito at ibabalik ang data na ipinadala dito. Tawagan natin itong post_output.php : $url = "http://localhost/post_output.php"; $post_data = array ("foo" => "bar", "query" => "FooBar", "action" => "Isumite"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // gumawa ng POST request curl_setopt($ch, CURLOPT_POST, 1); // magdagdag ng data curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Ang script na ito ay maglalabas ng: Array ( => bar => FooBar => Isumite) Nagpadala ang script na ito ng POST na kahilingan sa post_output.php file. na nag-output ng mga nilalaman ng $_POST array at natanggap namin ang tugon na ito gamit ang cURL. Tulad ng sa nakaraang halimbawa, gumawa tayo ng file na tatanggap ng mga kahilingan, upload_output.php : Print_r($_FILES); At ang script mismo na nagda-download ng mga file: $url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // file na ia-upload "upload" => "@/tmp/desert.jpg"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Kung gusto mong mag-upload ng file, ang kailangan mo lang gawin ay ipasa ang path dito, tulad ng isang normal na parameter ng kahilingan sa POST, na may prefix na "@". Ang resulta ng script: Array ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Isa sa mga advanced na feature ng cURL sa PHP ay ang kakayahang magsagawa ng maraming kahilingan nang sabay-sabay at asynchronously. Sa ilalim ng normal na mga kondisyon, hihinto ang script at maghihintay na makumpleto ang kahilingan. At kung kailangan mong magsagawa ng maraming query, maaaring tumagal ito ng maraming oras, dahil... magpe-perform ka ng sunud-sunod. Maaaring malampasan ang limitasyong ito: // lumikha ng mga humahawak $ch1 = curl_init(); $ch2 = curl_init(); // set options 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); //lumikha ng multiple cURL handle $mh = curl_multi_init(); // magdagdag ng mga handler curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // execute requests do ( curl_multi_exec ($mh, $running); ) while ($running > 0); // magbakante ng mga mapagkukunan curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Ang ideya ay maaari kang lumikha ng maraming mga cURL handle, pagsamahin ang mga ito sa ilalim ng isang multi-handle, at isagawa ang mga ito nang asynchronously. Una, ang lahat ay pareho sa isang regular na kahilingan sa cURL - isang descriptor ang nilikha ( curl_init()
), nakatakda ang mga parameter ( curl_setopt()
). Susunod, isang multi-descriptor ay nilikha ( curl_multi_init()
) at ang mga naunang ginawang regular na mga deskriptor ay idinagdag ( curl_multi_add_handle()
). Sa halip na tawagan ang curl_exec() nang normal, tatawag kami curl_multi_exec()
ang function na ito ay nagpapaalam sa amin tungkol sa bilang ng mga aktibong koneksyon gamit ang pangalawang parameter - $running. Samakatuwid, ang loop ay tumatakbo hanggang $running ay naging katumbas ng 0. At, siyempre, pagkatapos ng trabaho, ito ay kinakailangan upang ilabas ang mga mapagkukunan. Sa halimbawang ito, ilalabas lang namin ang resulta ng mga query sa STDOUT. Isaalang-alang natin ang isang hindi maliit na kaso ng paggamit ng multi cURL. Isipin ang isang blog na may maraming mga post na naglalaman ng mga link sa mga panlabas na site. Maaaring hindi gumana ang ilan sa mga link na ito. Sumulat tayo ng isang script na mahahanap ang lahat ng sirang link at ipakita ang mga ito sa amin. Una, kailangan nating hilahin ang lahat ng panlabas na link mula sa database: // CONFIG $db_host = "localhost"; $db_user = "ugat"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "site"); $max_connections = 10; $url_list = array(); $working_urls = array(); $dead_urls = array(); $not_found_urls = array(); $aktibo = null; // kumonekta sa MySQL kung (!mysql_connect($db_host, $db_user, $db_pass)) ( mamatay("Hindi makakonekta: " . mysql_error()); ) kung (!mysql_select_db($db_name)) ( mamatay("Maaari hindi piliin ang db: " . mysql_error()); ) // kunin ang lahat ng mga post na may mga link sa teksto $q = "PUMILI ng post_content MULA SA wp_posts KUNG SAAN ang post_content TULAD "%href=%" AT post_status = "publish" AT post_type = "post " "; $r = mysql_query($q) o mamatay(mysql_error()); habang ($d = mysql_fetch_assoc($r)) ( // kolektahin ang lahat ng link gamit ang regular na expression kung (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($ tumutugma bilang $url) ( // i-filter ang mga hindi kinakailangang domain $tmp = parse_url($url); if (isset ($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) ( continue; ) // pinagsama-sama ang $url_list = $url; ) ) ) // alisin ang mga pag-uulit $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Walang URL na susuriin"); ) Sa bahaging ito ng script, hinuhugot lang namin ang lahat ng panlabas na link mula sa database. Suriin natin sila: $mh = curl_multi_init(); // 1. magdagdag ng mga link para sa ($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 "==Mga Patay na URL==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URL==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Working URLs==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. nagdadagdag ng handle na may ibinigay na URL function add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // kung may mga link pa kung (isset($url_list[$index])) ( // lahat ay gaya ng dati $ ch = curl_init(); // magtakda ng mga opsyon curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // bumalik sa halip na ipakita ang resulta curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // payagan nire-redirect ang curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // kumuha lang ng mga header para makatipid ng oras curl_setopt($ch, CURLOPT_NOBODY, 1); // idagdag sa multi-handle curl_multi_add_handle($mh, $ch); $index++; ) ) Tingnan natin ang code nang mas detalyado (ang pagnunumero ay tumutugma sa mga komento sa code): Patakbuhin natin ang script: Dead URLs== xample1234.com/ ==404 URLs== www.google.com/dsfasdfafd ==Working URLs== ru.php.net/manual/ru/function.time.php www.cssbuttongenerator.com/ csslint. net/ codex.wordpress.org/Plugin_API/Action_Reference fortawesome.github.io/Font-Awesome/ fortawesome.github.io/Font-Awesome/ www.oracle.com/technetwork/java/javafx/downloads/index.html codex. wordpress.org/Plugin_API/Filter_Reference codex.wordpress.org/Roles_and_Capabilities code.google.com/p/google-api-php-client/wiki/OAuth2#Google_APIs_Console jplayer.org/ code.google.com/p/google-api -php-client/ developers.google.com/+/ accounts.google.com/ServiceLogin?service=devconsole&passive=1209600&continue=https%3A%2F%2Fcode.google.com%2Fapis%2Fconsole%2F&followup=https%3A%2F %2Fcode.google.com%2Fapis%2Fconsole%2F daneden.github.io/animate.css/ github.com/daneden/animate.css ru2.php.net/manual/ru/function.autoload.php www.google. com/recaptcha/api/verify phpunit.de/phpunit.de/manual/current/en/phpunit-book.html Humigit-kumulang 2 segundo ang tseke. Sa pamamagitan ng pagpapatakbo ng 10 thread nang sabay-sabay, tumataas ang performance ng 10 beses kumpara sa mga regular na kahilingan sa cURL. Upang makuha ang mga nilalaman ng tugon ng server, gamitin ang function curl_multi_getcontent($ch)
, kung saan ang $ch ay isang descriptor na nakuha mula sa curl_multi_info_read()
. Kung ang kahilingan sa HTTP ay nangangailangan ng pagpapatunay, gamitin ang sumusunod na code: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // magpadala ng username at password curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // kung pinapayagan ang mga pag-redirect curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Ipapadala ng cURL ang password pagkatapos mag-redirect curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); Ang PHP ay may sariling library para sa pagtatrabaho sa FTP, ngunit maaari mo ring gamitin ang cURL: // basahin ang file $file = fopen("/path/to/file", "r"); // url ay naglalaman na ng kinakailangang data $url = "ftp://username: [email protected]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // options curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch); Maaaring gawin ang mga kahilingan sa pamamagitan ng isang partikular na proxy: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // proxy address curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // kung kailangan ng awtorisasyon curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch); Posibleng gumamit ng mga callback habang tumatakbo ang kahilingan, nang hindi naghihintay na makumpleto ito. Halimbawa, habang dina-download ang tugon ng server, magagamit namin ang data na natanggap na nang hindi naghihintay ng kumpletong pag-download. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec($ch); curl_close($ch); function progress_function($ch,$str) ( echo $str; return strlen($str); ) Dapat ibalik ng callback function ang haba ng string para gumana nang tama ang kahilingan. Sa tuwing matatanggap ang susunod na bahagi ng tugon ng server, tatawagin ang isang callback. Sa artikulong ito, tiningnan namin ang mga advanced na feature ng cURL sa PHP. Sa susunod na kailangan mong gumawa ng mga kahilingan sa URL, gamitin ang cURL. Madalas naming kailangang mag-download ng iba't ibang mga file mula sa Internet, halimbawa, mga executable program file, script file, source archive. Ngunit hindi ito palaging kailangang gawin sa pamamagitan ng browser. Sa maraming mga sitwasyon, mas madaling gawin ang lahat ng mga aksyon sa pamamagitan ng terminal. Dahil sa ganitong paraan maaari mong i-automate ang proseso. Sa kabilang banda, pana-panahong kailangang subukan ng mga webmaster ang pagiging naa-access ng website, suriin ang mga naipadala at natanggap na mga header, at marami pang iba. Upang malutas ang mga naturang problema at problema ng isang katulad na hanay, maaari mong gamitin ang curl utility. Nagbibigay-daan ito sa iyong lutasin ang mas malawak na hanay ng mga problema, kabilang ang pagtulad sa mga pagkilos ng user sa site. Sa artikulong ito titingnan natin kung paano gamitin ang curl, kung ano ito at kung bakit kailangan ang program na ito. Sa katunayan, ang curl ay higit pa sa isang command line utility para sa Linux o Windows. Ito ay isang hanay ng mga aklatan na nagpapatupad ng mga pangunahing kakayahan ng pagtatrabaho sa mga pahina ng URL at paglilipat ng mga file. Sinusuportahan ng library ang pagtatrabaho sa mga protocol: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, pati na rin ang POP3, IMAP at SMTP. Ito ay mahusay para sa pagtulad sa mga aksyon ng user sa mga pahina at iba pang mga operasyon na may mga URL. Ang suporta para sa curl library ay naidagdag sa maraming iba't ibang mga programming language at platform. Ang curl utility ay isang independent wrapper para sa library na ito. Ito ang utility na ito na ating tututukan sa artikulong ito. Bago lumipat sa isang paglalarawan kung paano magagamit ang curl linux command, tingnan natin ang utility mismo at ang mga pangunahing opsyon nito na kakailanganin natin. Ang syntax ng utility ay napaka-simple: link ng $ curl options Ngayon tingnan natin ang mga pangunahing pagpipilian: Hindi ito lahat ng mga opsyon para sa curl linux, ngunit inililista nito ang mga pangunahing kaalaman na kakailanganin mong gamitin. Sinakop namin ang lahat ng bagay na nauugnay sa teorya ng pagtatrabaho sa curl utility, ngayon ay oras na upang magpatuloy sa pagsasanay at tumingin sa mga halimbawa ng curl command. Ang pinakakaraniwang gawain ay ito. Ang pag-download ng file ay napakasimple. Upang gawin ito, ipasa lamang ang pangalan ng file o pahina ng html sa utility sa mga parameter: curl https://raw.githubusercontent.com/curl/curl/master/README.md Ngunit narito ang isang sorpresa na naghihintay sa iyo: ang buong nilalaman ng file ay ipapadala sa karaniwang output. Upang isulat ito sa anumang file gamitin: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md At kung gusto mong ang resultang file ay pinangalanang kapareho ng file sa server, gamitin ang -O na opsyon: 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 Kung kinakailangan, maaari kang mag-download ng ilang mga file gamit ang isang command: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Ang isa pang bagay na maaaring maging kapaki-pakinabang para sa isang administrator ay ang pag-download lamang ng isang file kung ito ay nabago: curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Maaari mong limitahan ang bilis ng pag-download sa kinakailangang limitasyon upang hindi ma-overload ang network gamit ang -Y na opsyon: curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Dito kailangan mong tukuyin ang bilang ng mga kilobytes bawat segundo na maaaring ma-download. Maaari mo ring wakasan ang koneksyon kung ang bilis ay hindi sapat, gamitin ang -Y na opsyon upang gawin ito: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ O tingnan natin kung ang file ay ipinadala sa pamamagitan ng HTTP; mayroong isang espesyal na serbisyo para dito: curl -T ~/login.txt http://posttestserver.com/post.php Sa tugon, sasabihin sa iyo ng utility kung saan mo mahahanap ang na-download na file. Maaari kang magpadala hindi lamang ng mga file, kundi pati na rin ng anumang data gamit ang POST method. Ipaalala ko sa iyo na ang paraang ito ay ginagamit upang magpadala ng data ng iba't ibang anyo. Upang magpadala ng ganoong kahilingan, gamitin ang -d na opsyon. Para sa pagsubok, gagamitin namin ang parehong serbisyo: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Kung hindi ka nasisiyahan sa opsyong ito sa pagsusumite, maaari kang magpanggap na isinumite ang form. Mayroong isang opsyon para dito -F: curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php Dito ipinapasa namin ang field ng password na may form bilang plain text, sa parehong paraan na maaari mong ipasa ang ilang mga parameter. Ang cookies ay ginagamit ng mga website upang mag-imbak ng ilang partikular na impormasyon sa panig ng gumagamit. Maaaring kailanganin ito, halimbawa, para sa pagpapatunay. Maaari kang magpadala at tumanggap ng Cookies gamit ang curl. Upang i-save ang natanggap na Cookies sa isang file, gamitin ang -c na opsyon: curl -c cookie.txt http://posttestserver.com/post.php Maaari mong ipadala pabalik ang curl cookie: curl -b cookie.txt http://posttestserver.com/post.php Hindi namin palaging kailangan ang nilalaman ng pahina. Minsan ang mga headline lang ang maaaring maging interesante. Upang ipakita lamang ang mga ito mayroong opsyon na -I: curl -ako https://site At pinapayagan ka ng pagpipiliang -H na magpadala ng marami o higit pa sa server, halimbawa, maaari mong ipasa ang header na If-Modified-Since upang maibalik lamang ang pahina kung ito ay nabago: Kung ang server ay nangangailangan ng isa sa mga karaniwang uri ng pagpapatotoo, tulad ng HTTP Basic o FTP, kung gayon ang curl ay maaaring pangasiwaan ang gawaing ito nang napakadali. Upang tukuyin ang mga detalye ng pagpapatunay, tukuyin lamang ang mga ito na pinaghihiwalay ng tutuldok sa opsyong -u: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt Ang pagpapatotoo sa mga HTTP server ay isasagawa sa parehong paraan. Kung kailangan mong gumamit ng isang proxy server upang mag-download ng mga file, kung gayon iyon ay napaka-simple. Ito ay sapat na upang tukuyin ang proxy server address sa -x na opsyon: curl -x proxysever.test.com:3128 http://google.co.in Sa artikulong ito, tiningnan namin kung paano gamitin ang curl, kung bakit kailangan ang utility na ito at ang mga pangunahing kakayahan nito. Sa kabila ng kanilang pagkakatulad, magkaiba sila. Ang utos ng curl linux ay higit na idinisenyo para sa pagsusuri at pagtulad sa iba't ibang mga aksyon sa server, habang ang wget ay mas angkop para sa pag-download ng mga file at pag-crawl ng mga site. Tatalakayin ng artikulong ito ang tungkol sa napakalakas na tool gaya ng cURL, gayundin ang library para sa PHP na nagbibigay ng access sa tool na ito - libcurl. Para saan ang lahat ng ito? Upang makipag-ugnayan sa server gamit ang mga protocol ng paglilipat ng data, halimbawa, http o ftp. Ang iba pang mga protocol ay hindi partikular na kawili-wili sa amin; kung ang isang tao ay nais na magsaliksik nang mas malalim sa paksang ito, kakailanganin nilang maghukay ng mga mapagkukunan sa wikang Ingles, at ang artikulong ito ay maglalaman ng mga pangunahing kaalaman at mga halimbawa ng paggamit. Kaya, ang libcurl library ay nagbibigay sa amin ng kakayahang magpadala ng data sa server at makatanggap ng mga tugon mula dito. Ano ang ibinibigay nito sa atin? Ang kakayahang tularan ang gawi ng gumagamit o ! Maaari mong matanggap ang mga nilalaman ng mga pahina para sa kasunod na pag-parse, maaari kang makatanggap ng mga header ng tugon ng serbisyo at mag-log in sa mga site gamit ang program, lumikha ng mga script para sa pag-post ng mga mensahe (halimbawa, sa Twitter o sa mga forum) o impormasyon. Ang lahat ay limitado lamang sa iyong imahinasyon! Ang unang bagay na kailangan nating gawin ay i-install ang library. Sa aking lokal na computer ginagamit ko ang Denwer build, tulad ng karamihan sa mga baguhang webmaster, kung kanino nilayon ang artikulo. Ang mga nakaranasang user na nakapag-iisa na nag-i-install ng kumbinasyon ng php+apache+mysql ay makakapag-install ng cURL, hindi para sa akin na ipaliwanag sa kanila kung paano ito ginagawa;) At kami, mga nagsisimula, ay gumagamit ng mga handa na solusyon upang gawing mas madali. Samakatuwid, i-install ang libcurl tulad ng sumusunod: at alisin ang semicolon sa simula ng mga termino: ;extension=php_curl.dll handa na. Upang suriin ang functionality ng library, maaari mong tawagan ang phpinfo() function at hanapin ang linya doon: pinagana ang suporta ng cURL. Binabati kita sa iyong unang tagumpay. Upang magsimulang magtrabaho kasama ang tool, kailangan itong masimulan. Ginagawa ito tulad ng sumusunod: $ch = curl_init(); Ginamit namin ang function ng pagsisimula ng session ng cURL. Sa kasong ito, maaari mong itakda kaagad ang URL, tulad nito: $ch = curl_init("https://site"); At magagawa mo ito sa ibang pagkakataon, sa mga opsyon. Ang pagkakasunud-sunod kung saan naka-install ang mga pagpipilian ay hindi mahalaga. Ginagawa ito ng isa pang function: Curl_setopt (resource ch, string option, mixed value) Nagawa na namin ang unang parameter ng function na ito, iyon ay, mapagkukunan ch, sa itaas lamang, ngunit mayroong maraming mga pagpipilian at mga parameter ng halaga. Sa palagay ko ay hindi mo dapat kopyahin-i-paste ang lahat dito, ngunit magbigay lamang ng isang link sa isang detalyadong paglalarawan ng pag-andar, sana ay walang masaktan: curl_setopt. Magbibigay ako ng halimbawa ng mga opsyon sa pagtatakda gamit ang isang URL bilang halimbawa: $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); Ilan pang halimbawa ng mga opsyon sa pagtatakda: kunin natin ang header ng tugon ng server, nang hindi nakuha ang mismong pahina: Curl_setopt($ch, CURLOPT_HEADER, 1); // basahin ang header curl_setopt($ch, CURLOPT_NOBODY, 1); // basahin LAMANG ang header na walang katawan Kaya, sinimulan namin ang session, itakda ang mga parameter na kailangan namin, ngayon ay isinasagawa namin ang resultang kahilingan, isara ang session at ipakita ang resulta: $result = curl_exec($ch); curl_close($ch); echo $resulta; Bilang resulta, nakuha namin ang aming unang ganap na gumaganang halimbawa ng paggamit ng libcurl library: $ch = curl_init(); $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // basahin ang header curl_setopt($ch, CURLOPT_NOBODY, 1); // basahin LAMANG ang header na walang body $result = curl_exec($ch); curl_close($ch); echo $resulta; Kung paano ito gumagana, umaasa ako, ay malinaw, dahil tiningnan namin ang bawat hakbang nang hiwalay :) Bilang resulta, nakatanggap kami ng isang header ng tugon ng HTTP mula sa server, na tiyak na susuriin namin sa ibaba upang mas maunawaan ang lahat ng mga yugto ng pakikipag-ugnayan sa pagitan ang browser at ang server: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Fabulous! Natanggap namin ang header ng tugon mula sa server at sinubukan ang library sa pagkilos. Paano ito kapaki-pakinabang sa atin? Dahil ngayon ay halos maiisip mo na ang pagkakasunud-sunod ng mga aksyon kapag nagtatrabaho sa cURL: Halimbawa, bumaling ako sa ya.ru page at tiningnan ang nabuong kahilingan sa browser at ang tugon na natanggap mula sa server. Nandito na sila: Naniniwala ako na pagkatapos ng ilang pangkalahatang mga punto ay malinaw na at ang lahat ay tila malinaw, pagkatapos ay oras na upang magpatuloy upang magsanay at mahasa ang iyong mga kasanayan gamit ang halimbawa. Sa personal, ang aking mga kamay ay palaging nangangati upang subukan ang lahat sa pagsasanay :) Dahil ang cURL ay napakahusay para sa mga parser, isaalang-alang natin ang function ng pagkuha ng page code sa pamamagitan ng address nito. Sa kasong ito, ang output ay isang array na may pamagat, nilalaman ng pahina, at kahit na mga error code kung may mali. Function get_web_page($url) ($uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ibinabalik ang web page na curl_setopt($ch, CURLOPT_HEADER, 0); // hindi nagbabalik ng mga header curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // sinusundan ang mga redirect curl_setopt($ch, CURLOPT_ENCODING, ""); // mga proseso lahat ng encodings curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // connection timeout curl_setopt($ch, CURLOPT_TIMEOUT, 120); // response timeout curl_setopt($ch, CURLOPT , 10); // huminto pagkatapos ng ika-10 pag-redirect $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; ibalik ang $header; ) Mga parameter ng input: Ginagamit namin ang function, halimbawa, tulad nito: $result = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ($page = $result["content "]; echo $page;) Ang lahat ay dapat pumunta nang walang mga error at matatanggap mo ang code ng pahina sa variable na $page. Kung susubukan naming kunin ang hindi umiiral na pahina yaaaaaaaaaaaaa.ru, makukuha namin ang error: Hindi malutas ang host: yaaaaaaaaaaaaa.ru; Hindi nahanap ang host Lahat ay pinoproseso ng tama at maganda :) Naka-block ang JavaScript sa iyong browser. Mangyaring paganahin ang JavaScript para gumana ang site! Sinusuportahan ng PHP ang libcurl, isang library na nilikha ni Daniel Stenberg na ginagawang posible na kumonekta sa iba't ibang uri ng mga server at gamit ang iba't ibang mga protocol. Ang mga function na ito ay ipinakilala sa PHP 4.0.2. curl_init - nagpapasimula ng CURL session. mapagkukunan curl_init() Function curl_init() nagpapasimula ng bagong session at nagbabalik ng CURL handle para gamitin sa , at mga function. Kung ang opsyonal na parameter url ay ibinigay, pagkatapos ay matatanggap ng opsyon na CURLOPT_URL ang halaga ng parameter na ito. Maaari mong manu-manong i-install ito gamit ang . curl_setopt - nagtatakda ng mga opsyon para sa CURL transfer/transfer. bool curl_setopt(resource ch, pagpipiliang string, halo-halong halaga) Function curl_setopt() nagtatakda ng mga opsyon para sa CURL session na tinukoy ng parameter ch. Parameter opsyon ay ang opsyon na gusto mong itakda, at halaga ito ang halaga ng opsyon opsyon . Parameter halaga dapat mahaba para sa mga sumusunod na opsyon (tinukoy ng parameter opsyon): Parameter halaga dapat ay isang string para sa mga sumusunod na value ng parameter opsyon : Ang mga sumusunod na opsyon ay umaasa sa isang file descriptor, na nakuha gamit ang function fopen() : Parameter halaga mahabang write_callback (resource ch, string data)( ... return strlen($data);) opsyon : Parameter halaga ay dapat na isang function ng sumusunod na form string read_callback (resource ch, resource fd, long length)() para sa mga sumusunod na halaga ng parameter opsyon : curl_exec - nagsasagawa ng CURL session. bool curl_exec(resource ch) Dapat tawagan ang function na ito pagkatapos mong masimulan ang isang CURL session at ang lahat ng mga opsyon para sa session na iyon ay naitakda na. Ang layunin nito ay simpleng magsagawa ng isang paunang natukoy na CURL session (tinukoy sa parameter ch). curl_close - isinasara ang CURL session. walang bisa curl_close(resource ch) Isinasara ng function na ito ang session ng CURL at ilalabas ang lahat ng mapagkukunan. CURL handle ch ay tinanggal din. curl_errno - nagbabalik ng integer na naglalaman ng huling numero ng error. Kung kailangan mong magpadala ng multidimensional array at isang file sa isang POST request, makakatagpo ka ng hindi malulutas na problema. Kung magpapasa ka ng multidimensional array sa CURLOPT_POSTFIELDS, ang pangalawang antas ay ipapasa bilang string na "Array". Kung nagko-convert ka gamit ang http_build_query, hindi mo mailipat ang file. Nasa ibaba ang isang function para sa pag-encode ng two-dimensional array na may file loading para sa Curl, na gagana sa parehong mas lumang bersyon ng PHP 5.3, PHP 5.4, at PHP 5.6 /** nagko-convert ng multi-dimensional array sa isang one-dimensional array gamit ang mga kumplikadong index at pinapalitan ang @ sa prefix ng CurlFile para gamitin sa Curl * @param $inputArray * @param string $inputKey * @return array $requestVars = array ("id" => array( 1, 2,"id" =>1234), "name" => "log", "logfile" => "@/tmp/test.log"); nakukuha natin ang: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ function convertToStringArray($inputArray, $inputKey="") ($resultArray=; foreach ($inputArray as $key => $value ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ($resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value) = = "@")( $resultArray[$tmpKey] = (class_exists("CURLFile ", false)) ? new CurlFile(ltrim($value, "@")): $value; ) else ($resultArray[$tmpKey ] = $value; ) ) return $resultArray; ) // check $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "site"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Mga halimbawa ng aplikasyon ng paggamit ng Curl
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
?>
Mga Tala
Bakit cURL?
Mga Pangunahing Kaalaman sa cUrl
// 1. initialization $ch = curl_init(); // 2. itakda ang mga opsyon, kabilang ang URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. pagsasagawa ng kahilingan at pagtanggap ng tugon $output = curl_exec($ch); // 4. paglilinis ng mga mapagkukunan curl_close($ch); Pagsubaybay sa bug
Pagkuha ng impormasyon tungkol sa isang kahilingan
Pagsubaybay sa pag-redirect, depende sa browser
Nagpapadala ng mga kahilingan sa POST
Nag-a-upload ng mga file
Maraming kulot
Sinusuri ang Mga Panlabas na Link sa WordPress
Iba pang mga tampok na cURL sa PHP
HTTP authentication
Mag-upload sa pamamagitan ng FTP
Paggamit ng proxy
Mga function ng callback
Konklusyon
kulot na utos
Paano gamitin ang curl?
Limit ng Bilis
Paglilipat ng mga file
Nagpapadala ng POST data
Pagpapadala at pagtanggap ng cookies
Pagpapadala at pagsusuri ng header
pagpapatunay ng curl
Paggamit ng proxy
mga konklusyon
Ano nga ba ang cURL at libcurl? Pangkalahatang puntos
Pag-install ng cURL sa Denver (Denver). Paano simulan ang paggamit ng libcurl?
Paglalarawan ng cURL at mga unang hakbang
istraktura ng header ng kahilingan sa HTTP
Hiling
GET / HTTP/1.1 - Sinusubukan naming makuha ang pahina sa /, iyon ay, ang pangunahing pahina na matatagpuan sa ugat ng folder. Gumagamit kami ng protocol na bersyon 1.1.
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14— Ipinakilala namin ang aming sarili sa server, kami ang Opera browser.
Host: ya.ru — Domain name ng hiniling na mapagkukunan.
Tanggapin: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1— Listahan ng mga katanggap-tanggap na format ng mapagkukunan.
Accept-Wika: ru-RU,ru;q=0.9,en;q=0.8— Listahan ng mga sinusuportahang wika.
Accept-Encoding: gzip, deflate— Mga sinusuportahang paraan ng pag-encode.
Cookie: yandexuid=ХХХХХ - Cookies, kung kinakailangan.
Koneksyon: Keep-Alive - Mangyaring huwag putulin ang koneksyon at manatiling nakikipag-ugnayan.
Sagot
HTTP/1.1 200 Ok - Nakatanggap kami ng tugon na may code 200, na nangangahulugang OK ang lahat.
Server: nginx - Nagpakilala ang server - ito ay nginx.
Petsa: Linggo, 10 Mar 2013 14:10:50 GMT— Kasalukuyang petsa at oras sa server.
Uri ng Nilalaman: text/html; charset=UTF-8— Uri ng nilalaman at pag-encode.
Koneksyon: isara - Ayaw ng server na magpanatili ng permanenteng koneksyon sa amin, kaya agad itong isinara. Magkakaroon ng bagong koneksyon para sa susunod na kahilingan.
Cache-Control: walang cache, walang tindahan, max-age=0, dapat muling patunayan- Pamamahala ng pag-cache. Sa kasong ito ito ay hindi pinagana.
Mag-e-expire: Linggo, 10 Mar 2013 14:10:50 GMT— Petsa ng inaasahang pag-expire ng session. Sa aming kaso, ito ay kasabay ng oras ng pagbubukas, dahil agad itong isinara ng server, kaagad pagkatapos ng pagproseso.
Huling Binago: Linggo, 10 Mar 2013 14:10:50 GMT— Oras ng huling pagbabago.
Content-Encoding: gzip — Paraan ng pag-encode ng impormasyon.
Ang kumpletong listahan ng lahat ng mga parameter na makikita sa header ng kahilingan sa HTTP ay matatagpuan sa Wikipedia.
Ngayon ay mayroon ka nang magaspang na ideya kung paano nakikipag-ugnayan ang iyong browser at web server sa isa't isa. Ito ay lubhang kapaki-pakinabang na malaman at maunawaan, dahil susubukan naming tularan ang mga pagkilos ng browser gamit ang libcurl library. Sige lang.Halimbawa ng pagtatrabaho sa library
url — address ng pahina o site.
Mga halaga ng parameter ng output (array na may tatlong elemento):
header['errno'] - kung may nangyaring mali, magkakaroon ng error code dito.
header[‘errmsg’] – lalabas dito ang text ng error.
header['content'] - ang aktwal na page\file\image, atbp.
Pagkatapos ay maaari mong gawin ang anumang gusto mo gamit ang page code, halimbawa, i-parse ito gamit ang mga regular na expression. Ngunit iyon lang sa mga susunod na aralin, ngunit sa ngayon ay tigilan na natin ito.Kulot
Kasalukuyang sinusuportahan ng libcurl ang http, https, ftp, gopher, telnet, dict, file at mga protocol ng ldap.
Sinusuportahan din ng libcurl ang mga HTTPS certificate, HTTP POST, HTTP PUT, FTP upload (maaari rin itong gawin gamit ang ftp PHP extension), HTTP form-based upload, proxy, cookies, at user+password authentication.curl_init
Paglalarawan
curl_setopt
Paglalarawan
curl_exec
Paglalarawan
curl_close
Paglalarawan
curl_errno
Paglalarawan
Halimbawa 1: Pagsisimula ng bagong CURL session at pagkuha ng web page.
Halimbawa 2: Paggamit ng CURL module ng PHP upang makakuha ng example.com
Halimbawa 3: Pagsuri sa Accessibility ng URL Gamit ang CURL ng PHP
Halimbawa 4: Paghihiwalay sa header mula sa katawan na nakuha gamit ang PHP's CURL
Halimbawa 5: Pagtukoy ng Referral URL Gamit ang CURL ng PHP
ang problema: curl_setopt($ch,FOLLOW_LOCATION,1); ang error: problema sa open_basedir at safe_mode ang solusyon: isang function na binuo ng isang tao ang solusyon n 2: ang parehong function, binago, gumagana nang mahusay para sa akin..= $curl_max_loops) ( $curl_loops = 0; ibalik ang FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); list($header, $data) = explode("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) ($matches = ; preg_match("/Lokasyon:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop($matches))); kung (!$url) ( // hindi maproseso ang url para i-redirect sa $curl_loops = 0; ibalik ang $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; kung (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; kung (!$url["host"]) $url["host"] = $last_url[ "host"]; if (!$url["path"]) $url["path"] = $last_url["path"]; $new_url = $url["scheme"] . "://" . $ url["host"] . $url["path"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Redirecting to", $new_url); return curl_redir_exec($ch); ) else ($curl_loops=0; return $data; ) ) ?>
gamitin lang ang function na ito nang walang de FOLLOW_LOCATION at dapat gumana. ang problema ay kapag nakarating ka sa linya kung saan ibinalik mo ang data kung ang http_code ay iba sa 301 oe 302, ang $data ay may hindi na ginagamit na impormasyon o wala. kaya ginagawa ni $debbbb ang trabaho. Halimbawa 6: Pag-parse ng cookie mula sa header gamit ang CURL PHP
Minsan hindi mo magagamit ang CURLOPT_COOKIEJAR at CURLOPT_COOKIEFILE dahil sa mga php-setting ng server(Maaari kang kumuha ng anumang file mula sa server gamit ang mga opsyong ito). Narito ang solusyon 1) Huwag gumamit ng CURLOPT_FOLLOWLOCATION 2) Gumamit ng curl_setopt($ch, CURLOPT_HEADER, 1) 3)Kunin mula sa header na cookies tulad nito: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4) Itakda ang mga ito gamit ang curl_setopt($ch, CURLOPT_COOKIE, $cookies); Halimbawa 7: Pag-parse ng cookie mula sa header gamit ang CURL PHP
Gaya ng binanggit ni Yevgen kanina kung minsan ay hindi namin magagamit ang CURLOPT_COOKIEJAR at CURLOPT_COOKIEFILE. Nasa ibaba ang isang header callback function na isinulat ko noong Enero na hinahayaan kang magpanatili ng cookies sa pagitan ng mga kahilingan sa cURL. Ang mga cookies ay idinaragdag sa $ch sa lahat ng mga kahilingan kahit na sa panahon ng pag-redirect, kaya maaari mong gamitin ito kasama ng CURLOPT_FOLLOWLOCATION. Narito ang code: function read_header($ch, $string) ( global $location; #keep track of location/redirects global $cookiearr; #store cookies here global $ch; # ^overrides the function param $ch # okay lang ito dahil kailangan nating # i-update ang pandaigdigang $ch gamit ang # bagong cookies $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep track of huling pag-redirect $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get the cookie $cookiestr = trim(substr( $string, 11, -1)); $cookie = explode(";", $cookiestr); $cookie = explode("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute lang sa dulo ng header foreach ($cookiearr as $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) ibalik ang $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Ipinapalagay ng code na ito na gagamitin mo muli ang $ch nang hindi ito sinisimulan sa bawat oras (tawagan ang curl_init nang isang beses lamang, sa simula). Kung kailangan mong simulan muli ang $ch sa anumang punto sa iyong code, maaari mong ma-access ang kasalukuyang nakaimbak na cookies sa $cookiearr at isama ang mga ito sa bagong $ch. Isinulat ko ang function na ito bago ako magkaroon ng sapat na karanasan sa mga regular na expression upang hindi ka makakahanap ng anumang preg_match na mga tawag dito. Medyo matagal ko nang ginagamit ang code na ito at walang anumang problema sa pag-access sa gmail, yahoo, hotmail, aol atbp. kung saan kailangan kong dumaan sa pag-login at ilang pahina bago makarating sa hinahanap ko. Halimbawa 8: Pagse-set up ng header load handler gamit ang CURL PHP
Gamit ang cURL, kailangan kong tumawag ng third-party na script na nagbabalik ng binary data bilang attachment upang maipasa muli ang nakuhang data bilang attachment. Ang problema ay ang script ng third-party na paminsan-minsan ay nagbabalik ng mga error sa HTTP at gusto kong iwasan ang pagpasa sa zero-length na attachment sa mga ganitong kaso. Ang kumbinasyon ng paggamit ng CURLOPT_FAILONERROR at CURLOPT_HEADERFUNCTION callback ay nakatulong upang maiproseso nang maayos ang mga third-party script na HTTP error: function curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) ( trHeader($s) ); header("Content-Disposition: attachment; filename="file-name.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://site/"); curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1); curl_setopt($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); curl_setopt($resURL, CURLOPT_FAILONERROR, 1); curl_exec($resURL); $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE); curl_close($resURL); if ($intReturnCode != 200) ( print "Error with code: " . $intReturnCode; ) Halimbawa 9. Pag-save ng page sa isang file at pagkalkula ng transfer rate gamit ang CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); function na WritePageToFile($sHTMLpage, $sTxtfile) ($sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_HEADER, 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); echo " "; echo "Average na bilis ng pag-download == " . $sAverageSpeedDownload . "
"; curl_close ($sh); FClose ($hFile); echo "( Tingnan ang file na "".$sTxtfile."" sa parehong landas ng hosting." " kung saan ang script na PHP).
"; echo "Average Speed upload == " . $sAverageSpeedUpload ."
"; echo"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Halimbawa 9. Pagtanggap ng page sa pamamagitan ng SSL connection (https)
$ch=curl_init("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // I-disable ang error na "SSL certificate problem, i-verify na OK ang CA cert" curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); // Disable the error "SSL: certificate subject name "hostname.ru" does not match target host name "123.123"" curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $out=curl_exec($ch); //$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //echo "http_code=".$http_code,", err=".curl_error($ch); curl_close($ch); Halimbawa 10: Paggamit ng mga session at cookies sa curl
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://site"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//i-save ang mga natanggap na COOKIE sa isang file na curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //ipadala sa server ang mga COOKIE na natanggap mula dito sa panahon ng awtorisasyon $out=curl_exec($curl); Halimbawa 11: Pag-upload ng file at multidimensional array sa Curl. CURLOPT_POSTFIELDS + CurlFile