PHP CURL - funksionet dhe shembujt e përdorimit. Përdorimi i avancuar i cURL në opsionet e linjës së komandës PHP Curl

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

curl_setopt - Vendos një parametër për seancën CURL

Lista e parametrave

dorezë cURL marrë nga curl_init ().

Parametri që do të vendoset CURLOPT_XXX.

Vlera e parametrit të opsionit.

bool:

Parametri Shënime
CURLOPT_AUTOREFERER E VËRTETË për vendosjen automatike të fushës Referues: në kërkesat e ridrejtuara sipas kokës Vendndodhja:.
CURLOPT_BINARITRANSFER E VËRTETË për të kthyer përgjigjen e papërpunuar kur përdorni një konstante CURLOPT_RETURNTRANSFER. Që nga PHP 5.1.3 ky opsion nuk kërkohet më: prodhimi i papërpunuar kthehet gjithmonë kur përdoret opsioni CURLOPT_RETURNTRANSFER.
CURLOPT_COOKIESESSION E VËRTETË për të udhëzuar sesionin aktual për të filluar një "sesion" të ri të cookies. Kjo do të bëjë që libcurl të injorojë çdo cookie "sesioni" që duhet të kishte ngarkuar nga sesioni i mëparshëm. Si parazgjedhje, libcurl gjithmonë ruan dhe ngarkon të gjitha cookie-t, pavarësisht nëse janë "sesion" apo jo. Cookies "Session" janë cookie që nuk skadojnë dhe duhet të ekzistojnë vetëm për "sesionin" aktual.
CURLOPT_CERTINFO E VËRTETË për të nxjerrë informacionin e certifikatës SSL për transmetim STDERR me lidhje të sigurta. Shtuar në cURL 7.19.1. Në dispozicion duke filluar nga PHP 5.3.2. Kërkon që ky opsion të aktivizohet për funksionimin e duhur CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY E VËRTETË i thotë bibliotekës të kryejë vërtetimin e nevojshëm të proxy dhe konfigurimin e lidhjes, por nuk transmeton të dhëna. Ky opsion zbatohet për HTTP, SMTP dhe POP3. Shtuar në 7.15.2. Në dispozicion nga PHP 5.5.0.
CURLOPT_CRLF E VËRTETË për të kthyer mbaresat e linjës Unix në CRLF.
CURLOPT_DNS_USE_GLOBAL_CACHE E VËRTETË për të përdorur cache globale DNS. Ky opsion nuk është i sigurt dhe aktivizohet si parazgjedhje.
CURLOPT_FAILONERROR E VËRTETË për një raport të detajuar mbi dështimin nëse kodi HTTP i marrë është më i madh ose i barabartë me 400. Sjellja e paracaktuar e kthen faqen si normale, duke injoruar kodin.
CURLOPT_FILETIME E VËRTETË në përpjekje për të marrë datën e modifikimit të një dokumenti në distancë. Kjo vlerë mund të merret duke përdorur parametrin CURLINFO_FILETIME nga funksioni curl_getinfo ().
CURLOPT_FOLLOWLOCATION E VËRTETË për të ndjekur ndonjë titull "Vendndodhja:" dërguar nga serveri në përgjigjen e tij (vini re se kjo ndodh në mënyrë rekursive, PHP do të ndjekë çdo titull të dërguar "Vendndodhja:", përveç rasteve kur vendoset një konstante CURLOPT_MAXREDIRS).
CURLOPT_FORBID_RIPERDORIMI E VËRTETË për të detyruar një lidhje të mbyllet pasi të ketë përfunduar përpunimi i saj në mënyrë që të mos mund të ripërdoret.
CURLOPT_FRESH_CONNECT E VËRTETË për të detyruar përdorimin e një lidhjeje të re në vend të një lidhjeje të memorizuar.
CURLOPT_FTP_USE_EPRT E VËRTETË për të përdorur EPRT (dhe LPRT) për ngarkime aktive FTP. Përdorni I RREMË në mënyrë që të çaktivizoni EPRT dhe LPRT dhe të përdorni vetëm PORT.
CURLOPT_FTP_USE_EPSV E VËRTETË për testimin fillestar të komandës EPSV gjatë transferimeve FTP. Nëse komanda dështon, ajo do të kthehet në PASV. Instaloni në I RREMË për të çaktivizuar EPSV.
CURLOPT_FTP_CREATE_MISSING_DIRS E VËRTETË për të krijuar drejtoritë që mungojnë nëse një operacion FTP has në një shteg që nuk ekziston.
CURLOPT_FTPAPPEND E VËRTETË për të shkruar një skedar në distancë deri në fund, në vend që ta mbishkruani mbi një skedar ekzistues.
CURLOPT_TCP_NODELAY Përcakton në mënyrë të përhershme nëse opsioni TCP_NODELAY duhet të vendoset ose pastrohet (1 = vendosur, 0 = pastrohet). Si parazgjedhje, opsioni pastrohet. E disponueshme nga PHP 5.2.1 për versionet e ndërtuara me libcurl 7.11.2 ose më vonë.
CURLOPT_FTPASCII Pseudonimi CURLOPT_TRANSFERTEXT. Përdoreni këtë në vend.
CURLOPT_FTPLISTONLY E VËRTETË për të kthyer vetëm një listë emrash nga direktoria FTP.
CURLOPT_HEADER E VËRTETË për të përfshirë titujt në dalje.
CURLINFO_HEADER_OUT E VËRTETË për të gjurmuar vargun e pyetjes së dorezës. Në dispozicion duke filluar nga PHP 5.1.3. Parashtesa CURLINFO_ përdoret në mënyrë specifike.
CURLOPT_HTTPGET E VËRTETË për të rivendosur metodën e kërkesës HTTP në metodën GET. Meqenëse GET është parazgjedhja, ky parametër nevojitet vetëm nëse metoda e kërkesës është ndryshuar më parë.
CURLOPT_HTTPPROXYTUNNEL E VËRTETË për të tunelizuar përmes përfaqësuesit të specifikuar HTTP.
CURLOPT_MUTE E VËRTETË për të çaktivizuar plotësisht mesazhet e funksionit cURL. U hoq në cURL 7.15.5 (mund të përdoret opsioni CURLOPT_RETURNTRANSFER)
CURLOPT_NETRC E VËRTETË për të lexuar skedarin ~/.netrc për hyrjen dhe fjalëkalimin për sitin e largët me të cilin po krijohet lidhja.
CURLOPT_NOBODY E VËRTETË për të përjashtuar trupin e përgjigjes nga dalja. Metoda e kërkesës është vendosur në HEAD. Po ndryshon këtë cilësim në I RREMË nuk e ndryshon atë në GET.
CURLOPT_NOPROGRESS

E VËRTETË për të çaktivizuar treguesin e progresit në transferimet cURL.

Koment:

PHP e vendos automatikisht këtë parametër në E VËRTETË, ndryshojeni vetëm për qëllime korrigjimi.

CURLOPT_NOSIGNAL E VËRTETË për të injoruar çdo funksion cURL që dërgon sinjale në procesin PHP. Ky opsion aktivizohet si parazgjedhje në SAPI me shumë fije për të lejuar që parametrat e skadimit të funksionojnë siç duhet.
CURLOPT_POST E VËRTETË për të përdorur HTTP POST të rregullt. Kjo metodë POST përdor normalen , që përdoret zakonisht në format HTML.
CURLOPT_PUT E VËRTETË për të shkarkuar një skedar duke përdorur metodën HTTP PUT. Skedari i përdorur duhet të vendoset duke përdorur opsionet CURLOPT_INFILE Dhe CURLOPT_INFILESIZE.
CURLOPT_RETURNTRANSFER E VËRTETË për të kthyer rezultatin e transferimit si varg nga curl_exec() në vend të daljes direkte në shfletues.
CURLOPT_SAFE_UPLOAD E VËRTETË për të çaktivizuar mbështetjen e prefiksit @ për skedarët e shkarkuar në CURLOPT_POSTFIELDS, që do të thotë se vlerat e kaluara me @ mund të transmetohet në mënyrë të sigurt si fusha. Në vend të një prefiksi, mund të përdorni opsionin CURLFile d. Shtuar në PHP 5.5.0 me vlerë të paracaktuar I RREMË. Në PHP 5.6.0 u bë i barabartë me si parazgjedhje E VËRTETË.
CURLOPT_SSL_VERIFYPEER I RREMË për të ndaluar cURL nga kontrollimi i certifikatës së hostit. Certifikatat alternative që do të verifikohen mund të specifikohen duke përdorur parametrin CURLOPT_CAINFO ose drejtoria me certifikata të specifikuara nga parametri CURLOPT_CAPATH. Parazgjedhja është E VËRTETË që nga versioni cURL 7.10. Shpërndarja e paracaktuar është instaluar duke filluar nga versioni cURL 7.10.
CURLOPT_TRANSFERTEXT E VËRTETË për të përdorur modalitetin ASCII për transferimet FTP. Kur përdorni LDAP, të dhënat kthehen në tekst të thjeshtë në vend të HTML. Në sistemet Windows thread STDOUT nuk vendoset në modalitetin binar.
CURLOPT_UNRESTRICTED_AUTH E VËRTETË për të vazhduar dërgimin e hyrjes dhe fjalëkalimit gjatë ridrejtimeve (kur përdorni CURLOPT_FOLLOWLOCATION), edhe nëse emri i hostit ndryshon.
CURLOPT_UPLOAD E VËRTETË për t'u përgatitur për ngarkimin e skedarit në server.
CURLOPT_VERBOSE E VËRTETË për të shfaqur informacion shtesë. Shkruan rezultatet në një transmetim STDERR, ose skedari i specifikuar nga parametri CURLOPT_STDERR.

Për vlerat e parametrave të opsioneve të mëposhtme, parametri i vlerës duhet të jetë i tipit numër i plotë:

Parametri Vendos vlerën e vlerës Shënime
CURLOPT_BUFFERSIZE Madhësia e buferit të përdorur për çdo lexim. Megjithatë, nuk ka asnjë garanci që kjo kërkesë do të plotësohet. Shtuar në cURL 7.10.
CURLOPT_CLOSEPOLICY Një nga konstantet CURLCLOSEPOLICY_*.

Koment:

Ky opsion është i vjetëruar pasi nuk është zbatuar kurrë në cURL dhe nuk ka funksionuar.

Hequr në PHP 5.6.0.
CURLOPT_CONNECTTIMEOUT Numri i sekondave për të pritur kur përpiqeni të lidheni. Përdorni 0 për të pritur pafundësisht.
CURLOPT_CONNECTTIMEOUT_MS Numri i milisekondave për të pritur gjatë përpjekjes për t'u lidhur. Përdorni 0 për të pritur pafundësisht. Nëse libcurl përpilohet duke përdorur zgjidhësin standard të emrit të sistemit, atëherë lidhja do të përdorë ende një pritje të dytë të plotë si një afat kohor, me një kohëzgjatje minimale të lejuar prej 1 sekonde. Shtuar në versionin cURL 7.16.2. Në dispozicion duke filluar nga PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT Numri i sekondave që regjistron DNS ruhen në memorie. Si parazgjedhje, ky parametër është 120 (2 minuta).
CURLOPT_FTPSSLAUTH Metoda e vërtetimit FTP (në modalitetin aktiv): CURLFTPAUTH_SSL(SSL kontrollohet së pari), CURLFTPAUTH_TLS(TLS u kontrollua së pari) ose CURLFTPAUTH_DEFAULT(CURL vendos vetë). Shtuar në versionin cURL 7.12.2.
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (si parazgjedhje, CURL zgjedh cilin version të përdorë), CURL_HTTP_VERSION_1_0 (forco HTTP/1.0) ose CURL_HTTP_VERSION_1_1 (forco HTTP/1.1).
CURLOPT_HTTPAUTH

Ju mund të përdorni operatorin bitwise | (ose) për të kombinuar disa metoda së bashku. Në këtë rast, cURL do të anketojë serverin për metodat e mbështetura të autorizimit dhe do të zgjedhë më të mirën.

CURLAUTH_ANY është një pseudonim CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE është një pseudonim CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE Madhësia e pritshme e skedarit, në bajt, kur ngarkoni një skedar në një server të largët. Ju lutemi vini re se përdorimi i këtij opsioni nuk do të ndalojë dërgimin e të dhënave të mëtejshme mbi këtë vlerë, pasi të dhënat e dërguara varen nga rezultati CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT Pragu i sipërm për shpejtësinë e transferimit të të dhënave, në bajt për sekondë. Verifikimi bëhet brenda CURLOPT_LOW_SPEED_TIME sekonda, pas së cilës PHP e konsideron transferimin shumë të ngadaltë dhe e ndërpret atë.
CURLOPT_LOW_SPEED_TIME Numri maksimal i sekondave gjatë të cilit shpejtësia e transferimit nuk duhet të kalojë CURLOPT_LOW_SPEED_LIMIT, përndryshe PHP do ta shënojë transferimin si shumë të ngadaltë dhe do ta ndalojë atë.
CURLOPT_MAXCONNECTS Numri maksimal i lidhjeve të vazhdueshme. Kur arrihet kufiri, parametri përdoret për të përcaktuar se cila lidhje duhet të mbyllet. CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS Numri maksimal i ridrejtimeve të pranuara. Përdoreni këtë opsion së bashku me opsionin CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Porta alternative e lidhjes.
CURLOPT_POSTREDIR Një maskë bit që përmban 1 (301 lëvizur përgjithmonë), 2 (302 u gjetën) dhe 4 (303 Shihni të tjera) për të specifikuar nëse metoda HTTP POST duhet të përpunohet kur opsioni është i aktivizuar CURLOPT_FOLLOWLOCATION nëse ka ndodhur lloji i specifikuar i ridrejtimit. Shtuar në cURL 7.19.1. Në dispozicion që nga PHP 5.3.2.
CURLOPT_PROTOKOLLAT

Pak maskë vlerash CURLPROTO_*. Kjo maskë kufizon protokollet e përdorura nga libcurl. Kjo ju lejon të punoni libcurl me një numër të madh protokollesh dhe të kufizoni funksionimin e transfertave të caktuara vetëm në një nëngrup të tyre. Si parazgjedhje, libcurl përdor të gjitha protokollet e mbështetur. Shihni gjithashtu parametrin CURLOPT_REDIR_PROTOKOLS.

Vlerat e sakta të protokollit: CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_FTP, CURLPROTO_FTPS, CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_TELNET, CURLPROTO_HTTPS, CURLPROTO_FTP , CURLPROTO_FILE , CURLP ROTO_TFTP, CURLPROTO_ALL

CURLOPT_PROXYAUTH Metodat e autorizimit HTTP të përdorura kur lidheni me një server proxy. Përdorni të njëjtat maska ​​bit që u përshkruan për parametrin CURLOPT_HTTPAUTH. Aktualisht, vetëm CURLAUTH_BASIC dhe CURLAUTH_NTLM mbështeten për autorizimin e përfaqësuesit. Shtuar në versionin cURL 7.10.7.
CURLOPT_PROXYPORT Numri i portit të serverit proxy me të cilin është bërë lidhja. Ky numër mund të vendoset gjithashtu duke përdorur parametrin CURLOPT_PROXY.
CURLOPT_PROXYTYPE Ose CURLPROXY_HTTP (e parazgjedhur) ose CURLPROXY_SOCKS5. Shtuar në cURL 7.10.
CURLOPT_REDIR_PROTOKOLS Maska e vogël e vlerave CURLPROTO_*. Kjo bitmask kufizon protokollet e përdorura nga libcurl gjatë ridrejtimit (me parametrin e aktivizuar CURLOPT_FOLLOWLOCATION). Kjo ju lejon të kufizoni grupin e protokolleve të përdorura kur ridrejtoni për disa transmetime. Si parazgjedhje, libcurl mbështet të gjitha protokollet përveç FILE dhe SCP. Në versionet para 7.19.4, ridrejtimi u përdor për të gjitha protokollet pa përjashtim. Shihni gjithashtu përshkrimin e parametrave CURLOPT_PROTOKOLLAT për një listë konstantesh me vlera protokolli. Shtuar në versionin cURL 7.19.4.
CURLOPT_RESUME_FROM Kompensimi i fillimit të transmetimit, në bajt.
CURLOPT_SSL_VERIFYHOST Përdorni 1 për të kontrolluar ekzistencën e një emri të përbashkët në certifikatën SSL. Përdorni 2 për të kontrolluar nëse emri i përbashkët ekziston dhe gjithashtu përputhet me hostin e specifikuar. Në një mjedis luftarak, vlera e këtij parametri duhet të jetë 2 (e vendosur si parazgjedhje). Mbështetja për vlerën 1 është hequr në cURL 7.28.1
CURLOPT_SSLVERSION Një nga konstantet 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) ose CURL_SSLVERSION_TLSv1_2 (6).
CURLOPT_TIMECONDITION Metoda e interpretimit të parametrave CURLOPT_TIMEVALUE. Përdor CURL_TIMECOND_IFMODSINCE për të kthyer faqen vetëm nëse ajo ka ndryshuar që nga koha e specifikuar në parametrin CURLOPT_TIMEVALUE. Nëse faqja nuk është modifikuar, titulli do të kthehet "304 i pa modifikuar", duke nënkuptuar se parametri CURLOPT_HEADER instaluar në E VËRTETË. Përdor CURL_TIMECOND_IFUNMODSINCE për efektin e kundërt. Parazgjedhja është CURL_TIMECOND_IFMODSINCE.
CURLOPT_TIMEOUT Numri maksimal i sekondave i lejuar për ekzekutimin e funksioneve cURL.
CURLOPT_TIMEOUT_MS Numri maksimal i milisekondave të lejuar për ekzekutimin e funksioneve cURL. Nëse libcurl ndërtohet duke përdorur zgjidhësin normal të emrit të sistemit, atëherë kjo hapësirë ​​e lidhjes do të përdorë ende afate të rrumbullakosjes së dytë, me një kohëzgjatje minimale të lejuar prej një sekonde. Shtuar në versionin cURL 7.16.2. Në dispozicion duke filluar nga PHP 5.2.3.
CURLOPT_TIMEVALUE Numri i sekondave që nga 1 janari 1970. Kjo kohë do të përdoret nga parametri CURLOPT_TIMECONDITION. Si parazgjedhje, përdoret parametri CURL_TIMECOND_IFMODSINCE.
CURLOPT_MAX_RECV_SPEED_LARGE Nëse shpejtësia e shkarkimit e kalon këtë vlerë (të specifikuar në bajt për sekondë) mesatarisht gjatë gjithë transferimit, shkarkimi do të ndërpritet për të ruajtur shpejtësinë mesatare më të vogël ose të barabartë me këtë parametër. Si parazgjedhje, shpejtësia nuk është e kufizuar.
CURLOPT_MAX_SEND_SPEED_LARGE Nëse ngarkimi në server e kalon këtë vlerë (të specifikuar në bajt për sekondë) mesatarisht gjatë gjithë transferimit, ngarkimi do të ndërpritet për të mbajtur një shpejtësi mesatare më të vogël ose të barabartë me këtë parametër. Si parazgjedhje, shpejtësia nuk është e kufizuar. Shtuar në cURL 7.15.5. Në dispozicion duke filluar nga PHP 5.4.0.
CURLOPT_SSH_AUTH_TYPES Një bitmask i përbërë nga një ose më shumë konstante: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Instaloni CURLSSH_AUTH_ANY në mënyrë që libcurl të zgjedhë njërën prej tyre në mënyrë të pavarur. Shtuar në cURL 7.16.1.
CURLOPT_IPRESOLVE Lejon një aplikacion të zgjedhë llojin e adresës IP me të cilën përcaktohet emri i hostit. Kjo është e nevojshme nëse jeni duke përdorur një emër hosti që rrjedh nga më shumë se një version i adresës IP. Vlerat e mundshme mund të jenë CURL_IPRESOLVE_Çfarëdo, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, dhe si parazgjedhje CURL_IPRESOLVE_Çfarëdo. Shtuar në cURL 7.10.8.

Për vlerat e parametrave të opsioneve të mëposhtme, parametri i vlerës duhet të jetë i tipit varg:

Parametri Vendos vlerën e vlerës Shënime
CURLOPT_CAINFO Emri i një skedari që përmban një ose më shumë certifikata kundrejt të cilave do të kontrollohen nyjet. Ky parametër ka kuptim vetëm kur përdoret në lidhje me CURLOPT_SSL_VERIFYPEER. Kërkon një rrugë absolute.
CURLOPT_CAPATH Një direktori që përmban disa certifikata CA. Përdoreni këtë opsion në lidhje me CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Përmbajtja e titullit "Biskotë:", e përdorur në kërkesën HTTP. Ju lutemi vini re se shumë skedarë janë të ndara nga një pikëpresje e ndjekur nga një hapësirë ​​(për shembull, " fruta=mollë; ngjyra = e kuqe")
CURLOPT_COOKIEFILE Emri i skedarit që përmban cookies. Ky skedar duhet të jetë në formatin Netscape ose thjesht titujt HTTP të shkruara në skedar. Nëse një varg bosh kalohet si emër skedari, atëherë skedarët e skedarëve nuk do të ruhen, por përpunimi i tyre do të jetë ende i aktivizuar.
CURLOPT_COOKIEJAR Emri i skedarit në të cilin do të ruhen të gjitha kukit e brendshëm të transferimit aktual pasi të mbyllet doreza, për shembull pasi të keni thirrur curl_close.
KËRKESË CURLOPT_CUSTOM

Në vend të kësaj është përdorur metoda e personalizuar e kërkesës "MARR" ose "KOKË" kur bëni një kërkesë HTTP. Kjo është e dobishme për pyetje "FSHI" ose kërkesa të tjera, më të rralla HTTP. Kuptimi i saktë do të ishte fjalë si "MARR", "POST", "LIDH" e kështu me radhë; ato. Mos e futni të gjithë linjën e kërkesës HTTP këtu. Për shembull, një tregues "MERRNI /index.html HTTP/1.0\r\n\r\n" do të jetë i gabuar.

Koment:

Mos e përdorni këtë veçori derisa të jeni të sigurt se serveri e mbështet këtë lloj kërkese.

CURLOPT_EGDSOCKET si CURLOPT_RANDOM_FILE, përveç që emri i skedarit është vendosur në folenë Entropy Gathering Daemon.
CURLOPT_ENCODING Përmbajtja e titullit "Prano-Enkodimi:". Kjo lejon që kërkesa të deshifrohet. Enkodimet e mbështetura janë "identitet", "shfryj" Dhe "gzip". Nëse kalon një varg bosh, "" , dërgohet një kokë që përmban të gjitha llojet e kodimit të mbështetur. Shtuar në cURL 7.10.
CURLOPT_FTPPORT Vlera që do të përdoret për të përcaktuar adresën IP për komandën FTP "PORT". Komanda "PORT" i tregon serverit me cilën adresë IP duhet të lidhet. Kjo mund të jetë një adresë IP, emri i hostit, emri i ndërfaqes së rrjetit (nën Unix), ose thjesht "-" për të përdorur adresën IP të parazgjedhur të sistemit.
CURLOPT_INTERFACE Emri i ndërfaqes së rrjetit për t'u përdorur. Mund të jetë një emër ndërfaqe, një adresë IP ose një emër pritës.
CURLOPT_KEYPASSWD Kërkohet fjalëkalimi për të përdorur çelësin privat CURLOPT_SSLKEY ose CURLOPT_SSH_PRIVATE_KEYFILE. Shtuar në cURL 7.16.1.
CURLOPT_KRB4LEVEL Niveli i sigurisë KRB4 (Kerberos 4). Secila nga vlerat e mëposhtme (nga më e dobëta te më e forta) është e saktë: "qartë", "i sigurt", "konfidenciale", "private".. Nëse vargu i specifikuar ndryshon nga vlerat e dhëna, vlera do të përdoret "privat". Vendosja e këtij opsioni në I PAVLEFSHËM do të çaktivizojë plotësisht sigurinë KRB4. Për momentin, siguria KRB4 funksionon vetëm me transaksione FTP.
CURLOPT_POSTFIELDS Të gjitha të dhënat e transmetuara në një kërkesë HTTP POST. Për të transferuar një skedar, specifikoni përpara emrit të skedarit @ , dhe gjithashtu përdorni shtegun e plotë të skedarit. Lloji i skedarit gjithashtu mund të specifikohet duke përdorur formatin " ;type=mimettype" duke ndjekur emrin e skedarit. Ky parametër mund të kalohet si një varg i koduar me url, si " para1=val1¶2=val2&...", dhe në formën e një grupi, çelësat e të cilit do të jenë emrat e fushave, dhe vlerat do të jenë përmbajtja e tyre. Nëse vlera është një grup, titulli Lloji i përmbajtjes do të vendoset në shumëpjesësh/formë-të dhëna. Duke filluar nga PHP 5.2.0, kur transferoni skedarë me prefiksin @ , vlera duhet të jetë një grup. Që nga PHP 5.5.0, prefiksi @ është i vjetëruar dhe skedarët mund të dërgohen duke përdorur CURLFile. Parashtesa @ mund të çaktivizohet për të lejuar vlerat që fillojnë me @ duke vendosur opsionin CURLOPT_SAFE_UPLOAD në kuptim E VËRTETË.
CURLOPT_PROXY Proxy HTTP përmes të cilit do të drejtohen kërkesat.
CURLOPT_PROXYUSERPWD Hyrja dhe fjalëkalimi i shkruar në formular ":" , përdoret kur lidheni përmes një përfaqësuesi.
CURLOPT_RANDOM_FILE Emri i skedarit të përdorur për të inicializuar gjeneratorin e numrave të rastësishëm për SSL.
CURLOPT_RANGE Gama e të dhënave që do të shkarkohen, në format "X-Y", dhe X ose Y mund të hiqet. Protokolli HTTP gjithashtu mbështet transmetimin e vargjeve të shumta të ndara me presje, ato janë të specifikuara në format "X-Y, N-M".
CURLOPT_REFERER Përmbajtja e titullit "Referuesi:", i cili do të përdoret në kërkesën HTTP.
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 Një varg që përmban 32 shifra heksadecimal. Vargu duhet të jetë një kontroll MD5 i çelësit publik të kompjuterit në distancë dhe libcurl do të rivendosë lidhjen me hostin në distancë derisa shuma e kontrollit të përputhet me çelësin publik. Ky opsion është vetëm për transferimin e të dhënave duke përdorur SCP dhe SFTP. Shtuar në cURL 7.17.1.
CURLOPT_SSH_PUBLIC_KEYFILE Emri i skedarit për çelësin tuaj publik. Nëse nuk specifikohet, libcurl vendos si parazgjedhje skedarin $HOME/.ssh/id_dsa.pub nëse ndryshorja e mjedisit HOME është vendosur dhe skedari "id_dsa.pub" në drejtorinë aktuale nëse ndryshorja e mjedisit HOME nuk është vendosur. Shtuar në cURL 7.16.1.
CURLOPT_SSH_PRIVATE_KEYFILE Emri i skedarit për çelësin tuaj privat. Nëse nuk specifikohet, libcurl vendos si parazgjedhje skedarin $HOME/.ssh/id_dsa nëse është vendosur ndryshorja e mjedisit HOME dhe skedari "id_dsa" në drejtorinë aktuale nëse ndryshorja e mjedisit HOME nuk është vendosur. Nëse skedari është i mbrojtur me fjalëkalim, vendosni fjalëkalimin duke përdorur CURLOPT_KEYPASSWD. Shtuar në cURL 7.16.1.
CURLOPT_SSL_CIPHER_LIST Lista e shifrave të përdorura në transferimet SSL. Për shembull, RC4-SHA Dhe TLSv1 janë lista të vlefshme shifrore.
CURLOPT_SSLCERT Emri i një skedari me një certifikatë PEM të formatuar saktë.
CURLOPT_SSLCERTPASSWD Kërkohet fjalëkalimi për të përdorur certifikatën CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Formati i certifikatës. Formatet e mbështetura "PEM"(e parazgjedhur), "DER" Dhe "ENG". Shtuar në versionin cURL 7.9.3.
CURLOPT_SSLENGINE ID-ja e motorit të enkriptimit për çelësin privat SSL të specifikuar në parametër CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Identifikuesi i mekanizmit të kriptimit të përdorur për operacionet e enkriptimit asimetrik.
CURLOPT_SSLKEY Emri i skedarit të çelësit privat SSL.
CURLOPT_SSLKEYPASSWD

Fjalëkalimi sekret i kërkuar për të përdorur çelësin privat SSL të specifikuar nga parametri CURLOPT_SSLKEY.

Koment:

Meqenëse ky parametër përmban një fjalëkalim të vlefshëm, mos harroni ta mbani këtë skript PHP në një vend të sigurt.

CURLOPT_SSLKEYTYPE Lloji i çelësit privat SSL i specifikuar në parametër CURLOPT_SSLKEY. Llojet kryesore të mëposhtme mbështeten: "PEM"(e parazgjedhur), "DER" Dhe "ENG".
CURLOPT_URL URL e shkarkueshme. Ky parametër mund të vendoset gjithashtu kur inicializon një sesion duke përdorur curl_init ().
CURLOPT_USERAGENT Përmbajtja e titullit "Agjenti i përdoruesit:", dërguar në një kërkesë HTTP.
CURLOPT_USERPWD Hyrja dhe fjalëkalimi i përdorur gjatë lidhjes, të specifikuar në format ":" .

Për vlerat e parametrave të opsioneve të mëposhtme, parametri i vlerës duhet të jetë një grup:

Parametri Vendos vlerën e vlerës Shënime
CURLOPT_HTTP200ALIASES Një grup përgjigjesh HTTP 200 që do të trajtohen si përgjigje të sakta dhe jo si të gabuara. Shtuar në versionin cURL 7.10.3.
CURLOPT_HTTPHEADER Një grup me tituj të caktuar HTTP, në grupin e formatit ("Lloji i përmbajtjes: tekst/i thjeshtë", "Gjatësia e përmbajtjes: 100")
CURLOPT_POSTQUOTE Një grup komandash FTP të ekzekutuara në server pasi të përfundojë një kërkesë FTP.
CURLOPT_QUOTE Një grup komandash FTP të ekzekutuara në server përpara se të bëni një kërkesë FTP.

Për vlerat e parametrave të opsionit të mëposhtëm, parametri i vlerës duhet të jetë një dorezë transmetimi (e kthyer, për shembull, nga funksioni fopen ()):

Parametri Vendos vlerën e vlerës
CURLOPT_FILE Skedari në të cilin do të shkruhet rezultati i transferimit. Transmetimi i parazgjedhur i daljes STDOUT(dritarja e shfletuesit).
CURLOPT_INFILE Skedari nga i cili të dhënat duhet të lexohen kur të ngarkohen në server.
CURLOPT_STDERR Skedari alternativ i daljes së gabimit përdoret në vend të rrjedhës së gabimit STDERR.
CURLOPT_WRITEHEADER Skedari në të cilin do të shkruhen titujt e operacionit aktual.

Për vlerat e parametrave të opsionit të mëposhtëm, parametri i vlerës duhet të jetë një emër ose mbyllje e vlefshme funksioni:

Parametri Vendos vlerën e vlerës
CURLOPT_HEADERFUNCTION Funksioni i kthimit të thirrjes merr dy parametra. Parametri i parë është doreza cURL, parametri i dytë është një varg që përmban titujt që do të shkruhen. Titujt duhet të shkruhen duke përdorur këtë funksion të kthimit të thirrjes. Duhet të kthejë numrin e bajteve të shkruara.
CURLOPT_PASSWDFUNCTION Funksioni i kthimit të thirrjes merr tre parametra. Parametri i parë është doreza e cURL, parametri i dytë është vargu i kërkesës së fjalëkalimit dhe parametri i tretë është gjatësia maksimale e fjalëkalimit. Duhet të kthejë një varg që përmban fjalëkalimin.
CURLOPT_PROGRESSFUNCTION

Funksioni i kthimit të thirrjes merr pesë parametra. I pari është përshkruesi cURL, i dyti është numri total i bajteve që pritet të shkarkohen nga serveri, i treti është numri i bajteve të shkarkuar tashmë, i katërti është numri total i bajteve që pritet të dërgohen në server dhe i pesti është numri i bajteve të dërguara tashmë.

Koment:

Funksioni i kthimit të thirrjes thirret vetëm nëse opsioni CURLOPT_NOPROGRESS vendosur në vlerë I RREMË.

Ju mund të ktheni një vlerë jo zero për të anuluar transferimin. Në këtë rast do të shfaqet një gabim CURLE_ABORTED_BY_ALLBACK.

CURLOPT_READFUNCTION Funksioni i kthimit të thirrjes merr tre parametra. Parametri i parë është doreza e cURL, parametri i dytë është burimi i transmetimit i kaluar te cURL nëpërmjet opsionit CURLOPT_INFILE, dhe parametri i tretë është sasia maksimale e lejuar e të dhënave për t'u lexuar. Funksioni i kthimit të thirrjes duhet të kthejë një varg me gjatësi jo më të madhe se sasia e kërkuar e të dhënave, zakonisht duke lexuar nga burimi i transmetimit të kaluar. Duhet të kthejë një varg bosh për të sinjalizuar fundin e skedarit EOF.
CURLOPT_WRITEFUNCTION Funksioni i kthimit të thirrjes merr dy parametra. Parametri i parë është doreza e cURL, dhe parametri i dytë është vargu që përmban të dhënat që do të shkruhen. Të dhënat duhet të ruhen duke përdorur këtë funksion. Duhet të kthejë numrin e saktë të bajteve të shkruara, përndryshe shkarkimi do të ndërpritet me një gabim.

Kuptime të tjera:

Vlerat e kthimit

Kthimet E VËRTETË pas përfundimit me sukses ose I RREMË në rast të një gabimi.

Lista e ndryshimeve

Version Përshkrim
5.6.0 Opsioni CURL_SAFE_UPLOAD tani ka një vlerë të paracaktuar prej E VËRTETË.
5.6.0 Opsioni i hequr CURLOPT_CLOSEPOLICY dhe kuptimet e lidhura me të.
5.5.0 Burimi cURL shtohet si argumenti i parë në funksionin e kthimit të thirrjes CURLOPT_PROGRESSFUNCTION.
5.5.0 Opsioni i shtuar CURLOPT_SHARE.
5.3.0 Opsioni i shtuar CURLOPT_PROGRESSFUNCTION.
5.2.10 Opsionet e shtuara CURLOPT_PROTOKOLLAT Dhe CURLOPT_REDIR_PROTOKOLS.
5.1.0 Opsionet e shtuara CURLOPT_AUTOREFERER, CURLOPT_BINARITRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH Dhe CURLOPT_TIMECONDITION.
5.0.0 Opsionet e shtuara CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE Dhe CURLOPT_HTTP200ALIASES.

Shembuj

Shembulli #1 Inicializimi i një sesioni CURL dhe ngarkimi i një faqe interneti

// krijoni një burim të ri 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);
?>

Rezultati i ekzekutimit të këtij shembulli:

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

Shënime

Koment:

Kalimi i një grupi në CURLOPT_POSTFIELDS kodon të dhënat si shumëpjesësh/formë-të dhëna, ndërsa kalimi i një vargu të koduar me URL do të kodojë të dhënat si aplikacioni/x-www-form-urlencoded.

cURL është një mjet që ju lejon të ndërveproni me serverë të ndryshëm dhe mbështet shumë protokolle: HTTP, FTP, TELNET, etj. cURL është fillimisht një mjet i linjës komanduese. Por, për fat të mirë për ne, PHP mbështet punën me bibliotekën cURL. Në këtë artikull do të shikojmë shembuj jo të parëndësishëm të punës me cURL.

Pse cURL?

Në fakt, ka shumë mënyra të tjera për të dërguar një kërkesë në një server tjetër, për shembull, për të marrë përmbajtjen e një faqeje. Shumë njerëz, kryesisht nga dembelizmi, përdorin funksione të thjeshta PHP në vend të cURL:

$përmbajtja = file_get_contents ("http://www.example.com"); // ose $lines = skedar ("http://www.example.com"); // ose readfile ("http://www.example.com");

Megjithatë, ato nuk lejojnë trajtimin efikas të gabimeve. Ekzistojnë gjithashtu një sërë detyrash që ata nuk mund t'i bëjnë fare - për shembull, puna me cookies, autorizimi, postimi i kërkesave, shkarkimi i skedarëve.

cUrl është një mjet i fuqishëm që mbështet protokolle të shumta dhe ofron informacion të plotë të kërkesës.

Bazat e cURl

Përpara se të kalojmë në shembuj kompleks, le të shohim strukturën bazë të një kërkese cURL në PHP. Për të kryer një kërkesë cURL në PHP, duhet të ndërmerrni 4 hapa kryesorë:

  1. Inicializimi.
  2. Vendosja e opsioneve.
  3. Ekzekutimi i kërkesës.
  4. Burimet e pastrimit.
// 1. inicializimi $ch = curl_init(); // 2. vendos opsione, duke përfshirë URL-në curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. ekzekutimi i kërkesës dhe marrja e përgjigjes $output = curl_exec($ch); // 4. burimet e pastrimit curl_close($ch);

Më së shumti do të shikojmë hapin # 2 në këtë artikull pasi aty ndodh magjia. Lista e opsioneve të cURL është shumë e madhe, kështu që ne nuk do t'i shqyrtojmë të gjitha opsionet sot, por do të përdorim ato që janë të dobishme për zgjidhjen e problemeve specifike.

Ndjekja e gabimeve

Nëse është e nevojshme, mund të shtoni linjat e mëposhtme për të gjurmuar gabimet:

// ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ...

Ju lutemi vini re se ne përdorim "===" në vend të "==" sepse Është e nevojshme të bëhet dallimi midis një përgjigjeje boshe të serverit dhe vlerës Boolean FALSE, e cila kthehet në rast gabimi.

Marrja e informacionit në lidhje me një kërkesë

Një hap tjetër opsional është marrja e informacionit në lidhje me kërkesën cURL pasi të jetë ekzekutuar.

// ... curl_exec($ch); $info = curl_getinfo ($ch); jehonë "Marrë". $info["total_time"] . "sekonda për url". $info["url"]; //...

Si rezultat, do të merrni një grup me informacionin e mëposhtëm:

  • "url"
  • "lloji_përmbajtje"
  • "http_code"
  • "madhësia_koka"
  • "kërkesa_madhësia"
  • "koha e dosjes"
  • "ssl_verify_result"
  • "redirect_count"
  • "koha_gjithsej"
  • "namelookup_time"
  • "koha_lidhja"
  • "koha_paratransferimit"
  • "size_load"
  • "shkarkimi_madhësia"
  • "shkarkim_shpejtësie"
  • "speed_load"
  • "shkarkimi_gjatësia_përmbajtjes"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"

Ridrejtoni gjurmimin, në varësi të shfletuesit

Në këtë shembull, ne do të shkruajmë një skript që do të zbulojë ridrejtimet bazuar në cilësimet e ndryshme të shfletuesit. Për shembull, disa sajte i ridrejtojnë vizitorët nga pajisjet celulare te vizitorët nga vende të tjera.

Ne do të përdorim opsionin CURLOPT_HTTPHEADER për të vendosur titujt tanë, duke përfshirë agjentin e përdoruesit dhe gjuhën, dhe të shohim se ku na ridrejtojnë sajtet.

// URL-të $urls = grup ("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // shfletuesit $browsers = array("standard" => grup ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5. 6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => grup ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU si Mac OS X; sq) AppleWebKit/420+ (KHTML, si Gecko) Version/3.0 Mobile/1A537a Safari/419.3", "language" => "en"), "frengjisht" => grup ("user_agent" = > "Mozilla/4.0 (përputhshme; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls si $url) ( jehonë "URL: $url\n"; foreach ($shfletuesit si $test_name => $browser) ( $ch = curl_init(); // vendos adresën curl_setopt($ch, CURLOPT_URL , $url); // tregoni shfletuesin dhe gjuhën e përdorur curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["language" ]) ")); // nuk kemi nevojë për përmbajtjen e faqes curl_setopt ($ch, CURLOPT_NOBODY, 1); // na duhen vetëm titujt curl_setopt ($ch, CURLOPT_HEADER, 1); // ktheni rezultatin në vend e prodhimit të tij curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // përcaktoni ridrejtimet në kokat e HTTP? if (preg_match("!Vendndodhja: (.*)!" , $output, $matches)) ( echo "$test_name: ridrejton te $matches\n"; ) else (echo "$test_name: pa ridrejtim\n"; ) ) jehonë "\n\n"; )

Në një cikli kontrollojmë shfletuesit për çdo URL. Fillimisht vendosim opsionet për kërkesën tonë: URL-ja dhe shfletuesi dhe gjuha që do të testohen.

Sepse Ne kemi vendosur një opsion të veçantë; rezultati i kërkesës do të përmbajë vetëm titujt HTTP. Duke përdorur një shprehje të thjeshtë të rregullt, mund të kontrollojmë nëse përgjigja përmban vargun "Vendndodhja:".

Rezultati i ekzekutimit të skenarit:

URL: http://www.cnn.com standard: ridrejtime në http://edition.cnn.com/ iphone: ridrejtime në http://edition.cnn.com/ Frengjisht: ridrejtime në http://edition.cnn .com/ URL: http://www.mozilla.com standard: ridrejton në https://www.mozilla.org/firefox/ iphone: ridrejton në https://www.mozilla.org/firefox/ frëngjisht: ridrejton në https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: ridrejtime në https://www.facebook.com/ iphone: ridrejtime në http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Frengjisht: nuk ka ridrejtim

Dërgimi i kërkesave POST

Gjatë kryerjes së kërkesave GET, të dhënat mund të kalohen në vargun e pyetjeve. Për shembull, kur kërkoni në Google, pyetja juaj përkthehet në një URL:

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

Për të marrë rezultatin e kësaj pyetjeje nuk ju nevojitet as cURL, mund të jeni dembel dhe të përdorni "file_get_contents()".

Por disa forma HTML përdorin metodën POST. Në këtë rast, të dhënat dërgohen në trupin e mesazhit të kërkesës dhe jo në vetë URL-në.

Le të shkruajmë një skript që do të dërgojë kërkesa POST. Së pari, le të krijojmë një skedar të thjeshtë PHP që do t'i pranojë këto kërkesa dhe do t'i kthejë të dhënat e dërguara në të. Le ta quajmë post_output.php:

$url = "http://localhost/post_output.php"; $post_data = grup ("foo" => "bar", "query" => "FooBar", "action" => "Dorëzo"); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // bëj një kërkesë POST curl_setopt($ch, CURLOPT_POST, 1); // shtoni të dhëna curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close ($ch); jehonë $output;

Ky skript do të dalë:

Array ( => shirit => FooBar => Dërgo)

Ky skript dërgoi një kërkesë POST te skedari post_output.php. e cila nxori përmbajtjen e grupit $_POST dhe ne e morëm këtë përgjigje duke përdorur cURL.

Ngarkimi i skedarëve

Ashtu si në shembullin e mëparshëm, le të krijojmë një skedar që do të pranojë kërkesat, upload_output.php:

Print_r($_FILES);

Dhe vetë skripti që shkarkon skedarët:

$url = "http://localhost/upload_output.php"; $post_data = grup ("foo" => "bar", // skedari për të ngarkuar "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); jehonë $output;

Nëse dëshironi të ngarkoni një skedar, gjithçka që duhet të bëni është të kaloni shtegun drejt tij, ashtu si një parametër normal i kërkesës POST, me prefiks "@". Rezultati i skenarit:

Array ( => Array ( => desert.jpg => aplikim/oktet-stream => /tmp/phpAhEvXy => 0 => 845941))

Multi cURL

Një nga veçoritë e avancuara të cURL në PHP është aftësia për të ekzekutuar kërkesa të shumta në të njëjtën kohë dhe në mënyrë asinkrone.

Në kushte normale, skripti ndalon dhe pret që kërkesa të përfundojë. Dhe nëse ju duhet të ekzekutoni shumë pyetje, mund të marrë shumë kohë, sepse... ju do të kryeni në mënyrë sekuenciale. Ky kufizim mund të anashkalohet:

// krijoni mbajtës $ch1 = curl_init(); $ch2 = curl_init(); // vendos opsionet 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); //krijoni dorezën e shumëfishtë cURL $mh = curl_multi_init(); // shto mbajtësit curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // ekzekutoni kërkesat bëni ( curl_multi_exec($mh, $running); ) ndërsa ($running > 0); // liro burime curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle ($mh, $ch2); curl_multi_close($mh);

Ideja është që ju mund të krijoni doreza të shumta cURL, t'i kombinoni ato nën një dorezë me shumë dorezë dhe t'i ekzekutoni ato në mënyrë asinkrone.

Së pari, gjithçka është e njëjtë si me një kërkesë të rregullt cURL - krijohet një përshkrues ( curl_init () ), parametrat janë vendosur ( curl_setopt () ). Më pas, krijohet një multi-përshkrues ( curl_multi_init() ) dhe shtohen përshkruesit e rregullt të krijuar më parë ( curl_multi_add_handle() ). Në vend që të thërrasim curl_exec() normalisht, ne do të thërrasim curl_multi_exec() ky funksion na informon për numrin e lidhjeve aktive duke përdorur parametrin e dytë - $running. Prandaj, cikli funksionon derisa $running të bëhet i barabartë me 0. Dhe, natyrisht, pas përfundimit të punës, është e nevojshme të lirohen burimet.

Në këtë shembull, ne thjesht nxjerrim rezultatin e pyetjeve në STDOUT. Le të shqyrtojmë një rast jo të parëndësishëm të përdorimit të multi cURL.

Kontrollimi i lidhjeve të jashtme në WordPress

Imagjinoni një blog me shumë postime që përmbajnë lidhje me faqet e jashtme. Disa nga këto lidhje mund të mos funksionojnë.

Le të shkruajmë një skenar që do të gjejë të gjitha lidhjet e prishura dhe do t'i tregojë ato tek ne.

Së pari, ne duhet të tërheqim të gjitha lidhjet e jashtme nga baza e të dhënave:

// CONFIG $db_host = "localhost"; $db_user = "rrënjë"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = grup ("localhost", "site"); $max_lidhjet = 10; $url_lista = grup(); $working_urls = array(); $dead_urls = grup(); $not_found_urls = grup(); $aktive = null; // lidheni me MySQL nëse (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Nuk mund të lidhej: " . mysql_error()); ) nëse (!mysql_select_db($db_name)) ( die("Mund mos zgjidhni db: " . mysql_error()); ) // merr të gjitha postimet me lidhje në tekst $q = "SELECT post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post ""; $r = mysql_query($q) ose die(mysql_error()); ndërsa ($d = mysql_fetch_assoc($r)) ( // mbledh të gjitha lidhjet duke përdorur shprehjen e rregullt nëse (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $përputhet )) ( foreach ($përputhet si $url) ( // filtro domenet e panevojshme $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) (vazhdim; ) // vendos $url_list = $url; ) ) ) // heq përsëritjet $url_list = vlera_array(array_unique($url_list)); if (!$url_list) ( die ("Nuk ka URL për të kontrolluar"); )

Në këtë pjesë të skenarit, ne thjesht nxjerrim të gjitha lidhjet e jashtme nga baza e të dhënave. Le t'i kontrollojmë ato:

$mh = curl_multi_init(); // 1. shtoni lidhje për ($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 "==URL të vdekura==\n"; echo implode("\n", $dead_urls) . "\n\n"; jehonë "==404 URL==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==URL-të e punës==\n"; echo implode("\n", $working_urls); jehonë "\n\n"; // 9. shton një dorezë me funksionin e dhënë të URL-së add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // nëse ka ende lidhje nëse (isset($url_list[$index]))) ( // gjithçka është si zakonisht $ ch = curl_init(); // vendos opsionet curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // ktheje në vend që të shfaqë rezultatin curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // lejo ridrejton curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // merrni vetëm tituj për të kursyer kohë curl_setopt($ch, CURLOPT_NOBODY, 1); // shtoni në multi-handle curl_multi_add_handle($mh, $ch); $index++; )

Le ta shohim kodin në mënyrë më të detajuar (numërimi korrespondon me komentet në kod):

  1. Ne shtojmë një numër fillestar të përshkruesve në mënyrë që të mos mbingarkojmë sistemin me fije. Numri kontrollohet nga ndryshorja $max_connections.
  2. Ndryshorja $curRunning ruan numrin e thread-ve të ekzekutuar, $running ruan vlerën e mëparshme; nëse ato bëhen të pabarabarta, atëherë një nga thread-ët ka përfunduar punën.
  3. Ne marrim informacion në lidhje me kërkesën e përfunduar.
  4. Nëse nuk ka përgjigje nga serveri, lidhja nuk funksionon.
  5. Përgjigja e serverit është 404.
  6. Përndryshe, lidhja funksionon.
  7. Kërkesa është përfunduar, ne lëshojmë burime.
  8. Le të shtojmë një URL të re në përshkruesin e shumëfishtë.
  9. Funksioni add_url_to_multi_handle() shton një dorezë të re me URL-në e dhënë në multi-përshkruesin.

Le të ekzekutojmë skenarin:

URL-të e vdekura== xample1234.com/ ==404 URL== www.google.com/dsfasdfafd ==URL-të e punës== 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 kodi. 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

Kontrolli zgjati rreth 2 sekonda. Duke ekzekutuar 10 threads në të njëjtën kohë, performanca rritet 10 herë në krahasim me kërkesat e rregullta cURL. Për të marrë përmbajtjen e përgjigjes së serverit, përdorni funksionin curl_multi_getcontent($ch) , ku $ch është një përshkrues i marrë nga curl_multi_info_read() .

Karakteristika të tjera të cURL në PHP

Autentifikimi HTTP

Nëse kërkesa HTTP kërkon vërtetim, përdorni kodin e mëposhtëm:

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // dërgoni emrin e përdoruesit dhe fjalëkalimin curl_setopt ($ch, CURLOPT_USERPWD, "emri i përdoruesit: fjalëkalimi im"); // nëse ridrejtimet lejohen curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL do të dërgojë fjalëkalimin pas ridrejtimeve curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close ($ch);

Ngarko përmes FTP

PHP ka bibliotekën e vet për të punuar me FTP, por ju gjithashtu mund të përdorni cURL:

// lexoni skedarin $file = fopen("/ path/to/file", "r"); // url përmban tashmë të dhënat e nevojshme $url = "ftp://username: [email i mbrojtur]:21/rruga/në/new/skedar"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // opsionet curl_setopt ($ch, CURLOPT_UPLOAD, . ch);curl_close($ch);

Duke përdorur një përfaqësues

Kërkesat mund të bëhen përmes një përfaqësuesi specifik:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // adresa proxy curl_setopt ($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // nëse kërkohet autorizimi curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close ($ch);

Funksionet e kthimit të thirrjes

Është e mundur të përdoren kthimet e thirrjeve gjatë ekzekutimit të kërkesës, pa pritur që ajo të përfundojë. Për shembull, ndërsa përgjigja e serverit po shkarkohet, ne mund të përdorim të dhënat e marra tashmë pa pritur shkarkimin e plotë.

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec ($ch); curl_close ($ch); funksioni progress_function($ch,$str) (echo $str; return strlen($str); )

Funksioni i kthimit të thirrjes duhet të kthejë gjatësinë e vargut që kërkesa të funksionojë siç duhet.

Sa herë që merret pjesa tjetër e përgjigjes së serverit, do të thirret një kthim.

konkluzioni

Në këtë artikull, ne shikuam veçoritë e avancuara të cURL në PHP. Herën tjetër që ju duhet të bëni kërkesa për URL, përdorni cURL.

Shpesh na duhet të shkarkojmë skedarë të ndryshëm nga Interneti, për shembull, skedarë programi të ekzekutueshëm, skedarë skripti, arkiva burimore. Por kjo nuk duhet të bëhet gjithmonë përmes shfletuesit. Në shumë situata është shumë më e lehtë të kryhen të gjitha veprimet përmes terminalit. Sepse në këtë mënyrë ju mund të automatizoni procesin. Nga ana tjetër, webmasterët herë pas here duhet të testojnë aksesueshmërinë e faqes në internet, të kontrollojnë titujt e dërguar dhe të marrë dhe shumë më tepër.

Për të zgjidhur probleme të tilla dhe probleme të një gamë të ngjashme, mund të përdorni mjetin curl. Kjo ju lejon të zgjidhni një gamë shumë më të gjerë problemesh, duke përfshirë edhe simulimin e veprimeve të përdoruesit në sit. Në këtë artikull do të shikojmë se si të përdorim curl, çfarë është dhe pse është i nevojshëm ky program.

Në fakt, curl është më shumë se thjesht një mjet i linjës komanduese për Linux ose Windows. Ky është një grup bibliotekash që zbatojnë aftësitë themelore të punës me faqet URL dhe transferimit të skedarëve. Biblioteka mbështet punën me protokollet: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, si dhe POP3, IMAP dhe SMTP. Është i shkëlqyeshëm për simulimin e veprimeve të përdoruesve në faqe dhe operacione të tjera me URL.

Mbështetja për bibliotekën curl është shtuar në shumë gjuhë dhe platforma të ndryshme programimi. Programi curl është një mbështjellës i pavarur për këtë bibliotekë. Është ky mjet në të cilin do të përqendrohemi në këtë artikull.

komandë curl

Para se të kalojmë në një përshkrim se si mund të përdoret komanda curl linux, le të shohim vetë mjetin dhe opsionet e tij kryesore që do të na duhen. Sintaksa e mjetit është shumë e thjeshtë:

Lidhja e opsioneve $ curl

Tani le të shohim opsionet kryesore:

  • -# - shfaq një shirit të thjeshtë progresi gjatë ngarkimit;
  • -0 - përdorni protokollin http 1.0;
  • -1 - përdorni protokollin e enkriptimit tlsv1;
  • -2 - përdorni sslv2;
  • -3 - përdorni sslv3;
  • -4 - përdorni ipv4;
  • -6 - përdorni ipv6;
  • -A- tregoni USER_AGENT tuaj;
  • -b- ruani cookie në një skedar;
  • -c- dërgoni Cookie në server nga një skedar;
  • -C- vazhdoni shkarkimin e skedarit nga pika e ndërprerjes ose kompensimi i specifikuar;
  • -m- koha maksimale e pritjes për një përgjigje nga serveri;
  • -d- dërgoni të dhëna duke përdorur metodën POST;
  • -D- ruani kokat e kthyera nga serveri në një skedar;
  • -e- vendosni fushën Referer-uri, duke treguar se nga cila faqe ka ardhur përdoruesi;
  • -E- përdorni një certifikatë të jashtme SSL;
  • -f- mos shfaq mesazhe gabimi;
  • -F- dërgoni të dhëna në formën e një formulari;
  • -G- nëse ky opsion është i aktivizuar, atëherë të gjitha të dhënat e specifikuara në opsionin -d do të transmetohen duke përdorur metodën GET;
  • -H- transferimi i titujve në server;
  • - Unë- merrni vetëm kokën HTTP dhe injoroni të gjithë përmbajtjen e faqes;
  • -j- lexoni dhe dërgoni cookie nga një skedar;
  • -J- hiqni titullin nga kërkesa;
  • -L- pranoni dhe përpunoni ridrejtimet;
  • -s- numri maksimal i ridrejtimeve duke përdorur Vendndodhja;
  • -o- nxjerr përmbajtjen e faqes në një skedar;
  • -O- ruani përmbajtjen në një skedar me emrin e faqes ose skedarit në server;
  • -fq- përdorni një përfaqësues;
  • --proto- tregoni protokollin që do të përdoret;
  • -R- ruani kohën e fundit të modifikimit të një skedari në distancë;
  • -s- shfaq një minimum informacioni për gabimet;
  • -S- shfaq mesazhet e gabimit;
  • -T- ngarkoni skedarin në server;
  • -v- prodhimi më i detajuar;
  • -y- shpejtësia minimale e shkarkimit;
  • -Y- shpejtësia maksimale e shkarkimit;
  • -z- shkarkoni skedarin vetëm nëse është modifikuar më vonë se koha e specifikuar;
  • -V- shfaq versionin.

Kjo nuk është aspak e gjitha opsionet për curl linux, por rendit bazat që do t'ju duhet të përdorni.

Si të përdorni curl?

Ne kemi mbuluar gjithçka që lidhet me teorinë e punës me mjetin curl, tani është koha për të kaluar në praktikë dhe për të parë shembuj të komandës curl.

Detyra më e zakonshme është kjo. Shkarkimi i skedarit është shumë i thjeshtë. Për ta bërë këtë, thjesht kaloni emrin e skedarit ose faqen html te programi në parametrat:

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

Por këtu ju pret një surprizë: e gjithë përmbajtja e skedarit do të dërgohet në dalje standarde. Për ta shkruar atë në çdo skedar përdorni:

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

Dhe nëse dëshironi që skedari që rezulton të emërohet njësoj si skedari në server, përdorni opsionin -O:

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

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

Nëse është e nevojshme, mund të shkarkoni disa skedarë me një komandë:

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

Një gjë tjetër që mund të jetë e dobishme për një administrator është të shkarkojë një skedar vetëm nëse ai është modifikuar:

curl -z 21-dhjetor-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Kufiri i shpejtësisë

Ju mund të kufizoni shpejtësinë e shkarkimit në kufirin e kërkuar në mënyrë që të mos mbingarkoni rrjetin duke përdorur opsionin -Y:

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

Këtu duhet të specifikoni numrin e kilobajt për sekondë që mund të shkarkohen. Ju gjithashtu mund ta ndërprisni lidhjen nëse shpejtësia nuk është e mjaftueshme, përdorni opsionin -Y për ta bërë këtë:

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

Transferimi i skedarëve

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

Ose le të kontrollojmë që skedari të dërgohet përmes HTTP; ekziston një shërbim i veçantë për këtë:

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

Në përgjigje, programi do t'ju tregojë se ku mund ta gjeni skedarin e shkarkuar.

Dërgimi i të dhënave POST

Ju mund të dërgoni jo vetëm skedarë, por edhe çdo të dhënë duke përdorur metodën POST. Më lejoni t'ju kujtoj se kjo metodë përdoret për të dërguar të dhëna të formave të ndryshme. Për të dërguar një kërkesë të tillë, përdorni opsionin -d. Për testim do të përdorim të njëjtin shërbim:

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

Nëse nuk jeni të kënaqur me këtë mundësi paraqitjeje, mund të pretendoni të dorëzoni formularin. Ekziston një opsion për këtë -F:

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

Këtu kalojmë fushën e fjalëkalimit me formularin si tekst i thjeshtë, në të njëjtën mënyrë mund të kaloni disa parametra.

Dërgimi dhe marrja e cookies

Cookies përdoren nga faqet e internetit për të ruajtur informacione të caktuara në anën e përdoruesit. Kjo mund të jetë e nevojshme, për shembull, për vërtetimin. Ju mund të dërgoni dhe merrni Cookies duke përdorur curl. Për të ruajtur Cookies të marra në një skedar, përdorni opsionin -c:

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

Më pas mund ta dërgoni mbrapsht cookie-n curl:

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

Transmetimi dhe analiza e kokës

Jo gjithmonë kemi nevojë për përmbajtjen e faqes. Ndonjëherë vetëm titujt mund të jenë interesantë. Për të shfaqur vetëm ato ekziston opsioni -I:

kaçurrela -I https://site

Dhe opsioni -H ju lejon të dërgoni disa ose më shumë në server, për shembull, mund të kaloni kokën If-Modified-Since në mënyrë që faqja të kthehet vetëm nëse është modifikuar:

vërtetimi i kaçurrelave

Nëse serveri kërkon një nga llojet e zakonshme të vërtetimit, si HTTP Basic ose FTP, atëherë curl mund ta trajtojë këtë detyrë shumë lehtë. Për të specifikuar detajet e vërtetimit, thjesht specifikoni ato të ndara me dy pika në opsionin -u:

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

Autentifikimi në serverët HTTP do të kryhet në të njëjtën mënyrë.

Duke përdorur një përfaqësues

Nëse ju duhet të përdorni një server proxy për të shkarkuar skedarë, atëherë kjo është gjithashtu shumë e thjeshtë. Mjafton të specifikoni adresën e serverit proxy në opsionin -x:

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

konkluzionet

Në këtë artikull, ne shikuam se si të përdorim curl, pse është i nevojshëm ky mjet dhe aftësitë e tij kryesore. Pavarësisht ngjashmërisë së tyre me, ato janë shumë të ndryshme. Komanda curl linux është krijuar më shumë për të analizuar dhe simuluar veprime të ndryshme në server, ndërsa wget është më i përshtatshëm për shkarkimin e skedarëve dhe zvarritjen e faqeve.

Ky artikull do të flasë për një mjet kaq të fuqishëm si cURL, si dhe bibliotekën për PHP që ofron qasje në këtë mjet - libcurl. Për çfarë është e gjithë kjo? Për të komunikuar me serverin duke përdorur protokollet e transferimit të të dhënave, për shembull, http ose ftp. Pjesa tjetër e protokolleve nuk janë veçanërisht interesante për ne; nëse dikush dëshiron të thellohet në këtë temë, ata do të duhet të gërmojnë burime në gjuhën angleze dhe ky artikull do të përmbajë bazat dhe shembujt e përdorimit.

Çfarë janë saktësisht cURL dhe libcurl? Pikat e përgjithshme

Pra, biblioteka libcurl na ofron mundësinë për të transmetuar të dhëna në server dhe për të marrë përgjigje prej tij. Çfarë na jep kjo? Aftësia për të imituar sjelljen e përdoruesit ose ! Ju mund të merrni përmbajtjen e faqeve për analizë të mëvonshme, mund të merrni titujt e përgjigjeve të shërbimit dhe të identifikoheni programatikisht në sajte, të krijoni skripta për postimin e mesazheve (për shembull, në Twitter ose në forume) ose informacione. Gjithçka kufizohet vetëm nga imagjinata juaj!

Instalimi i cURL në Denwer (Denver). Si të filloni të përdorni libcurl?

Gjëja e parë që duhet të bëjmë është të instalojmë bibliotekën. Në kompjuterin tim lokal përdor ndërtimin e Denwer, si shumica dërrmuese e webmasterëve fillestarë, për të cilët është menduar artikulli. Përdoruesit me përvojë që instalojnë në mënyrë të pavarur kombinimin php+apache+mysql do të jenë në gjendje të instalojnë cURL, nuk më takon mua t'u shpjegoj atyre se si bëhet kjo;) Dhe ne, fillestarët, përdorim zgjidhje të gatshme për ta bërë më të lehtë. Prandaj, instaloni libcurl si më poshtë:

  • Shkarkoni paketën e gatshme shtesë "PHP5: module shtesë".
  • Prandaj, ne e instalojmë atë. Asgjë e komplikuar, dakord :)
  • Hapni skedarin në Notepad (unë rekomandoj gjithmonë Notepad++): X:/webservers/usr/local/php5/php.ini //ku X është disku juaj ku është instaluar serveri në internet

    dhe hiqni pikëpresjen në fillim të termave:

    ;extension=php_curl.dll

  • Po rifillojmë serverin e Denverit.

Gati. Për të kontrolluar funksionalitetin e bibliotekës, mund të telefononi funksionin phpinfo() dhe të gjeni linjën atje: mbështetja për cURL është aktivizuar. Urime për fitoren tuaj të parë.

Përshkrimi i cURL dhe hapat e parë

Për të filluar punën me mjetin, duhet të inicializohet. Kjo bëhet si më poshtë:

$ch = curl_init();

Ne përdorëm funksionin e inicializimit të sesionit cURL. Në këtë rast, ju mund të vendosni URL-në menjëherë, si kjo:

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

Dhe këtë mund ta bëni më vonë, në opsionet. Rendi në të cilin janë instaluar opsionet nuk ka rëndësi. Kjo bëhet nga një funksion tjetër:

Curl_setopt (burimi ch, opsioni i vargut, vlera e përzier)

Ne kemi krijuar tashmë parametrin e parë të këtij funksioni, domethënë burimin ch, pak më lart, por ka shumë parametra opsionesh dhe vlerash. Unë mendoj se nuk duhet t'i kopjoni-ngjisni të gjitha këtu, por thjesht jepni një lidhje me një përshkrim të detajuar të funksionit, shpresoj që askush të mos ofendohet: curl_setopt.

Unë do të jap një shembull të vendosjes së opsioneve duke përdorur një URL si shembull:

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

Disa shembuj të tjerë të vendosjes së opsioneve: le të marrim kokën e përgjigjes së serverit, pa marrë vetë faqen:

Curl_setopt($ch, CURLOPT_HEADER, 1); // lexoni kokën curl_setopt($ch, CURLOPT_NOBODY, 1); // lexo VETËM kokën pa trup

Pra, ne kemi inicializuar seancën, kemi vendosur parametrat që na duhen, tani ekzekutojmë kërkesën që rezulton, mbyllim seancën dhe shfaqim rezultatin:

$rezultat = curl_exec($ch); curl_close ($ch); jehonë $rezultat;

Si rezultat, ne marrim shembullin tonë të parë plotësisht funksional të përdorimit të bibliotekës libcurl:

$ch = curl_init(); $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // lexoni kokën curl_setopt($ch, CURLOPT_NOBODY, 1); // lexo VETËM kokën pa trupin $rezultat = curl_exec($ch); curl_close ($ch); jehonë $rezultat;

Mënyra se si funksionon, shpresoj, është e qartë, sepse ne e shikuam secilin hap veç e veç :) Si rezultat, ne marrim një titull përgjigjeje HTTP nga serveri, të cilin patjetër do ta analizojmë më poshtë për të kuptuar më mirë të gjitha fazat e ndërveprimit midis shfletuesi dhe serveri:

Serveri HTTP/1.1 200 OK: nginx/1.2..php 1

I mrekullueshëm! Ne morëm kokën e përgjigjes nga serveri dhe testuam bibliotekën në veprim. Si është kjo e dobishme për ne? Sepse tani mund të imagjinoni përafërsisht sekuencën e veprimeve kur punoni me cURL:

  • Nisja e seancës (curl_init)
  • Vendosni opsionet që na duhen (curl_setopt)
  • Ekzekutoni kërkesën e marrë (curl_exec)
  • Përfundimi i seancës (curl_close)

Struktura e kokës së kërkesës HTTP

Për shembull, u drejtova në faqen ya.ru dhe shikova kërkesën e krijuar të shfletuesit dhe përgjigjen e marrë nga serveri. Këtu ata janë:
Kërkesë
GET / HTTP/1.1 - Ne po përpiqemi të marrim faqen në /, domethënë faqen kryesore të vendosur në rrënjën e dosjes. Ne përdorim versionin e protokollit 1.1.
Agjenti i përdoruesit: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14— Ne prezantojmë veten te serveri, ne jemi shfletuesi Opera.
Pritësi: ya.ru - Emri i domenit të burimit të kërkuar.
Prano: tekst/html, aplikacion/xml;q=0.9, aplikacion/xhtml+xml, imazh/png, imazh/webp, imazh/jpeg, imazh/gif, imazh/x-xbitmap, */*;q=0.1— Lista e formateve të pranueshme të burimeve.
Prano-Gjuha: ru-RU,ru;q=0.9,en;q=0.8— Lista e gjuhëve të mbështetura.
Prano-Enkodimi: gzip, deflate— Metodat e mbështetura të kodimit.
Cookie: yandexuid=ХХХХХ - Biskota, nëse është e nevojshme.
Lidhja: Keep-Alive - Ju lutemi mos e prishni lidhjen dhe qëndroni në kontakt.
Përgjigju
HTTP/1.1 200 Ok - Marrim një përgjigje me kodin 200, që do të thotë se gjithçka është në rregull.
Serveri: nginx - Serveri prezantoi veten - ky është nginx.
Data: Die, 10 Mars 2013 14:10:50 GMT— Data dhe ora aktuale në server.
Lloji i përmbajtjes: tekst/html; charset=UTF-8— Lloji i përmbajtjes dhe kodimi.
Lidhja: mbyll - Serveri nuk dëshiron të mbajë një lidhje të përhershme me ne, kështu që e mbyll menjëherë. Një lidhje e re do të vendoset për kërkesën tjetër.
Cache-Control: pa-cache, pa-magazinë, max-age=0, duhet të rivlerësohet— Menaxhimi i memories. Në këtë rast është i çaktivizuar.
Skadon: Die, 10 Mars 2013 14:10:50 GMT— Data e skadimit të parashikuar të seancës. Në rastin tonë, përkon me kohën e hapjes, pasi serveri e mbylli menjëherë, menjëherë pas përpunimit.
Ndryshuar së fundi: Die, 10 Mars 2013 14:10:50 GMT- Koha e modifikimit të fundit.
Përmbajtja-Encoding: gzip — Metoda e kodimit të informacionit.
Një listë e plotë e të gjithë parametrave që mund të gjenden në kokën e kërkesës HTTP mund të gjendet në Wikipedia.
Tani ju keni një ide të përafërt se si shfletuesi juaj dhe serveri i internetit komunikojnë me njëri-tjetrin. Kjo është shumë e dobishme për të ditur dhe kuptuar, sepse ne do të përpiqemi të imitojmë veprimet e shfletuesit duke përdorur bibliotekën libcurl. Shkoni përpara.

Shembull i punës me bibliotekën

Unë besoj se pasi disa pika të përgjithshme janë tashmë të qarta dhe gjithçka duket se është e qartë, atëherë është koha të vazhdoni të praktikoni dhe të përmirësoni aftësitë tuaja duke përdorur shembull. Personalisht, duart e mia kruhen gjithmonë për të provuar gjithçka në praktikë :)

Meqenëse cURL është kaq i mirë për analizuesit, le të shqyrtojmë funksionin e marrjes së kodit të faqes sipas adresës së tij. Në këtë rast, dalja do të jetë një grup me titullin, përmbajtjen e faqes dhe madje edhe kodet e gabimit nëse diçka shkon keq.

Funksioni get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Versioni Presto/2.12.388/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETRANS1); // kthen faqen e internetit curl_setopt($ch, CURLOPT_HEADER, 0); // nuk kthen titujt curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // ndjek ridrejtimet curl_setopt($ch, CURLOPT_ENCODING, ""); // proceson të gjitha kodimet curl_setopt ($ch, CURLOPT_USERAGENT, $uagent); // agjenti i përdoruesit curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 120); // koha e lidhjes curl_setopt ($ch, CURLOPT_TIMEOUT, 120); , 10); // ndaloni pas ridrejtimit të 10-të $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; ktheje $header; )

Parametrat e hyrjes:
url - adresa e faqes ose e faqes.
Vlerat e parametrave të daljes (varg me tre elementë):
header['errno'] - nëse diçka shkoi keq, këtu do të ketë një kod gabimi.
header['errmsg'] – teksti i gabimit do të shfaqet këtu.
header['content'] - faqja aktuale\file\image, etj.

Ne përdorim funksionin, për shembull, si ky:

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

Gjithçka duhet të shkojë pa gabime dhe ju do të merrni kodin e faqes në variablin $page. Nëse përpiqemi të marrim faqen joekzistente yaaaaaaaaaaaa.ru, do të marrim gabimin:

Nuk mund të zgjidhej hosti: yaaaaaaaaaaaa.ru; Pritësi nuk u gjet

Gjithçka është përpunuar saktë dhe bukur :)
Pastaj mund të bëni çfarë të doni me kodin e faqes, për shembull, ta analizoni atë me shprehje të rregullta. Por kjo është e gjitha në mësimet e ardhshme, por tani për tani le të ndalemi në këtë.

JavaScript është bllokuar në shfletuesin tuaj. Ju lutemi aktivizoni JavaScript për funksionimin e sajtit!

Kaçurrela

PHP mbështet libcurl, një bibliotekë e krijuar nga Daniel Stenberg që ju lejon të lidheni me lloje të ndryshme serverash dhe protokollesh.
libcurl aktualisht mbështet protokollet http, https, ftp, gopher, telnet, dict, file dhe ldap.
libcurl gjithashtu mbështet certifikatat HTTPS, HTTP POST, HTTP PUT, ngarkimin FTP (kjo mund të bëhet edhe me shtesën ftp PHP), ngarkimin e bazuar në forma HTTP, proxies, cookies dhe vërtetimin përdorues+fjalëkalim.

Këto funksione u prezantuan në PHP 4.0.2.

curl_init

curl_init - inicializon një sesion CURL.

Përshkrim

burimi curl_init()

Funksioni curl_init () inicializon një sesion të ri dhe kthen një dorezë CURL për përdorim në funksionet dhe. Nëse parametri opsional url ofrohet, atëherë opsioni CURLOPT_URL do të marrë vlerën e këtij parametri. Mund ta instaloni manualisht duke përdorur .

curl_setopt

curl_setopt - vendos opsionet për transferimin/transferimin CURL.

Përshkrim

bool curl_setopt(burimi ch, opsioni i vargut, vlera e përzier)

Funksioni curl_setopt () vendos opsionet për sesionin CURL të identifikuar nga parametri ch. Parametri opsionështë opsioni që dëshironi të vendosni, dhe vlerë kjo është vlera e opsionit opsion .

Parametri vlerë duhet të jetë e gjatë për opsionet e mëposhtme (të specifikuara sipas parametrit opsion):

  • CURLOPT_INFILESIZE: Nëse jeni duke ngarkuar një skedar në një sajt të largët, ky opsion duhet të përdoret për t'i treguar PHP-së se cila do të jetë madhësia e pritshme e skedarit.
  • CURLOPT_VERBOSE: Vendoseni këtë opsion në një vlerë jo zero nëse dëshironi që CURL të raportojë të gjitha veprimet.
  • CURLOPT_HEADER: Vendoseni këtë opsion në një vlerë jo zero nëse dëshironi që titulli të përfshihet në dalje.
  • CURLOPT_NOPROGRESS: Vendoseni këtë opsion në një vlerë jo zero nëse nuk dëshironi që PHP të shfaqë një tregues të progresit të transferimit CURL. (PHP e vendos automatikisht këtë opsion në një vlerë jo zero; ju duhet ta ndryshoni atë vetëm kur korrigjoni.)
  • CURLOPT_NOBODY: Vendoseni këtë opsion në një vlerë jo zero nëse nuk dëshironi që trupi të përfshihet në dalje.
  • CURLOPT_FAILONERROR: Vendoseni këtë opsion në një vlerë jo zero nëse dëshironi që PHP të dalë në heshtje nëse kodi HTTP i kthyer është më i madh se 300. Si parazgjedhje, faqja kthehet normalisht me kodin e shpërfillur.
  • CURLOPT_UPLOAD: Vendoseni këtë opsion në një vlerë jo zero nëse dëshironi që PHP të përgatisë skedarin për ngarkim.
  • CURLOPT_POST: Vendoseni këtë opsion në një vlerë jo zero nëse dëshironi që PHP të kryejë HTTP POST të rregullt. Ky POST është në formën normale të aplikimit/x-www-form-urlencoded, më i përdorur nga format HTML.
  • CURLOPT_FTPLISTONLY: Vendoseni këtë opsion në një vlerë jo zero dhe PHP do të listojë emrat e drejtorive FTP.
  • CURLOPT_FTPAPPEND: Vendoseni këtë opsion në një vlerë jo zero dhe PHP do t'i shtohet skedarit në distancë në vend që ta mbishkruajë atë.
  • CURLOPT_NETRC: Vendoseni këtë opsion në një vlerë jo zero dhe PHP do të skanojë skedarin tuaj ~./netrc për të gjetur emrin e përdoruesit dhe fjalëkalimin për faqen në distancë me të cilën po lidheni.
  • CURLOPT_FOLLOWLOCATION: Vendoseni këtë opsion në një vlerë jo zero për të ndjekur çdo titull "Vendndodhja: " që dërgon serveri si pjesë e një titulli HTTP (vini re se ky është rekursion, PHP do të ndjekë të gjitha "Location: " -headers" që dërgohen. )
  • CURLOPT_PUT: Vendoseni këtë opsion në një vlerë jo zero në HTTP PUT skedarin. Skedari për PUT duhet të vendoset duke përdorur CURLOPT_INFILE dhe CURLOPT_INFILESIZE.
  • CURLOPT_MUTE: Vendoseni këtë opsion në një vlerë jo zero dhe PHP do të funksionojë e fshehur në lidhje me funksionet CURL.
  • CURLOPT_TIMEOUT: Kaloni një parametër të gjatë që përmban kohën maksimale në sekonda që ju lejoni të ekzekutohen funksionet CURL.
  • CURLOPT_CONNECTTIMEOUT: Kaloni një parametër të gjatë që përmban kohën maksimale, në sekonda, që ju lejoni të prisni kur përpiqeni të lidheni. Përdorni 0 për të pritur përgjithmonë.
  • CURLOPT_LOW_SPEED_LIMIT: Kaloni një parametër të gjatë që përmban shpejtësinë e transferimit, në bajt për sekondë, nën të cilin transferimi duhet të ekzekutohet gjatë ekzekutimit CURLOPT_LOW_SPEED_TIME, në sekonda, që PHP ta konsiderojë atë shumë të ngadaltë dhe ta ndërpresë atë.
  • CURLOPT_LOW_SPEED_TIME: Kaloni një parametër të gjatë që përmban kohën në sekonda nën të cilën transferimi duhet të ekzekutohet gjatë ekzekutimit CURLOPT_LOW_SPEED_LIMIT që PHP ta konsiderojë atë shumë të ngadaltë dhe ta ndërpresë atë.
  • CURLOPT_RESUME_FROM: Kaloni gjatë si një parametër që përmban kompensimin e bajtit në të cilin duhet të fillojë transferimi.
  • CURLOPT_SSLVERSION: Kaloni një parametër të gjatë që përmban versionin SSL për t'u përdorur (2 ose 3). Si parazgjedhje, PHP përpiqet ta përcaktojë vetë këtë, megjithëse në disa raste ju kërkohet ta vendosni këtë manualisht.
  • CURLOPT_SSL_VERIFYHOST: Kaloni gjatë nëse CURL duhet të kontrollojë emrin e përbashkët të certifikatës së kolegëve në një shtrëngim duarsh SSL. Një vlerë prej 1 tregon që ne duhet të kontrollojmë ekzistencën e një emri të përbashkët/të përbashkët, një vlerë prej 2 tregon që duhet të sigurohemi që ai përputhet me emrin e dhënë të hostit.
  • CURLOPT_TIMECONDITION: Kaloni një parametër të gjatë që përcakton se si trajtohet CURLOPT_TIMEVALUE. Mund ta vendosni këtë parametër në TIMECOND_IFMODSINCE ose TIMECOND_ISUNMODSINCE. Kjo funksionon vetëm për HTTP.
  • CURLOPT_TIMEVALUE: Kaloni një parametër të gjatë, që është koha në sekonda që nga 1 janari 1970. Kjo kohë përdoret siç përcaktohet nga opsioni CURLOPT_TIMEVALUE, ose do të përdoret TIMECOND_IFMODSINCE e paracaktuar.
  • CURLOPT_RETURNTRANSFER: Kaloni një vlerë jo zero nëse dëshironi që CURL të kthejë drejtpërdrejt informacionin e marrë në vend që ta printojë drejtpërdrejt.

Parametri vlerë duhet të jetë një varg për vlerat e parametrave të mëposhtëm opsion :

Opsionet e mëposhtme presin një përshkrues skedari, i cili merret duke përdorur funksionin fopen () :

  • CURLOPT_FILE: Skedari ku duhet të vendoset dalja e transferimit tuaj, si parazgjedhje është STDOUT.
  • CURLOPT_INFILE: Skedari nga i cili vjen hyrja juaj e transferimit.
  • CURLOPT_WRITEHEADER: Skedari për regjistrimin e pjesës së kokës së daljes.
  • CURLOPT_STDERR: Skedari për të regjistruar gabimet, në vend të stderr.

Parametri vlerë kthimi i gjatë shkrim_thirrjes (burimi ch, të dhënat e vargut) ( ... kthe strlen ($data);) opsion :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

Parametri vlerë duhet të jetë funksion i formës së mëposhtme string read_callback (burimi ch, burimi fd, gjatësia e gjatë)() për vlerat e parametrave të mëposhtëm opsion :

  • CURLOPT_READFUNCTION: .

curl_exec

curl_exec - ekzekuton një sesion CURL.

Përshkrim

bool curl_exec(burimi ch)

Ky funksion duhet të thirret pasi të keni inicializuar një sesion CURL dhe të gjitha opsionet për atë sesion janë vendosur tashmë. Qëllimi i tij është thjesht të ekzekutojë një sesion CURL të paracaktuar (të specifikuar në parametër ch).

përkul_mbyll

curl_close - mbyll seancën CURL.

Përshkrim

i pavlefshëm përkul_mbyll(burimi ch)

Ky funksion mbyll seancën CURL dhe lëshon të gjitha burimet. Dorezë CURL ch fshihet gjithashtu.

curl_errno

curl_errno - kthen një numër të plotë që përmban numrin e fundit të gabimit.

Përshkrim

Shembulli 1: Inicializimi i një sesioni të ri CURL dhe marrja e një faqe interneti.
Shembulli 2: Përdorimi i modulit CURL të PHP për të marrë shembull.com
Shembulli 3: Kontrollimi i aksesueshmërisë së URL-së duke përdorur CURL të PHP
Shembulli 4: Ndarja e kokës nga trupi i marrë duke përdorur CURL të PHP
Shembulli 5: Përcaktimi i një URL referimi duke përdorur CURL të PHP
problemi: curl_setopt($ch,FOLLOW_LOCATION,1); gabimi: probleme me open_basedir dhe safe_mode zgjidhja: një funksion i zhvilluar tashmë nga dikush zgjidhja n 2: i njëjti funksion, i modifikuar, funksionon shkëlqyeshëm për mua..= $curl_max_loops) ( $curl_loops = 0; ktheje FALSE; ) curl_setopt ($ch, CURLOPT_HEADER, e vërtetë); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, e vërtetë); $data = curl_exec($ch); list($header, $data) = shpërthejë ("\n\n", $data, 2); $http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE); nëse ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Vendndodhja:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop ($ matches))); nëse (!$url) ( //nuk mund ta përpunojë url-në për ta ridrejtuar në $curl_loops = 0; kthe $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) ; nëse (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; nëse (!$url["host"]) $url["host"] = $last_url[ "host"]; nëse (!$url["rruga"]) $url["rruga"] = $last_url["rruga"]; $new_url = $url["scheme"] . "://" . $ url["host"] . $url["rruga"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; korrigjimi ("Ridrejtimi te", $new_url); kthe curl_redir_exec($ch); ) else ($curl_loops=0; kthe $data; )) ?>
thjesht përdorni këtë funksion pa FOLLOW_LOCATION dhe duhet të funksionojë. problemi ishte se kur arrini në linjën ku ktheni të dhënat nëse http_code ishte ndryshe nga 301 oe 302, $data ka informacion të vjetëruar ose asnjë. kështu që $debbbb e bën punën.
Shembulli 6: Analizimi i një cookie nga kreu duke përdorur CURL PHP
Ndonjëherë nuk mund të përdorni CURLOPT_COOKIEJAR dhe CURLOPT_COOKIEFILE për shkak të cilësimeve php të serverit (Ata thonë se mund të rrëmbeni ndonjë skedar nga serveri duke përdorur këto opsione). Këtu është zgjidhja 1) Mos përdorni CURLOPT_FOLLOWLOCATION 2) Përdorni curl_setopt ($ch, CURLOPT_HEADER, 1) 3) Merr nga kukit e kokës si kjo: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4) Vendosini ato duke përdorur curl_setopt ($ch, CURLOPT_COOKIE, $cookies);
Shembulli 7: Analizimi i një cookie nga kreu duke përdorur CURL PHP
Siç e përmendi Yevgen më herët, ndonjëherë ne nuk mund të përdorim CURLOPT_COOKIEJAR dhe CURLOPT_COOKIEFILE. Më poshtë është një funksion i kthimit të thirrjes së kokës që kam shkruar në janar, i cili ju lejon të ruani skedarët e kukit midis kërkesave të cURL. Kukit shtohen në $ch gjatë të gjitha kërkesave edhe gjatë ridrejtimit, kështu që ju mund të përdorni atë së bashku me CURLOPT_FOLLOWLOCATION. Këtu është kodi: funksioni read_header($ch, $string) ( global $location; #mbaj gjurmët e vendndodhjes/ridrejton $cookiearr globale; #store cookies këtu globale $ch; # ^ anulon parametrin e funksionit $ch # kjo është në rregull sepse ne duhet të # përditësojmë $ch-në globale me # skedarë të rinj cookie $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #mbaj gjurmët e ridrejtimi i fundit $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get cookie $cookiestr = shkurto(substr( $string, 11, -1); [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute vetëm në fund të kokës foreach ($cookiearr as $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) kthen $length; ) curl_setopt ($ch, CURLOPT_HEADERFUNCTION, "lexo_header"); Ky kod supozon se do të ripërdorni $ch pa e inicializuar çdo herë (thirrni curl_init vetëm një herë, në fillim). Nëse keni nevojë të inicializoni $ch përsëri në çdo pikë të kodit tuaj, mund të përdorni skedarët e skedarëve të ruajtur aktualisht në $cookiearr dhe t'i përfshini ato në $ch të ri. E shkrova këtë funksion përpara se të kisha përvojë të mjaftueshme me shprehjet e rregullta, kështu që nuk do të gjeni asnjë thirrje preg_match këtu. Unë e kam përdorur këtë kod për një kohë të gjatë dhe pa asnjë problem për të hyrë në gmail, yahoo, hotmail, aol etj. kaloj nëpër login dhe disa faqe përpara se të arrija tek ajo që kërkoja.
Shembulli 8: Vendosja e një mbajtësi të ngarkesës së kokës duke përdorur CURL PHP
Duke përdorur cURL, më duhej të thërrisja një skript të palës së tretë i cili po kthente të dhënat binare si bashkëngjitje për t'i kaluar të dhënat e marra përsëri si bashkëngjitje. Problemi ishte se skripti i palës së tretë kthente herë pas here gabime HTTP dhe doja të shmangja kalimin e bashkëngjitjes me gjatësi zero në raste të tilla. Kombinimi i përdorimit të CURLOPT_FAILONERROR dhe kthimit të thirrjes CURLOPT_HEADERFUNCTION ndihmoi për të përpunuar gabimet HTTP të skriptit të palëve të treta: funksioni curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader($str) 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) (shtypni "Gabim me kodin: " . $intReturnCode; )
Shembulli 9. Ruajtja e një faqeje në një skedar dhe llogaritja e shkallës së transferimit duke përdorur CURL PHP
WritePageToFile ("http://es.php.net", "es.php.net.txt"); funksioni WritePageToFile ($sHTMLpage, $sTxtfile) ( $sh = curl_init ($sHTMLpage); $hFile = FOpen ($sTxtfile, "w"); curl_setopt ($sh, CURLOPT_FILE, $hFile); curl_setopt ($sh, CURLOPT_ 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo ($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo ($sh, CURLINFO_SPEED_UPLOAD); jehonë "
"; echo "Shpejtësia mesatare e shkarkimit == " . $sAverageSpeedDownload. " 
"; echo "Shpejtësia mesatare e ngarkimit == " . $sAverageSpeedUpload ."
"; jehonë"
"; $aCURLinfo = curl_getInfo ($sh); print_r ($aCURLinfo); jehonë "
"; curl_close ($sh); FClose ($hFile); echo "( Shih skedarin "".$sTxtfile."" në të njëjtën rrugë të hostimit." " deri ku ky script PHP).
"; }
Shembulli 9. Marrja e një faqeje nëpërmjet një lidhjeje SSL (https)
$ch=curl_init ("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Çaktivizo gabimin "Problemi i certifikatës SSL, verifiko që certifikata CA është në rregull" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Çaktivizo gabimin "SSL: emri i subjektit të certifikatës "hostname.ru" nuk përputhet me emrin e hostit të synuar "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);
Shembulli 10: Përdorimi i sesioneve dhe cookies në 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_name);//ruaj Cookie-të e marra në një skedar curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_name); //dërgoji serverit COOKIE-të e marra prej tij gjatë autorizimit $out=curl_exec($curl);
Shembulli 11: Ngarkimi i skedarëve dhe grupi shumëdimensional në Curl. CURLOPT_POSTFIELDS + CurlFile

Nëse ju duhet të dërgoni një grup shumëdimensional dhe një skedar në një kërkesë POST, do të hasni një problem të pazgjidhshëm. Nëse kaloni një grup shumëdimensional te CURLOPT_POSTFIELDS, niveli i dytë do të kalohet si vargu "Array". Nëse konvertoni duke përdorur http_build_query, nuk do të mund ta transferoni skedarin.

Më poshtë është një funksion për kodimin e një grupi dydimensional me ngarkim skedari për Curl, i cili do të funksionojë në të dy versionet më të vjetra të PHP 5.3, PHP 5.4 dhe PHP 5.6

/** konverton një grup shumë-dimensional në një grup njëdimensional duke përdorur indekse komplekse dhe zëvendëson @ në prefiksin me CurlFile për përdorim në Curl * @param $inputArray * @param string $inputKey * @return grup $requestVars = grup ("id" => grup ( 1, 2," id"=>1234), "emri" => "log", "logfile" => "@/tmp/test.log"); marrim: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ funksion convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray si $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; ) other ($resultArray[$tmpKey ] = $value; ) ) ktheni $resultArray; ) // kontrolloni $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "log file " => "@/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); Shembuj aplikimi të përdorimit të Curl