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.

Magkomento:

Awtomatikong itinatakda ng PHP ang parameter na ito sa TOTOO, baguhin ito para lamang sa mga layunin ng pag-debug.

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_*.

Magkomento:

Hindi na ginagamit ang opsyong ito dahil hindi ito kailanman ipinatupad sa cURL at hindi gumana.

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.

Magkomento:

Huwag gamitin ang feature na ito hangga't hindi ka nakakatiyak na sinusuportahan ng server ang ganitong uri ng kahilingan.

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.

Magkomento:

Dahil ang parameter na ito ay naglalaman ng mahalagang password, tandaan na panatilihin itong PHP script sa isang ligtas na lugar.

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.

Magkomento:

Ang callback function ay tinatawag lamang kung ang opsyon CURLOPT_NOPROGRESS nakatakda sa halaga MALI.

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
$ch = curl_init();

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

$ch = curl_init();

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

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

Curl_exec($ch);
?>

Ang resulta ng pagpapatakbo ng halimbawang ito:

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

Mga Tala

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.

Bakit 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.

Mga Pangunahing Kaalaman sa cUrl

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:

  1. Pagsisimula.
  2. Mga pagpipilian sa pagtatakda.
  3. Isinasagawa ang kahilingan.
  4. Paglilinis ng mga mapagkukunan.
// 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);

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.

Pagsubaybay sa bug

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.

Pagkuha ng impormasyon tungkol sa isang kahilingan

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:

  • "url"
  • "content_type"
  • "http_code"
  • "header_size"
  • "kahilingan_laki"
  • "oras ng file"
  • "ssl_verify_result"
  • "redirect_count"
  • "kabuuang_oras"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "bilis_download"
  • "speed_upload"
  • "haba ng_download_nilalaman"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"

Pagsubaybay sa pag-redirect, depende sa browser

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

Nagpapadala ng mga kahilingan sa POST

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.

Nag-a-upload ng mga file

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))

Maraming kulot

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.

Sinusuri ang Mga Panlabas na Link sa WordPress

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):

  1. Nagdaragdag kami ng paunang bilang ng mga deskriptor upang hindi ma-overload ang system na may mga thread. Ang numero ay kinokontrol ng $max_connections variable.
  2. Iniimbak ng variable na $curRunning ang bilang ng mga tumatakbong thread, iniimbak ng $running ang dating halaga; kung naging hindi pantay ang mga ito, tapos na ang trabaho ng isa sa mga thread.
  3. Nakatanggap kami ng impormasyon tungkol sa nakumpletong kahilingan.
  4. Kung walang tugon mula sa server, hindi gumagana ang link.
  5. Ang tugon ng server ay 404.
  6. Kung hindi, gumagana ang link.
  7. Nakumpleto ang kahilingan, naglalabas kami ng mga mapagkukunan.
  8. Magdagdag tayo ng bagong URL sa multi descriptor.
  9. Function add_url_to_multi_handle() nagdaragdag ng bagong handle na may ibinigay na URL sa multi-descriptor.

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() .

Iba pang mga tampok na cURL sa PHP

HTTP authentication

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);

Mag-upload sa pamamagitan ng FTP

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);

Paggamit ng proxy

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);

Mga function ng callback

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.

Konklusyon

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.

kulot na utos

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:

  • -# - magpakita ng simpleng progress bar habang naglo-load;
  • -0 - gamitin ang http 1.0 protocol;
  • -1 - gamitin ang tlsv1 encryption protocol;
  • -2 - gumamit ng sslv2;
  • -3 - gumamit ng sslv3;
  • -4 - gumamit ng ipv4;
  • -6 - gumamit ng ipv6;
  • -A- tukuyin ang iyong USER_AGENT;
  • -b- i-save ang Cookie sa isang file;
  • -c- ipadala ang Cookie sa server mula sa isang file;
  • -C- ipagpatuloy ang pag-download ng file mula sa break point o tinukoy na offset;
  • -m- maximum na oras ng paghihintay para sa isang tugon mula sa server;
  • -d- magpadala ng data gamit ang POST method;
  • -D- i-save ang mga header na ibinalik ng server sa isang file;
  • -e- itakda ang field ng Referer-uri, na nagsasaad kung saang site nanggaling ang user;
  • -E- gumamit ng panlabas na SSL certificate;
  • -f- huwag magpakita ng mga mensahe ng error;
  • -F- magpadala ng data sa anyo ng isang form;
  • -G- kung ang opsyon na ito ay pinagana, ang lahat ng data na tinukoy sa -d na opsyon ay ipapadala gamit ang GET method;
  • -H- ilipat ang mga header sa server;
  • -ako- tumanggap lamang ng HTTP header at huwag pansinin ang buong nilalaman ng pahina;
  • -j- magbasa at magpadala ng cookies mula sa isang file;
  • -J- alisin ang header mula sa kahilingan;
  • -L- tanggapin at iproseso ang mga pag-redirect;
  • -s- maximum na bilang ng mga pag-redirect gamit ang Lokasyon;
  • -o- nilalaman ng pahina ng output sa isang file;
  • -O- i-save ang nilalaman sa isang file na may pangalan ng pahina o file sa server;
  • -p- gumamit ng proxy;
  • --proto- ipahiwatig ang protocol na gagamitin;
  • -R- i-save ang huling oras ng pagbabago ng isang malayuang file;
  • -s- ipakita ang isang minimum na impormasyon tungkol sa mga error;
  • -S- ipakita ang mga mensahe ng error;
  • -T- i-upload ang file sa server;
  • -v- ang pinakadetalyadong output;
  • -y- pinakamababang bilis ng pag-download;
  • -Y- maximum na bilis ng pag-download;
  • -z- i-download lamang ang file kung ito ay binago sa ibang pagkakataon kaysa sa tinukoy na oras;
  • -V- ipakita ang bersyon.

Hindi ito lahat ng mga opsyon para sa curl linux, ngunit inililista nito ang mga pangunahing kaalaman na kakailanganin mong gamitin.

Paano gamitin ang curl?

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

Limit ng Bilis

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

Paglilipat ng mga file

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.

Nagpapadala ng POST data

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.

Pagpapadala at pagtanggap ng cookies

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

Pagpapadala at pagsusuri ng header

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:

pagpapatunay ng curl

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.

Paggamit ng proxy

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

mga konklusyon

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.

Ano nga ba ang cURL at libcurl? Pangkalahatang puntos

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!

Pag-install ng cURL sa Denver (Denver). Paano simulan ang paggamit ng libcurl?

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:

  • I-download ang nakahanda nang extension package na “PHP5: karagdagang mga module”.
  • Alinsunod dito, ini-install namin ito. Walang kumplikado, sumasang-ayon :)
  • Buksan ang file sa Notepad (Palagi kong inirerekomenda ang Notepad++): X:/webservers/usr/local/php5/php.ini //kung saan X ang iyong drive kung saan naka-install ang webserver

    at alisin ang semicolon sa simula ng mga termino:

    ;extension=php_curl.dll

  • Ire-restart namin ang server ng Denver.

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.

Paglalarawan ng cURL at mga unang hakbang

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:

  • Magsimula ng session (curl_init)
  • Itakda ang mga opsyon na kailangan namin (curl_setopt)
  • Isagawa ang natanggap na kahilingan (curl_exec)
  • Tapusin ang session (curl_close)

istraktura ng header ng kahilingan sa HTTP

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:
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

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:
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.

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 :)
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.

Naka-block ang JavaScript sa iyong browser. Mangyaring paganahin ang JavaScript para gumana ang site!

Kulot

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.
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.

Ang mga function na ito ay ipinakilala sa PHP 4.0.2.

curl_init

curl_init - nagpapasimula ng CURL session.

Paglalarawan

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

curl_setopt - nagtatakda ng mga opsyon para sa CURL transfer/transfer.

Paglalarawan

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):

  • CURLOPT_INFILESIZE: Kung nag-a-upload ka ng file sa isang malayong site, dapat gamitin ang opsyong ito para sabihin sa PHP kung ano ang inaasahang laki ng infile.
  • CURLOPT_VERBOSE: Itakda ang opsyong ito sa isang hindi zero na halaga kung gusto mong iulat ng CURL ang lahat ng pagkilos.
  • CURLOPT_HEADER: Itakda ang opsyong ito sa isang hindi-zero na halaga kung gusto mong maisama ang header sa output.
  • CURLOPT_NOPROGRESS: Itakda ang opsyong ito sa isang hindi-zero na halaga kung ayaw mong magpakita ang PHP ng CURL transfer progress indicator. (Awtomatikong itinatakda ng PHP ang opsyong ito sa isang hindi zero na halaga; kailangan mo lamang itong baguhin kapag nagde-debug.)
  • CURLOPT_NOBODY: Itakda ang opsyong ito sa isang hindi-zero na halaga kung ayaw mong maisama ang katawan sa output.
  • CURLOPT_FAILONERROR: Itakda ang opsyong ito sa isang hindi-zero na halaga kung gusto mong tahimik na lumabas ang PHP kung ang ibinalik na HTTP code ay mas malaki kaysa sa 300. Bilang default, ang pahina ay ibinalik nang normal nang hindi pinansin ang code.
  • CURLOPT_UPLOAD: Itakda ang opsyong ito sa isang hindi zero na halaga kung gusto mong ihanda ng PHP ang file para sa pag-upload.
  • CURLOPT_POST: Itakda ang opsyong ito sa isang hindi-zero na halaga kung gusto mong gawin ng PHP ang regular na HTTP POST. Ang POST na ito ay nasa normal na form na application/x-www-form-urlencoded, pinakakaraniwang ginagamit ng mga HTML form.
  • CURLOPT_FTPLISTONLY: Itakda ang opsyong ito sa isang hindi-zero na halaga at ililista ng PHP ang mga pangalan ng direktoryo ng FTP.
  • CURLOPT_FTPAPPEND: Itakda ang opsyong ito sa isang hindi-zero na halaga at ang PHP ay idaragdag sa malayong file sa halip na i-overwrite ito.
  • CURLOPT_NETRC: Itakda ang opsyong ito sa isang hindi-zero na halaga at i-scan ng PHP ang iyong ~./netrc file upang mahanap ang iyong username at password para sa malayong site kung saan ka kumukonekta.
  • CURLOPT_FOLLOWLOCATION: Itakda ang opsyong ito sa isang hindi zero na halaga upang sundin ang anumang "Lokasyon: " na header na ipinadala ng server bilang bahagi ng isang HTTP header (tandaan na ito ay recursion, susundan ng PHP ang lahat ng "Lokasyon: " -header" na ipinadala. )
  • CURLOPT_PUT: Itakda ang opsyong ito sa isang hindi-zero na halaga sa HTTP PUT ang file. Ang file para sa PUT ay dapat itakda gamit ang CURLOPT_INFILE at CURLOPT_INFILESIZE.
  • CURLOPT_MUTE: Itakda ang opsyong ito sa isang hindi-zero na halaga at ang PHP ay gagana nang nakatago patungkol sa mga function ng CURL.
  • CURLOPT_TIMEOUT: Ipasa ang haba bilang isang parameter na naglalaman ng maximum na oras sa mga segundo na pinapayagan mong tumakbo ang mga function ng CURL.
  • CURLOPT_CONNECTTIMEOUT: Ipasa ang haba bilang isang parameter na naglalaman ng maximum na oras, sa mga segundo, na pinapayagan mong maghintay kapag sinusubukang kumonekta. Gumamit ng 0 para maghintay magpakailanman.
  • CURLOPT_LOW_SPEED_LIMIT: Ipasa ang haba bilang isang parameter na naglalaman ng bilis ng paglipat, sa mga byte bawat segundo, sa ibaba kung saan ang paglipat ay dapat tumakbo sa panahon ng pagpapatupad CURLOPT_LOW_SPEED_TIME, sa mga segundo, para sa PHP na ituring itong masyadong mabagal at i-abort ito.
  • CURLOPT_LOW_SPEED_TIME: Magpasa ng haba bilang isang parameter na naglalaman ng oras sa mga segundo sa ibaba kung saan dapat tumakbo ang paglilipat habang tumatakbo ang CURLOPT_LOW_SPEED_LIMIT para sa PHP na ituring itong masyadong mabagal at i-abort ito.
  • CURLOPT_RESUME_FROM: Ipasa bilang isang parameter na naglalaman ng byte offset kung saan dapat magsimula ang paglipat.
  • CURLOPT_SSLVERSION: Ipasa ang haba bilang isang parameter na naglalaman ng bersyon ng SSL na gagamitin (2 o 3). Bilang default, sinusubukan ng PHP na tukuyin ito mismo, bagama't sa ilang mga kaso kailangan mong itakda ito nang manu-mano.
  • CURLOPT_SSL_VERIFYHOST: Pass long kung dapat suriin ng CURL ang karaniwang pangalan ng peer certificate sa isang SSL handshake. Ang isang halaga ng 1 ay nagpapahiwatig na dapat naming suriin para sa pagkakaroon ng isang karaniwang /karaniwang pangalan, ang isang halaga ng 2 ay nagpapahiwatig na dapat naming tiyakin na ito ay tumutugma sa ibinigay na hostname.
  • CURLOPT_TIMECONDITION: Magpasa bilang isang parameter na tumutukoy kung paano ginagamot ang CURLOPT_TIMEVALUE. Maaari mong itakda ang parameter na ito sa TIMECOND_IFMODSINCE o TIMECOND_ISUNMODSINCE. Gumagana lang ito para sa HTTP.
  • CURLOPT_TIMEVALUE: Ipasa ang haba bilang isang parameter, na ang oras sa mga segundo mula noong Enero 1, 1970. Ang oras na ito ay ginagamit bilang tinukoy ng opsyon na CURLOPT_TIMEVALUE, o ang default na TIMECOND_IFMODSINCE ang gagamitin.
  • CURLOPT_RETURNTRANSFER: Magpasa ng hindi zero na halaga kung gusto mong direktang ibalik ng CURL ang natanggap na impormasyon sa halip na direktang i-print ito.

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() :

  • CURLOPT_FILE: Ang file kung saan dapat ilagay ang output ng iyong paglilipat, bilang default ito ay STDOUT.
  • CURLOPT_INFILE: Ang file kung saan nagmumula ang iyong transfer input.
  • CURLOPT_WRITEHEADER: File para sa pagtatala ng header na bahagi ng output.
  • CURLOPT_STDERR: File para mag-record ng mga error, sa halip na stderr.

Parameter halaga mahabang write_callback (resource ch, string data)( ... return strlen($data);) opsyon :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

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 :

  • CURLOPT_READFUNCTION: .

curl_exec

curl_exec - nagsasagawa ng CURL session.

Paglalarawan

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

curl_close - isinasara ang CURL session.

Paglalarawan

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

curl_errno - nagbabalik ng integer na naglalaman ng huling numero ng error.

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 . " 
"; echo "Average Speed ​​​​upload == " . $sAverageSpeedUpload ."
"; echo"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
"; curl_close ($sh); FClose ($hFile); echo "( Tingnan ang file na "".$sTxtfile."" sa parehong landas ng hosting." " kung saan ang script na PHP).
"; }
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

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