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.
|
|
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_*.
|
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.
|
|
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.
|
|
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ë.
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 /* http://localhost/upload.php: $ch = curl_init(); $data = array("name" => "Foo" , "file" => "@/home/user/test.png" ); Curl_setopt ($ch, CURLOPT_URL, "http://localhost/upload.php"); Curl_exec ($ch); Rezultati i ekzekutimit të këtij shembulli: Array ( => Foo) Array ( => Array ( => test.png => imazh/png => /tmp/phpcpjNeQ => 0 => 279)) 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. 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. 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ë: 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. 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. 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: 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 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. 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)) 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. 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): 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()
. 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); 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); 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); Ë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. 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. 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: Kjo nuk është aspak e gjitha opsionet për curl linux, por rendit bazat që do t'ju duhet të përdorni. 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 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 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. 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. 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 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: 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ë. 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 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. 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! 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ë: dhe hiqni pikëpresjen në fillim të termave: ;extension=php_curl.dll 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ë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: 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ë: 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: 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 :) JavaScript është bllokuar në shfletuesin tuaj. Ju lutemi aktivizoni JavaScript për funksionimin e sajtit! PHP mbështet libcurl, një bibliotekë e krijuar nga Daniel Stenberg që ju lejon të lidheni me lloje të ndryshme serverash dhe protokollesh. Këto funksione u prezantuan në PHP 4.0.2. curl_init - inicializon një sesion CURL. 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 - vendos opsionet për transferimin/transferimin CURL. 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): 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 () : Parametri vlerë kthimi i gjatë shkrim_thirrjes (burimi ch, të dhënat e vargut) ( ... kthe strlen ($data);) opsion : 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 : curl_exec - ekzekuton një sesion CURL. 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). curl_close - mbyll seancën CURL. 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 - kthen një numër të plotë që përmban numrin e fundit të gabimit. 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
$ch = curl_init();
print_r($_POST);
print_r ($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
?>
Shënime
Pse cURL?
Bazat e cURl
// 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); Ndjekja e gabimeve
Marrja e informacionit në lidhje me një kërkesë
Ridrejtoni gjurmimin, në varësi të shfletuesit
Dërgimi i kërkesave POST
Ngarkimi i skedarëve
Multi cURL
Kontrollimi i lidhjeve të jashtme në WordPress
Karakteristika të tjera të cURL në PHP
Autentifikimi HTTP
Ngarko përmes FTP
Duke përdorur një përfaqësues
Funksionet e kthimit të thirrjes
konkluzioni
komandë curl
Si të përdorni curl?
Kufiri i shpejtësisë
Transferimi i skedarëve
Dërgimi i të dhënave POST
Dërgimi dhe marrja e cookies
Transmetimi dhe analiza e kokës
vërtetimi i kaçurrelave
Duke përdorur një përfaqësues
konkluzionet
Çfarë janë saktësisht cURL dhe libcurl? Pikat e përgjithshme
Instalimi i cURL në Denwer (Denver). Si të filloni të përdorni libcurl?
Përshkrimi i cURL dhe hapat e parë
Struktura e kokës së kërkesës HTTP
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
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.
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ë.Kaçurrela
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.curl_init
Përshkrim
curl_setopt
Përshkrim
curl_exec
Përshkrim
përkul_mbyll
Përshkrim
curl_errno
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. "
"; curl_close ($sh); FClose ($hFile); echo "( Shih skedarin "".$sTxtfile."" në të njëjtën rrugë të hostimit." " deri ku ky script PHP).
"; echo "Shpejtësia mesatare e ngarkimit == " . $sAverageSpeedUpload ."
"; jehonë"
"; $aCURLinfo = curl_getInfo ($sh); print_r ($aCURLinfo); jehonë "
";
}
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