PHP CURL - funkcie a príklady použitia. Pokročilé použitie cURL v možnostiach príkazového riadku PHP Curl
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Nastavuje parameter pre reláciu CURL
Zoznam parametrov
cURL rukoväť získaná z curl_init().
Parameter, ktorý sa má nastaviť CURLOPT_XXX.
Hodnota parametra možnosti.
bool:
Parameter | Poznámky | |
---|---|---|
CURLOPT_AUTOREFERER | PRAVDA pre automatické nastavenie v teréne Sprostredkovateľ: v požiadavkách presmerovaných hlavičkou miesto:. | |
CURLOPT_BINARYTRANSFER | PRAVDA vrátiť surovú odozvu pri použití konštanty CURLOPT_RETURNTRANSFER. | Od PHP 5.1.3 už táto možnosť nie je potrebná: pri použití možnosti sa vždy vráti nespracovaný výstup CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | PRAVDA na pokyn aktuálnej relácie na spustenie novej „relácie“ súborov cookie. To spôsobí, že libcurl bude ignorovať všetky cookies "relácie", ktoré by mal načítať z predchádzajúcej relácie. V predvolenom nastavení libcurl vždy ukladá a načítava všetky súbory cookie bez ohľadu na to, či ide o „reláciu“ alebo nie. Súbory cookie „relácie“ sú súbory cookie, ktorých platnosť nevyprší a musia existovať iba pre aktuálnu „reláciu“. | |
CURLOPT_CERTINFO | PRAVDA na výstup informácií o certifikáte SSL na streamovanie STDERR s bezpečnými spojeniami. | Pridané v cURL 7.19.1. Dostupné od PHP 5.3.2. Pre správnu činnosť je potrebné, aby bola táto možnosť povolená CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | PRAVDA povie knižnici, aby vykonala potrebnú autentifikáciu proxy a nastavenie pripojenia, ale neprenáša údaje. Táto možnosť je implementovaná pre HTTP, SMTP a POP3. | Pridané 7.15.2. Dostupné od PHP 5.5.0. |
CURLOPT_CRLF | PRAVDA na konverziu zakončení riadkov Unix na CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | PRAVDA používať globálnu vyrovnávaciu pamäť DNS. Táto možnosť nie je bezpečná pre vlákna a je predvolene povolená. | |
CURLOPT_FAILONERROR | PRAVDA pre podrobnú správu o zlyhaní, ak je prijatý kód HTTP väčší alebo rovný 400. Predvolené správanie vráti stránku ako normálne, pričom kód ignoruje. | |
CURLOPT_FILETIME | PRAVDA pokúsiť sa získať dátum úpravy vzdialeného dokumentu. Túto hodnotu možno získať pomocou parametra CURLINFO_FILETIME z funkcie curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | PRAVDA sledovať ľubovoľný nadpis "Poloha: " odoslaný serverom vo svojej odpovedi (všimnite si, že sa to deje rekurzívne, PHP bude nasledovať všetky odoslané hlavičky "Poloha: ", okrem prípadu, keď je nastavená konštanta CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | PRAVDA vynútiť zatvorenie spojenia po dokončení jeho spracovania, aby ho nebolo možné znova použiť. | |
CURLOPT_FRESH_CONNECT | PRAVDA vynútiť použitie nového pripojenia namiesto pripojenia vo vyrovnávacej pamäti. | |
CURLOPT_FTP_USE_EPRT | PRAVDA používať EPRT (a LPRT) na aktívne nahrávanie cez FTP. Použite FALSE aby ste zakázali EPRT a LPRT a používali iba PORT. | |
CURLOPT_FTP_USE_EPSV | PRAVDA na počiatočné testovanie príkazu EPSV počas prenosov FTP. Ak príkaz zlyhá, prejde späť na PASV. Inštalovať v FALSE zakázať EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | PRAVDA na vytvorenie chýbajúcich adresárov, ak operácia FTP narazí na neexistujúcu cestu. | |
CURLOPT_FTPAPPEND | PRAVDA na zapísanie vzdialeného súboru na koniec, namiesto jeho prepísania cez existujúci súbor. | |
CURLOPT_TCP_NODELAY | Natrvalo určuje, či sa má voľba TCP_NODELAY nastaviť alebo vymazať (1 = nastavené, 0 = vymazané). V predvolenom nastavení je táto možnosť vymazaná. | Dostupné od PHP 5.2.1 pre verzie vytvorené s libcurl 7.11.2 alebo novšími. |
CURLOPT_FTPASCII | prezývka CURLOPT_TRANSFERTEXT. Namiesto toho použite toto. | |
CURLOPT_FTPLISTONLY | PRAVDA vrátiť iba zoznam mien z adresára FTP. | |
CURLOPT_HEADER | PRAVDA na zahrnutie hlavičiek do výstupu. | |
CURLINFO_HEADER_OUT | PRAVDA na sledovanie reťazca dotazu na obsluhu. | Dostupné od PHP 5.1.3. Predpona CURLINFO_ používa špecificky. |
CURLOPT_HTTPGET | PRAVDA na resetovanie metódy HTTP požiadavky na metódu GET. Keďže GET je predvolená hodnota, tento parameter je potrebný len vtedy, ak bola predtým zmenená metóda požiadavky. | |
CURLOPT_HTTPPROXYTUNNEL | PRAVDA tunelovať cez zadaný HTTP proxy. | |
CURLOPT_MUTE | PRAVDAúplne zakázať správy funkcie cURL. | Odstránené v cURL 7.15.5 (možno použiť možnosť CURLOPT_RETURNTRANSFER) |
CURLOPT_NETRC | PRAVDA na prečítanie súboru ~/.netrc pre prihlasovacie meno a heslo pre vzdialenú lokalitu, s ktorou sa vytvára spojenie. | |
CURLOPT_NOBODY | PRAVDA na vylúčenie tela odpovede z výstupu. Metóda požiadavky je nastavená na HEAD. Zmena tohto nastavenia na FALSE nezmení ho späť na GET. | |
CURLOPT_NOPROGRESS | PRAVDA vypnúť indikátor priebehu pri prenosoch cURL.
|
|
CURLOPT_NOSIGNAL | PRAVDA ignorovať akúkoľvek funkciu cURL, ktorá posiela signály do procesu PHP. Táto možnosť je štandardne povolená vo viacvláknových SAPI, aby parametre časového limitu fungovali správne. | |
CURLOPT_POST | PRAVDA použiť bežný HTTP POST. Táto metóda POST používa normálne , bežne používané vo formulároch HTML. | |
CURLOPT_PUT | PRAVDA na stiahnutie súboru pomocou metódy HTTP PUT. Použitý súbor je potrebné nastaviť pomocou možností CURLOPT_INFILE A CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | PRAVDA vrátiť výsledok prenosu ako reťazec z curl_exec() namiesto priameho výstupu do prehliadača. | |
CURLOPT_SAFE_UPLOAD | PRAVDA zakázať podporu prefixov @ pre stiahnuté súbory v CURLOPT_POSTFIELDS, čo znamená, že hodnoty odovzdané s @ môžu byť bezpečne prenášané ako polia. Namiesto predpony môžete použiť možnosť CURLFile d. | Pridané v PHP 5.5.0 s predvolenou hodnotou FALSE. V PHP 5.6.0 sa to štandardne rovnalo PRAVDA. |
CURLOPT_SSL_VERIFYPEER | FALSE aby cURL prestal kontrolovať hostiteľský certifikát. Pomocou parametra je možné zadať alternatívne certifikáty, ktoré sa majú overiť CURLOPT_CAINFO alebo adresár s certifikátmi určenými parametrom CURLOPT_CAPATH. | Predvolená hodnota je PRAVDA od cURL verzie 7.10. Predvolená distribúcia sa inštaluje od cURL verzie 7.10. |
CURLOPT_TRANSFERTEXT | PRAVDA na použitie režimu ASCII na prenosy FTP. Pri použití LDAP sa údaje namiesto HTML vrátia ako obyčajný text. V systémoch Windows vlákno STDOUT nie je nastavený na binárny režim. | |
CURLOPT_UNRESTRICTED_AUTH | PRAVDA pokračovať v odosielaní prihlasovacieho mena a hesla počas presmerovaní (pri použití CURLOPT_FOLLOWLOCATION), aj keď sa zmení názov hostiteľa. | |
CURLOPT_UPLOAD | PRAVDA na prípravu na nahranie súboru na server. | |
CURLOPT_VERBOSE | PRAVDA na zobrazenie dodatočných informácií. Zapisuje výstup do streamu STDERR, alebo súbor určený parametrom CURLOPT_STDERR. |
Pre nasledujúce hodnoty parametra voľby musí byť parameter value typu celé číslo:
Parameter | Nastavte hodnotu hodnoty | Poznámky |
---|---|---|
CURLOPT_BUFFERSIZE | Veľkosť vyrovnávacej pamäte použitej na každé čítanie. Neexistuje však žiadna záruka, že táto žiadosť bude dokončená. | Pridané v cURL 7.10. |
CURLOPT_CLOSEPOLICY | Jedna zo stálic CURLCLOSEPOLICY_*.
|
Odstránené v PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Počet sekúnd čakania pri pokuse o pripojenie. Ak chcete čakať neurčito, použite 0. | |
CURLOPT_CONNECTTIMEOUT_MS | Počet milisekúnd, ktoré sa majú čakať pri pokuse o pripojenie. Ak chcete čakať neurčito, použite 0. Ak je libcurl skompilovaný pomocou systémového štandardného prekladača názvov, potom pripojenie bude stále používať celú sekundu čakania ako časový limit s minimálnym povoleným časovým limitom 1 sekunda. | Pridané vo verzii cURL 7.16.2. Dostupné od PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Počet sekúnd, počas ktorých sú záznamy DNS uložené v pamäti. Štandardne je tento parameter 120 (2 minúty). | |
CURLOPT_FTPSSLAUTH | Metóda overenia FTP (v aktívnom režime): CURLFTPAUTH_SSL(najprv sa kontroluje SSL), CURLFTPAUTH_TLS(najskôr skontrolované TLS) príp CURLFTPAUTH_DEFAULT(cURL sa rozhodne sám za seba). | Pridané vo verzii cURL 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (v predvolenom nastavení CURL vyberá, ktorá verzia sa má použiť), CURL_HTTP_VERSION_1_0 (vynútiť HTTP/1.0) alebo CURL_HTTP_VERSION_1_1 (vynútiť HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Môžete použiť bitový operátor | (alebo) kombinovať niekoľko metód. V tomto prípade cURL požiada server o podporované metódy autorizácie a vyberie tú najlepšiu. CURLAUTH_ANY je alias CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE je alias CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Očakávaná veľkosť súboru v bajtoch pri nahrávaní súboru na vzdialený server. Upozorňujeme, že použitie tejto možnosti nezastaví odosielanie ďalších údajov nad túto hodnotu, pretože odosielané údaje závisia od výsledku CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Horná hranica rýchlosti prenosu údajov v bajtoch za sekundu. Overenie prebieha v rámci CURLOPT_LOW_SPEED_TIME sekúnd, po ktorých PHP považuje prenos za príliš pomalý a preruší ho. | |
CURLOPT_LOW_SPEED_TIME | Maximálny počet sekúnd, počas ktorých prenosová rýchlosť nesmie prekročiť CURLOPT_LOW_SPEED_LIMIT, inak PHP označí prenos ako príliš pomalý a zastaví ho. | |
CURLOPT_MAXCONNECTS | Maximálny počet trvalých pripojení. Po dosiahnutí limitu sa parameter používa na určenie, ktoré pripojenie sa má uzavrieť. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Maximálny počet prijatých presmerovaní. Použite túto možnosť spolu s možnosťou CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Alternatívny port pripojenia. | |
CURLOPT_POSTREDIR | Bitová maska obsahujúca 1 (301 Natrvalo presunuté), 2 (302 Nájdených) a 4 (303 Pozri Ostatné) na určenie, či sa má spracovať metóda HTTP POST, keď je táto možnosť povolená. CURLOPT_FOLLOWLOCATION ak došlo k zadanému typu presmerovania. | Pridané v cURL 7.19.1. Dostupné od PHP 5.3.2. |
CURLOPT_PROTOCOLS |
Bitová maska hodnôt CURLPROTO_*. Táto maska obmedzuje protokoly používané libcurl. To vám umožňuje pracovať s libcurl s veľkým počtom protokolov a obmedziť činnosť určitých prenosov len na ich podmnožinu. V predvolenom nastavení používa libcurl všetky podporované protokoly. Pozri tiež parameter CURLOPT_REDIR_PROTOCOLS. Správne hodnoty protokolu: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAPS, CURLPROTO_TOALLTFPURL, CURLPROTO_TOALLTFPURL, CURLPROTO_TOALLTODICT |
|
CURLOPT_PROXYAUTH | Metódy autorizácie HTTP používané pri pripájaní k proxy serveru. Použite rovnaké bitové masky, aké boli opísané pre parameter CURLOPT_HTTPAUTH. V súčasnosti sú pre autorizáciu proxy podporované iba CURLAUTH_BASIC a CURLAUTH_NTLM. | Pridané vo verzii cURL 7.10.7. |
CURLOPT_PROXYPORT | Číslo portu proxy servera, ku ktorému sa pripája. Toto číslo je možné nastaviť aj pomocou parametra CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Buď CURLPROXY_HTTP (predvolené) alebo CURLPROXY_SOCKS5 . | Pridané v cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Bitová maska hodnôt CURLPROTO_*. Táto bitová maska obmedzuje protokoly používané libcurl pri presmerovaní (s povoleným parametrom CURLOPT_FOLLOWLOCATION). To vám umožňuje obmedziť množinu protokolov používaných pri presmerovaní pre niektoré prenosy. Štandardne libcurl podporuje všetky protokoly okrem FILE a SCP. Vo verziách pred 7.19.4 sa presmerovanie používalo pre všetky protokoly bez výnimky. Pozri tiež popis parametrov CURLOPT_PROTOCOLS pre zoznam konštánt s hodnotami protokolu. | Pridané vo verzii cURL 7.19.4. |
CURLOPT_RESUME_FROM | Posun začiatku prenosu v bajtoch. | |
CURLOPT_SSL_VERIFYHOST | Pomocou 1 skontrolujte existenciu spoločného názvu v certifikáte SSL. Pomocou 2 skontrolujte, či bežný názov existuje a či sa zhoduje so zadaným hostiteľom. V bojovom prostredí by hodnota tohto parametra mala byť 2 (štandardne nastavené). | Podpora pre hodnotu 1 bola odstránená v cURL 7.28.1 |
CURLOPT_SSLVERSION | Jedna zo stálic 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) alebo CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Metóda interpretácie parametrov CURLOPT_TIMEVALUE. Použite CURL_TIMECOND_IFMODSINCE na vrátenie stránky, iba ak sa zmenila od času uvedeného v parametri CURLOPT_TIMEVALUE. Ak stránka nebola upravená, názov sa vráti "304 neupravené", čo znamená, že parameter CURLOPT_HEADER nainštalovaný v PRAVDA. Pre opačný efekt použite CURL_TIMECOND_IFUNMODSINCE. Predvolená hodnota je CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | Maximálny počet sekúnd povolený na vykonanie funkcií cURL. | |
CURLOPT_TIMEOUT_MS | Maximálny počet milisekúnd povolený na vykonanie funkcií cURL. Ak je libcurl zostavený pomocou normálneho prekladača názvov systému, potom tento rozsah pripojenia bude stále používať časové limity na zaokrúhľovanie s minimálnym povoleným časovým limitom jedna sekunda. | Pridané vo verzii cURL 7.16.2. Dostupné od PHP 5.2.3. |
CURLOPT_TIMEVALUE | Počet sekúnd od 1. januára 1970. Tento čas bude použitý parametrom CURLOPT_TIMECONDITION. Štandardne sa používa parameter CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Ak rýchlosť sťahovania prekročí túto hodnotu (uvedenú v bajtoch za sekundu) v priemere počas celého prenosu, sťahovanie sa pozastaví, aby sa udržala priemerná rýchlosť nižšia alebo rovná tomuto parametru. Štandardne nie je rýchlosť obmedzená. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Ak nahrávanie na server prekročí túto hodnotu (určenú v bajtoch za sekundu) v priemere počas celého prenosu, nahrávanie sa pozastaví, aby sa udržala priemerná rýchlosť nižšia alebo rovná tomuto parametru. Štandardne nie je rýchlosť obmedzená. | Pridané v cURL 7.15.5. Dostupné od PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Bitová maska pozostávajúca z jednej alebo viacerých konštánt: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Inštalácia CURLSSH_AUTH_ANY aby si libcurl vybral jeden z nich nezávisle. | Pridané v cURL 7.16.1. |
CURLOPT_IPRESOLVE | Umožňuje aplikácii vybrať typ adresy IP, pomocou ktorej sa určí názov hostiteľa. Je to potrebné, ak používate názov hostiteľa, ktorý je odvodený z viac ako jednej verzie adresy IP. Možné hodnoty môžu byť CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6 a predvolene CURL_IPRESOLVE_WHATEVER. | Pridané v cURL 7.10.8. |
Pre nasledujúce hodnoty parametra voľby musí byť parameter value typu reťazec:
Parameter | Nastavte hodnotu hodnoty | Poznámky |
---|---|---|
CURLOPT_CAINFO | Názov súboru obsahujúceho jeden alebo viacero certifikátov, voči ktorým sa budú kontrolovať uzly. Tento parameter má zmysel len vtedy, keď sa používa v spojení s CURLOPT_SSL_VERIFYPEER. | Vyžaduje absolútnu cestu. |
CURLOPT_CAPATH | Adresár obsahujúci niekoľko certifikátov CA. Použite túto možnosť v spojení s CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Obsah hlavičky "Cookie:", ktorý sa používa v požiadavke HTTP. Upozorňujeme, že viaceré súbory cookie sú oddelené bodkočiarkou, za ktorou nasleduje medzera (napríklad „ ovocie=jablko; farba=červená") | |
CURLOPT_COOKIEFILE | Názov súboru obsahujúceho cookies. Tento súbor musí byť vo formáte Netscape alebo jednoducho hlavičky HTTP zapísané do súboru. Ak ako názov súboru zadáte prázdny reťazec, cookies sa neuložia, ale ich spracovanie bude stále povolené. | |
CURLOPT_COOKIEJAR | Názov súboru, do ktorého sa uložia všetky interné cookies aktuálneho prenosu po zatvorení handle, napríklad po volaní curl_close. | |
CURLOPT_CUSTOMREQUEST | Namiesto toho sa použila vlastná metóda žiadosti "ZÍSKAŤ" alebo "HLAVA" pri vytváraní požiadavky HTTP. To je užitočné pre otázky "DELETE" alebo iné, zriedkavejšie HTTP požiadavky. Správny význam by mali slová ako "ZÍSKAŤ", "POST", "PRIPOJIŤ" a tak ďalej; tie. Nezadávajte sem celý riadok požiadavky HTTP. Napríklad indikácia "ZÍSKAŤ /index.html HTTP/1.0\r\n\r\n" bude zle.
|
|
CURLOPT_EGDSOCKET | Páči sa mi to CURLOPT_RANDOM_FILE, okrem toho, že názov súboru je nastavený na soket Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Obsah hlavičky "Accept-Encoding: ". To umožňuje dekódovanie požiadavky. Podporované kódovania sú "identita", "vyfúknuť" A "gzip". Ak prejde prázdny reťazec, "" sa odošle hlavička obsahujúca všetky podporované typy kódovania. | Pridané v cURL 7.10. |
CURLOPT_FTPPORT | Hodnota, ktorá sa použije na určenie adresy IP pre príkaz FTP "PORT". Príkaz "PORT" informuje server, na ktorú IP adresu sa má pripojiť. Môže to byť IP adresa, názov hostiteľa, názov sieťového rozhrania (pod Unixom) alebo jednoducho „-“ na použitie predvolenej systémovej IP adresy. | |
CURLOPT_INTERFACE | Názov sieťového rozhrania, ktoré sa má použiť. Môže to byť názov rozhrania, adresa IP alebo názov hostiteľa. | |
CURLOPT_KEYPASSWD | Na používanie súkromného kľúča je potrebné heslo CURLOPT_SSLKEY alebo CURLOPT_SSH_PRIVATE_KEYFILE. | Pridané v cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Úroveň zabezpečenia KRB4 (Kerberos 4). Každá z nasledujúcich hodnôt (v poradí od najslabšej po najsilnejšiu) je správna: "jasný", "bezpečný", "dôverné", "súkromné".. Ak sa zadaný reťazec líši od zadaných hodnôt, použije sa hodnota "súkromné". Nastavenie tejto možnosti na NULOVÝúplne vypne zabezpečenie KRB4. Zabezpečenie KRB4 momentálne funguje iba s transakciami FTP. | |
CURLOPT_POSTFIELDS | Všetky údaje prenášané v požiadavke HTTP POST. Ak chcete preniesť súbor, zadajte pred názvom súboru @ a tiež použite úplnú cestu k súboru. Typ súboru je možné určiť aj pomocou formátu " ;type=mimetype" za názvom súboru. Tento parameter možno odovzdať ako reťazec zakódovaný v adrese URL, napríklad " para1=val1¶2=val2&...", a vo forme poľa, ktorého kľúčmi budú názvy polí a hodnoty budú ich obsahom. Ak je hodnota pole, hlavička Druh obsahu bude nastavená na multipart/form-data. Počnúc PHP 5.2.0 pri prenose súborov s predponou @ , hodnota musí byť pole. Od PHP 5.5.0 predpona @ je zastarané a súbory je možné odosielať pomocou CURLFile. Predpona @ možno zakázať, aby sa povolili hodnoty začínajúce na @ nastavením možnosti CURLOPT_SAFE_UPLOAD vo význame PRAVDA. | |
CURLOPT_PROXY | HTTP proxy, cez ktorý budú smerované požiadavky. | |
CURLOPT_PROXYUSERPWD | Prihlasovacie meno a heslo napísané vo formulári ":" , ktorý sa používa pri pripájaní cez proxy. | |
CURLOPT_RANDOM_FILE | Názov súboru použitý na inicializáciu generátora náhodných čísel pre SSL. | |
CURLOPT_RANGE | Rozsah údajov na stiahnutie vo formáte "X-Y" a buď X alebo Y môžu byť vynechané. Protokol HTTP podporuje aj prenos viacerých rozsahov oddelených čiarkami, sú uvedené vo formáte "X-Y,N-M". | |
CURLOPT_REFERER | Obsah hlavičky "Sprostredkovateľ:", ktorý bude použitý v HTTP požiadavke. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Reťazec obsahujúci 32 hexadecimálnych číslic. Reťazec musí byť MD5 kontrolný súčet verejného kľúča vzdialeného počítača a libcurl resetuje pripojenie k vzdialenému hostiteľovi, kým sa kontrolný súčet nezhoduje s verejným kľúčom. Táto možnosť je určená len na prenos údajov pomocou SCP a SFTP. | Pridané v cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Názov súboru pre váš verejný kľúč. Ak nie je zadaný, libcurl predvolene použije súbor $HOME/.ssh/id_dsa.pub, ak je nastavená premenná prostredia HOME, a súbor "id_dsa.pub" v aktuálnom adresári, ak nie je nastavená premenná prostredia HOME. | Pridané v cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Názov súboru pre váš súkromný kľúč. Ak nie je zadaný, libcurl predvolene použije súbor $HOME/.ssh/id_dsa, ak je nastavená premenná prostredia HOME, a súbor "id_dsa" v aktuálnom adresári, ak premenná prostredia HOME nie je nastavená. Ak je súbor chránený heslom, nastavte heslo pomocou CURLOPT_KEYPASSWD. | Pridané v cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Zoznam šifier používaných pri prenosoch SSL. Napríklad, RC4-SHA A TLSv1 sú platné zoznamy šifier. | |
CURLOPT_SSLCERT | Názov súboru so správne naformátovaným certifikátom PEM. | |
CURLOPT_SSLCERTPASSWD | Na používanie certifikátu sa vyžaduje heslo CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Formát certifikátu. Podporované formáty "PEM"(predvolené), "DER" A "ANG". | Pridané vo verzii cURL 7.9.3. |
CURLOPT_SSLENGINE | ID šifrovacieho nástroja pre súkromný kľúč SSL špecifikovaný v parametri CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Identifikátor šifrovacieho mechanizmu používaného pre operácie asymetrického šifrovania. | |
CURLOPT_SSLKEY | Názov súboru súkromného kľúča SSL. | |
CURLOPT_SSLKEYPASSWD | Tajné heslo požadované na použitie súkromného kľúča SSL špecifikovaného parametrom CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Typ súkromného kľúča SSL špecifikovaný v parametri CURLOPT_SSLKEY. Podporované sú nasledujúce typy kľúčov: "PEM"(predvolené), "DER" A "ANG". | |
CURLOPT_URL | URL na stiahnutie. Tento parameter je možné nastaviť aj pri inicializácii relácie pomocou curl_init(). | |
CURLOPT_USERAGENT | Obsah hlavičky "User-Agent: ", odoslaný v požiadavke HTTP. | |
CURLOPT_USERPWD | Prihlasovacie meno a heslo používané počas pripojenia, uvedené vo formáte ":" . |
Pre nasledujúce hodnoty parametra voľby musí byť parameter value pole:
Parameter | Nastavte hodnotu hodnoty | Poznámky |
---|---|---|
CURLOPT_HTTP200ALIASES | Súbor odpovedí HTTP 200, s ktorými sa bude zaobchádzať ako so správnymi odpoveďami a nie s chybnými. | Pridané vo verzii cURL 7.10.3. |
CURLOPT_HTTPHEADER | Pole nastavených HTTP hlavičiek vo formáte pole ("Content-type: text/plain", "Content-length: 100") | |
CURLOPT_POSTQUOTE | Pole príkazov FTP spustených na serveri po dokončení požiadavky FTP. | |
CURLOPT_QUOTE | Pole FTP príkazov spustených na serveri pred vykonaním FTP požiadavky. |
Pre nasledujúce hodnoty parametra voľby musí byť parametrom value handle toku (vrátený napríklad funkciou fopen()):
Parameter | Nastavte hodnotu hodnoty |
---|---|
CURLOPT_FILE | Súbor, do ktorého sa zapíše výsledok prenosu. Predvolený výstupný tok STDOUT(okno prehliadača). |
CURLOPT_INFILE | Súbor, z ktorého sa majú načítať údaje pri nahrávaní na server. |
CURLOPT_STDERR | Alternatívny chybový výstupný súbor použitý namiesto chybového prúdu STDERR. |
CURLOPT_WRITEHEADER | Súbor, do ktorého budú zapísané hlavičky aktuálnej operácie. |
Pre nasledujúce hodnoty parametra voľby musí byť parameter value platný názov funkcie alebo uzáver:
Parameter | Nastavte hodnotu hodnoty |
---|---|
CURLOPT_HEADERFUNCTION | Funkcia spätného volania má dva parametre. Prvý parameter je handle cURL, druhý parameter je reťazec obsahujúci hlavičky, ktoré sa majú zapísať. Hlavičky musia byť napísané pomocou tejto funkcie spätného volania. Mal by vrátiť počet zapísaných bajtov. |
CURLOPT_PASSWDFUNCTION | Funkcia spätného volania má tri parametre. Prvý parameter je rukoväť cURL, druhý parameter je reťazec výzvy na zadanie hesla a tretí parameter je maximálna dĺžka hesla. Mal by vrátiť reťazec obsahujúci heslo. |
CURLOPT_PROGRESSFUNCTION |
Funkcia spätného volania má päť parametrov. Prvým je deskriptor cURL, druhým je celkový počet očakávaných bajtov stiahnutých zo servera, tretím je počet už stiahnutých bajtov, štvrtým je celkový počet očakávaných bajtov odoslaných na server a piaty je počet už odoslaných bajtov.
Ak chcete prevod zrušiť, môžete vrátiť nenulovú hodnotu. V tomto prípade sa zobrazí chyba CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Funkcia spätného volania má tri parametre. Prvý parameter je handle cURL, druhý parameter je zdroj streamu odovzdaný do cURL cez voľbu CURLOPT_INFILE a tretí parameter je maximálne povolené množstvo dát, ktoré sa majú prečítať. Funkcia spätného volania musí vrátiť reťazec s dĺžkou nepresahujúcou požadované množstvo údajov, zvyčajne čítaním z odovzdaného zdroja streamovania. Mal by vrátiť prázdny reťazec, ktorý signalizuje koniec súboru EOF. |
CURLOPT_WRITEFUNCTION | Funkcia spätného volania má dva parametre. Prvý parameter je handle cURL a druhý parameter je reťazec obsahujúci údaje, ktoré sa majú zapísať. Údaje je potrebné uložiť pomocou tejto funkcie. Musí vrátiť presný počet zapísaných bajtov, inak sa sťahovanie preruší s chybou. |
Iné významy:
Návratové hodnoty
Návraty PRAVDA po úspešnom absolvovaní resp FALSE v prípade chyby.
Zoznam zmien
Verzia | Popis |
---|---|
5.6.0 | Možnosť CURL_SAFE_UPLOAD teraz má predvolenú hodnotu PRAVDA. |
5.6.0 | Odstránená možnosť CURLOPT_CLOSEPOLICY a s ním spojené významy. |
5.5.0 | Zdroj cURL sa pridá ako prvý argument do funkcie spätného volania CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Pridaná možnosť CURLOPT_SHARE. |
5.3.0 | Pridaná možnosť CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Pridané možnosti CURLOPT_PROTOCOLS A CURLOPT_REDIR_PROTOCOLS. |
5.1.0 | Pridané možnosti CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH A CURLOPT_TIMECONDITION. |
5.0.0 | Pridané možnosti CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE A CURLOPT_HTTP200ALIASES. |
Príklady
Príklad č. 1 Inicializácia relácie CURL a načítanie webovej stránky
// vytvorte nový zdroj 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); Výsledok spustenia tohto príkladu: Pole ( => Foo) Pole ( => Pole ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) Komentujte: Odovzdanie poľa do CURLOPT_POSTFIELDS zakóduje údaje ako multipart/form-data, zatiaľ čo odovzdaním reťazca zakódovaného do adresy URL sa údaje zakódujú ako application/x-www-form-urlencoded. cURL je nástroj, ktorý vám umožňuje interakciu s rôznymi servermi a podporuje mnoho protokolov: HTTP, FTP, TELNET atď. cURL je pôvodne nástroj príkazového riadka. Ale našťastie pre nás PHP podporuje prácu s knižnicou cURL. V tomto článku sa pozrieme na netriviálne príklady práce s cURL. V skutočnosti existuje mnoho iných spôsobov, ako odoslať požiadavku na iný server, napríklad na získanie obsahu stránky. Mnoho ľudí, väčšinou z lenivosti, používa namiesto cURL jednoduché funkcie PHP: $obsah = file_get_contents("http://www.example.com"); // alebo $lines = file("http://www.example.com"); // alebo readfile("http://www.example.com"); Neumožňujú však efektívne odstraňovanie chýb. Existuje aj množstvo úloh, ktoré vôbec nedokážu – napríklad práca s cookies, autorizácia, odosielanie požiadaviek, sťahovanie súborov. cUrl je výkonný nástroj, ktorý podporuje viacero protokolov a poskytuje kompletné informácie o požiadavkách. Skôr než prejdeme ku komplexným príkladom, pozrime sa na základnú štruktúru požiadavky cURL v PHP. Ak chcete vykonať požiadavku cURL v PHP, musíte urobiť 4 hlavné kroky: V tomto článku sa budeme väčšinou zaoberať krokom č. 2, pretože tam sa odohráva kúzlo. Zoznam možností cURL je veľmi rozsiahly, takže dnes nebudeme zvažovať všetky možnosti, ale použijeme tie, ktoré sú užitočné pri riešení konkrétnych problémov. V prípade potreby môžete na sledovanie chýb pridať nasledujúce riadky: // ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ... Upozorňujeme, že namiesto „==“ používame „===“, pretože Je potrebné rozlišovať medzi prázdnou odpoveďou servera a boolovskou hodnotou FALSE, ktorá je vrátená v prípade chyby. Ďalším voliteľným krokom je získanie informácií o požiadavke cURL po jej vykonaní. // ... curl_exec($ch); $info = curl_getinfo($ch); echo "Vzala". $info["total_time"] . "sekundy pre url". $info["url"]; //... V dôsledku toho dostanete pole s nasledujúcimi informáciami: V tomto príklade napíšeme skript, ktorý bude detekovať presmerovania na základe rôznych nastavení prehliadača. Niektoré stránky napríklad presmerujú návštevníkov z mobilných zariadení na návštevníkov z iných krajín. Použijeme možnosť CURLOPT_HTTPHEADER na nastavenie vlastných hlavičiek vrátane User-Agent a Language a uvidíme, kam nás stránky presmerujú. // URL $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // prehliadače $browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5. 6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => pole ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU ako Mac OS X; en) AppleWebKit/420+ (KHTML, ako Gecko) Verzia/3.0 Mobile/1A537a Safari/419.3", "language" => "en"), "francúzština" => pole ("user_agent" = > "Mozilla/4.0 (kompatibilné; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "jazyk" => "fr,fr-FR;q=0.5")); foreach ($urls ako $url) ( echo "URL: $url\n"; foreach ($browsers ako $test_name => $browser) ( $ch = curl_init(); // nastavenie adresy curl_setopt($ch, CURLOPT_URL , $url); // uveďte prehliadač a použitý jazyk curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["jazyk" ]) ")); // nepotrebujeme obsah stránky curl_setopt($ch, CURLOPT_NOBODY, 1); // potrebujeme iba hlavičky curl_setopt($ch, CURLOPT_HEADER, 1); // namiesto toho vráti výsledok jeho výstupu curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // definovať presmerovania v hlavičkách HTTP? if (preg_match("!Umiestnenie: (.*)!" , $output, $matches)) ( echo "$test_name: presmeruje na $matches\n"; ) else ( echo "$test_name: žiadne presmerovanie\n"; ) ) echo "\n\n"; ) V slučke kontrolujeme prehliadače pre každú adresu URL. Najprv nastavíme možnosti pre našu požiadavku: URL a prehliadač a jazyk, ktorý sa má testovať. Pretože Nastavili sme špeciálnu možnosť, výsledok požiadavky bude obsahovať iba HTTP hlavičky. Pomocou jednoduchého regulárneho výrazu môžeme skontrolovať, či odpoveď obsahuje reťazec „Location:“. Výsledok spustenia skriptu: URL: http://www.cnn.com štandard: presmeruje na http://edition.cnn.com/ iphone: presmeruje na http://edition.cnn.com/ Francúzština: presmeruje na http://edition.cnn .com/ URL: http://www.mozilla.com štandard: presmeruje na https://www.mozilla.org/firefox/ iphone: presmeruje na https://www.mozilla.org/firefox/ french: presmeruje na https://www.mozilla.org/firefox/ URL: http://www.facebook.com štandard: presmeruje na https://www.facebook.com/ iphone: presmeruje na http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Francúzština: žiadne presmerovanie Pri vykonávaní požiadaviek GET môžu byť údaje odovzdané v reťazci dotazu. Napríklad, keď vyhľadávate na Google, váš dopyt sa preloží do adresy URL: http://www.google.com/search?q=google Ak chcete získať výsledok tohto dotazu, nepotrebujete ani cURL, môžete byť leniví a použiť "file_get_contents()". Niektoré formuláre HTML však používajú metódu POST. V tomto prípade sa údaje odosielajú v tele správy s požiadavkou a nie v samotnej adrese URL. Napíšme skript, ktorý bude odosielať požiadavky POST. Najprv si vytvorme jednoduchý PHP súbor, ktorý bude akceptovať tieto požiadavky a vráti mu zaslané dáta. Nazvime to post_output.php : $url = "http://localhost/post_output.php"; $post_data = pole ("foo" => "bar", "query" => "FooBar", "action" => "Odoslať"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // urobte požiadavku POST curl_setopt($ch, CURLOPT_POST, 1); // pridanie údajov curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $výstup; Tento skript vypíše: Pole ( => bar => FooBar => Odoslať) Tento skript odoslal požiadavku POST do súboru post_output.php. ktorý vypísal obsah poľa $_POST a túto odpoveď sme dostali pomocou cURL. Rovnako ako v predchádzajúcom príklade, vytvorte súbor, ktorý bude prijímať požiadavky, upload_output.php : Print_r($_FILES); A samotný skript, ktorý sťahuje súbory: $url = "http://localhost/upload_output.php"; $post_data = pole ("foo" => "bar", // súbor na nahranie "nahrať" => "@/tmp/desert.jpg"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $výstup; Ak chcete nahrať súbor, všetko, čo musíte urobiť, je zadať cestu k nemu, rovnako ako normálny parameter požiadavky POST, s predponou „@“. Výsledok skriptu: Pole ( => Pole ( => púšť.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Jednou z pokročilých funkcií cURL v PHP je schopnosť vykonávať viacero požiadaviek súčasne a asynchrónne. Za normálnych podmienok sa skript zastaví a čaká na dokončenie požiadavky. A ak potrebujete vykonať veľa dotazov, môže to trvať veľa času, pretože... budete vykonávať postupne. Toto obmedzenie je možné obísť: // vytvorenie handlerov $ch1 = curl_init(); $ch2 = curl_init(); // nastavenie možností 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); //vytvor viacnásobný cURL handle $mh = curl_multi_init(); // pridanie handlerov curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $beh = null; // vykoná požiadavky do ( curl_multi_exec($mh, $running); ) while ($running > 0); // uvoľnenie zdrojov curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Myšlienkou je, že môžete vytvoriť viacero rukovätí cURL, skombinovať ich do jedného viacúčelového rukoväte a spustiť ich asynchrónne. Po prvé, všetko je rovnaké ako pri bežnej požiadavke cURL - vytvorí sa deskriptor ( curl_init()
), parametre sú nastavené ( curl_setopt()
). Ďalej sa vytvorí multideskriptor ( curl_multi_init()
) a pridajú sa predtým vytvorené bežné deskriptory ( curl_multi_add_handle()
). Namiesto normálneho volania curl_exec() zavoláme curl_multi_exec()
táto funkcia nás informuje o počte aktívnych spojení pomocou druhého parametra - $running. Cyklus teda beží, kým sa $running nestane rovným 0. A samozrejme po dokončení práce je potrebné uvoľniť zdroje. V tomto príklade jednoducho vypíšeme výsledok dotazov do STDOUT. Pozrime sa na netriviálny prípad použitia viacerých cURL. Predstavte si blog s množstvom príspevkov obsahujúcich odkazy na externé stránky. Niektoré z týchto odkazov nemusia fungovať. Napíšme skript, ktorý nájde všetky nefunkčné odkazy a ukáže nám ich. Najprv musíme stiahnuť všetky externé odkazy z databázy: // CONFIG $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "site"); $max_connections = 10; $zoznam_url = pole(); $working_urls = array(); $dead_urls = pole(); $not_found_urls = array(); $aktívny = null; // pripojenie k MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Nedá sa pripojiť: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Mohol by sa pripojiť nevybrať db: " . mysql_error()); ) // prevziať všetky príspevky s odkazmi v texte $q = "VYBERTE post_content FROM wp_posts KDE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post " "; $r = mysql_query($q) or die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // zhromaždenie všetkých odkazov pomocou regulárneho výrazu if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($zodpovedá ako $url) ( // odfiltrujte nepotrebné domény $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ vylúčené_domény)) ( pokračovať; ) // dať dokopy $url_list = $url; ) ) ) // odstrániť opakovania $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Žiadna adresa URL na kontrolu"); ) V tejto časti skriptu jednoducho vytiahneme všetky externé odkazy z databázy. Poďme ich skontrolovať: $mh = curl_multi_init(); // 1. pridajte odkazy pre ($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 "==Mŕtve adresy URL==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 adries URL==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Pracovné adresy URL==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. pridá handle s danou URL funkciou add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // ak ešte existujú odkazy if (isset($url_list[$index])) ( // všetko je ako obvykle $ ch = curl_init(); // nastavenie možností curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // návrat namiesto zobrazenia výsledku curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // povoliť presmeruje curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // získajte iba hlavičky, aby ste ušetrili čas curl_setopt($ch, CURLOPT_NOBODY, 1); // pridajte k viacúčelovému rukoväti curl_multi_add_handle($mh, $ch); $index++; ) ) Pozrime sa na kód podrobnejšie (číslovanie zodpovedá komentárom v kóde): Spustíme skript: Mŕtve adresy URL== xample1234.com/ ==404 adresy URL== www.google.com/dsfasdfafd ==Fungujúce adresy URL== ru.php.net/manual/ru/function.time.php www.cssbuttongenerator.com/ csslint. net/codex.wordpress.org/Plugin_API/Action_Reference fortawesome.github.io/Font-Awesome/ fortawesome.github.io/Font-Awesome/ www.oracle.com/technetwork/java/javafx/downloads/index.html kódex. 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 Kontrola trvala asi 2 sekundy. Súčasným spustením 10 vlákien sa výkon zvýši 10-krát v porovnaní s bežnými požiadavkami cURL. Ak chcete získať obsah odpovede servera, použite funkciu curl_multi_getcontent($ch)
, kde $ch je deskriptor získaný z curl_multi_info_read()
. Ak požiadavka HTTP vyžaduje autentifikáciu, použite nasledujúci kód: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // odoslanie užívateľského mena a hesla curl_setopt($ch, CURLOPT_USERPWD, "myusername:mojeheslo"); // ak sú povolené presmerovania curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL pošle heslo po presmerovaní curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); PHP má svoju vlastnú knižnicu na prácu s FTP, ale môžete použiť aj cURL: // prečítať súbor $súbor = fopen("/cesta/k/súboru", "r"); // url už obsahuje potrebné údaje $url = "ftp://username: [chránený e-mailom]:21/cesta/k/novemu/suboru"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // možnosti curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, veľkosť súboru("/cesta/k/súboru")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch); Žiadosti možno podať prostredníctvom konkrétneho zástupcu: $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"); // ak sa vyžaduje autorizácia curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch); Spätné volania je možné použiť počas spustenia požiadavky bez čakania na jej dokončenie. Napríklad počas sťahovania odpovede servera môžeme použiť už prijaté dáta bez čakania na úplné stiahnutie. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"funkcia_progresu"); curl_exec($ch); curl_close($ch); function progress_function($ch,$str) ( echo $str; return strlen($str); ) Funkcia spätného volania musí vrátiť dĺžku reťazca, aby požiadavka fungovala správne. Pri každom prijatí ďalšej časti odpovede servera sa zavolá spätné volanie. V tomto článku sme sa pozreli na pokročilé funkcie cURL v PHP. Nabudúce, keď budete musieť zadať požiadavky na adresy URL, použite cURL. Často musíme sťahovať rôzne súbory z internetu, napríklad spustiteľné programové súbory, súbory skriptov, zdrojové archívy. Nie vždy to však treba robiť cez prehliadač. V mnohých situáciách je oveľa jednoduchšie vykonávať všetky akcie prostredníctvom terminálu. Pretože týmto spôsobom môžete automatizovať proces. Na druhej strane musia webmasteri z času na čas otestovať dostupnosť webových stránok, skontrolovať odoslané a prijaté hlavičky a mnoho ďalšieho. Na vyriešenie takýchto problémov a problémov podobného rozsahu môžete použiť pomôcku curl. Umožňuje vám riešiť oveľa širšiu škálu problémov, vrátane simulácie akcií používateľov na stránke. V tomto článku sa pozrieme na to, ako používať curl, čo to je a prečo je tento program potrebný. Curl je v skutočnosti viac než len pomôcka príkazového riadku pre Linux alebo Windows. Ide o súbor knižníc, ktoré implementujú základné možnosti práce s URL stránkami a prenosu súborov. Knižnica podporuje prácu s protokolmi: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, ako aj POP3, IMAP a SMTP. Je to skvelé na simuláciu akcií používateľov na stránkach a iných operácií s adresami URL. Podpora knižnice curl bola pridaná do mnohých rôznych programovacích jazykov a platforiem. Pomôcka curl je nezávislý obal pre túto knižnicu. Práve na túto pomôcku sa zameriame v tomto článku. Predtým, ako prejdeme k popisu toho, ako možno použiť príkaz curl linux, pozrime sa na samotný nástroj a jeho hlavné možnosti, ktoré budeme potrebovať. Syntax nástroja je veľmi jednoduchá: $ odkaz možnosti curl Teraz sa pozrime na hlavné možnosti: V žiadnom prípade to nie sú všetky možnosti pre curl linux, ale sú tu uvedené základy, ktoré budete musieť použiť. Prebrali sme všetko, čo súvisí s teóriou práce s utilitou curl, teraz je čas prejsť na prax a pozrieť sa na príklady príkazu curl. Najčastejšou úlohou je toto. Stiahnutie súboru je veľmi jednoduché. Ak to chcete urobiť, jednoducho odovzdajte názov súboru alebo html stránku obslužnému programu v parametroch: curl https://raw.githubusercontent.com/curl/curl/master/README.md Ale tu na vás čaká jedno prekvapenie: celý obsah súboru sa odošle na štandardný výstup. Ak ho chcete zapísať do ľubovoľného súboru, použite: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md A ak chcete, aby sa výsledný súbor volal rovnako ako súbor na serveri, použite možnosť -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 V prípade potreby môžete jedným príkazom stiahnuť niekoľko súborov: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Ďalšia vec, ktorá môže byť pre správcu užitočná, je stiahnuť súbor iba vtedy, ak bol upravený: curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Rýchlosť sťahovania môžete obmedziť na požadovaný limit, aby ste nepreťažili sieť pomocou voľby -Y: curl --limit-rate 50 000 -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Tu musíte zadať počet kilobajtov za sekundu, ktoré je možné stiahnuť. Môžete tiež ukončiť pripojenie, ak rýchlosť nie je dostatočná, použite na to možnosť -Y: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ Alebo skontrolujeme, či je súbor odoslaný cez HTTP; existuje na to špeciálna služba: curl -T ~/login.txt http://posttestserver.com/post.php V odpovedi vám obslužný program povie, kde nájdete stiahnutý súbor. Metódou POST môžete odosielať nielen súbory, ale aj ľubovoľné údaje. Pripomínam, že tento spôsob sa používa na odosielanie údajov rôznych foriem. Na odoslanie takejto požiadavky použite voľbu -d. Na testovanie použijeme rovnakú službu: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Ak nie ste spokojní s touto možnosťou odoslania, môžete predstierať odoslanie formulára. Existuje možnosť -F: curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php Tu odovzdáme pole hesla s formulárom ako obyčajný text, rovnakým spôsobom môžete zadať niekoľko parametrov. Cookies používajú webové stránky na ukladanie určitých informácií na strane užívateľa. Môže to byť potrebné napríklad pri autentifikácii. Cookies môžete odosielať a prijímať pomocou curl. Ak chcete uložiť prijaté súbory cookie do súboru, použite možnosť -c: curl -c cookie.txt http://posttestserver.com/post.php Potom môžete poslať súbor cookie curl späť: curl -b cookie.txt http://posttestserver.com/post.php Nie vždy nevyhnutne potrebujeme obsah stránky. Niekedy môžu byť zaujímavé len titulky. Ak chcete zobraziť iba ich, existuje možnosť -I: curl -I https://site A voľba -H vám umožňuje poslať niekoľko alebo viac na server, napríklad môžete odovzdať hlavičku If-Modified-Since, takže stránka sa vráti iba vtedy, ak bola upravená: Ak server vyžaduje jeden z bežných typov autentifikácie, ako napríklad HTTP Basic alebo FTP, curl túto úlohu zvládne veľmi ľahko. Ak chcete zadať podrobnosti autentifikácie, jednoducho ich zadajte oddelené dvojbodkou vo voľbe -u: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt Autentifikácia na HTTP serveroch bude vykonaná rovnakým spôsobom. Ak potrebujete na sťahovanie súborov použiť proxy server, je to tiež veľmi jednoduché. Stačí zadať adresu proxy servera vo voľbe -x: curl -x proxysever.test.com:3128 http://google.co.in V tomto článku sme sa pozreli na to, ako používať curl, prečo je tento nástroj potrebný a jeho hlavné možnosti. Napriek svojej podobnosti sú veľmi odlišné. Príkaz curl linux je určený skôr na analýzu a simuláciu rôznych akcií na serveri, zatiaľ čo wget je vhodnejší na sťahovanie súborov a prehľadávanie stránok. Tento článok bude hovoriť o takom mocnom nástroji ako je cURL, ako aj o knižnici pre PHP, ktorá poskytuje prístup k tomuto nástroju - libcurl. Načo to všetko je? Na komunikáciu so serverom pomocou protokolov prenosu údajov, napríklad http alebo ftp. Ostatné protokoly nás nijako zvlášť nezaujímajú, ak sa niekto chce tejto téme venovať hlbšie, bude musieť vyhrabať zdroje v anglickom jazyku a tento článok bude obsahovať základy a príklady použitia. Knižnica libcurl nám teda poskytuje možnosť prenášať údaje na server a prijímať z neho odpovede. Čo nám to dáva? Schopnosť napodobniť správanie používateľa alebo ! Môžete prijímať obsah stránok na následnú analýzu, môžete prijímať hlavičky odpovedí služby a programovo sa prihlasovať na stránky, vytvárať skripty na uverejňovanie správ (napríklad na Twitteri alebo na fórach) alebo informácií. Všetko je obmedzené len vašou predstavivosťou! Prvá vec, ktorú musíme urobiť, je nainštalovať knižnicu. Na svojom lokálnom počítači používam zostavu Denwer, ako veľká väčšina začínajúcich webmasterov, ktorým je článok určený. Skúsení používatelia, ktorí si nezávisle nainštalujú kombináciu php+apache+mysql, si budú môcť nainštalovať cURL, nie je na mne, aby som im vysvetľoval, ako sa to robí;) A my, začiatočníci, používame hotové riešenia, aby sme to uľahčili. Preto nainštalujte libcurl takto: a odstráňte bodkočiarku na začiatku výrazov: ;extension=php_curl.dll Pripravený. Ak chcete skontrolovať funkčnosť knižnice, môžete zavolať funkciu phpinfo() a nájsť tam riadok: podpora cURL povolená. Gratulujem k prvému víťazstvu. Ak chcete začať pracovať s nástrojom, je potrebné ho inicializovať. Toto sa robí nasledovne: $ch = curl_init(); Použili sme funkciu inicializácie relácie cURL. V tomto prípade môžete adresu URL nastaviť hneď takto: $ch = curl_init("https://site"); A môžete to urobiť neskôr v možnostiach. Nezáleží na poradí, v akom sú doplnky nainštalované. Robí to iná funkcia: Curl_setopt (zdroj ch, možnosť reťazca, zmiešaná hodnota) Prvý parameter tejto funkcie, teda resource ch, sme už vytvorili hneď vyššie, ale existuje veľa parametrov možností a hodnôt. Myslím, že by ste ich sem nemali všetky kopírovať a vkladať, ale stačí dať odkaz na podrobný popis funkcie, dúfam, že sa nikto neurazí: curl_setopt. Uvediem príklad možností nastavenia pomocou adresy URL: $url = "https://stránka"; curl_setopt($ch, CURLOPT_URL,$url); Niekoľko ďalších príkladov možností nastavenia: získajme hlavičku odpovede servera bez toho, aby sme dostali samotnú stránku: Curl_setopt($ch, CURLOPT_HEADER, 1); // prečítanie hlavičky curl_setopt($ch, CURLOPT_NOBODY, 1); // čítať LEN hlavičku bez tela Takže sme inicializovali reláciu, nastavili parametre, ktoré potrebujeme, teraz vykonáme výslednú požiadavku, zatvoríme reláciu a zobrazíme výsledok: $vysledok = curl_exec($ch); curl_close($ch); echo $vysledok; Výsledkom je náš prvý plne funkčný príklad použitia knižnice libcurl: $ch = curl_init(); $url = "https://stránka"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // prečítanie hlavičky curl_setopt($ch, CURLOPT_NOBODY, 1); // prečíta LEN hlavičku bez tela $result = curl_exec($ch); curl_close($ch); echo $vysledok; Dúfam, že je jasné, ako to funguje, pretože sme sa pozreli na každý krok samostatne :) Výsledkom je, že zo servera dostaneme hlavičku HTTP odpovede, ktorú určite analyzujeme nižšie, aby sme lepšie pochopili všetky fázy interakcie medzi prehliadač a server: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Úžasné! Zo servera sme dostali hlavičku odpovede a testovali sme knižnicu v akcii. Ako je to pre nás užitočné? Pretože teraz si môžete približne predstaviť postupnosť akcií pri práci s cURL: Napríklad som sa obrátil na stránku ya.ru a pozrel som sa na vygenerovanú požiadavku prehliadača a odpoveď prijatú zo servera. Tu sú: Verím, že keď už sú niektoré všeobecné body jasné a všetko sa zdá byť jasné, potom je čas prejsť na precvičovanie a zdokonaľovanie svojich zručností pomocou príkladu. Mňa osobne vždy svrbia ruky všetko vyskúšať v praxi :) Keďže cURL je pre analyzátory také dobré, zvážme funkciu získania kódu stránky podľa jej adresy. V tomto prípade bude výstupom pole s názvom, obsahom stránky a dokonca aj kódmi chýb, ak sa niečo pokazí. Funkcia get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 verzia/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // vráti webovú stránku curl_setopt($ch, CURLOPT_HEADER, 0); // nevráti hlavičky curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // nasleduje presmerovanie curl_setopt($ch, CURLOPT_ENCODING, ""); // spracuje všetky kódovania curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // používateľský agent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // časový limit pripojenia curl_setopt($ch, CURLOPT_TIMEOUT, 120); // časový limit odozvy curl_setopt_RIRSOPt (CURLOPT_TIMEOUT, 120) , 10); // zastavenie po 10. presmerovaní $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; return $header; ) Vstupné parametre: Funkciu používame napríklad takto: $vysledok = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["obsah "]; echo $page; ) Všetko by malo prebehnúť bez chýb a kód stránky dostanete v premennej $page. Ak sa pokúsime získať neexistujúcu stránku yaaaaaaaaaaaa.ru, dostaneme chybu: Nepodarilo sa vyriešiť hostiteľ: yaaaaaaaaaaaa.ru; Hostiteľ sa nenašiel Všetko je spracované správne a krásne :) JavaScript je vo vašom prehliadači zablokovaný. Povoľte JavaScript, aby stránka fungovala! PHP podporuje libcurl, knižnicu vytvorenú Danielom Stenbergom, ktorá umožňuje pripojiť sa k rôznym typom serverov a používať rôzne protokoly. Tieto funkcie boli zavedené v PHP 4.0.2. curl_init - inicializuje reláciu CURL. zdroj curl_init() Funkcia curl_init() inicializuje novú reláciu a vráti handle CURL na použitie vo funkciách a. Ak je voliteľný parameter url je poskytnutá, potom možnosť CURLOPT_URL získa hodnotu tohto parametra. Môžete ho nainštalovať manuálne pomocou . curl_setopt - nastavuje možnosti pre prenos/prenos CURL. bool curl_setopt(zdroj ch, možnosť reťazca, zmiešaná hodnota) Funkcia curl_setopt() nastavuje možnosti pre reláciu CURL identifikovanú parametrom ch. Parameter možnosť je možnosť, ktorú chcete nastaviť, a hodnotu toto je hodnota opcie možnosť . Parameter hodnotu musí byť dlhý pre nasledujúce možnosti (špecifikované parametrom možnosť): Parameter hodnotu musí byť reťazec pre nasledujúce hodnoty parametrov možnosť : Nasledujúce možnosti očakávajú deskriptor súboru, ktorý sa získa pomocou funkcie fopen() : Parameter hodnotu long write_callback (resource ch, string data)( ... return strlen($data);) možnosť : Parameter hodnotu by mala byť funkciou nasledujúceho tvaru reťazec read_callback (zdroj ch, zdroj fd, dlhá dĺžka)() pre nasledujúce hodnoty parametrov možnosť : curl_exec - vykoná reláciu CURL. bool curl_exec(zdroj ch) Táto funkcia by sa mala volať po inicializácii relácie CURL a po nastavení všetkých možností pre túto reláciu. Jeho účelom je jednoducho vykonať preddefinovanú reláciu CURL (špecifikovanú v parametri ch). curl_close - zatvorí reláciu CURL. neplatné curl_close(zdroj ch) Táto funkcia zatvorí reláciu CURL a uvoľní všetky zdroje. Rukoväť CURL ch sa tiež vypúšťa. curl_errno - vráti celé číslo obsahujúce posledné číslo chyby. Ak potrebujete poslať viacrozmerné pole a súbor v požiadavke POST, narazíte na neriešiteľný problém. Ak odošlete viacrozmerné pole do CURLOPT_POSTFIELDS, druhá úroveň bude odovzdaná ako reťazec "Array". Ak konvertujete pomocou http_build_query, nebudete môcť preniesť súbor. Nižšie je uvedená funkcia na kódovanie dvojrozmerného poľa s načítaním súborov pre Curl, ktorá bude fungovať v oboch starších verziách PHP 5.3, PHP 5.4 a PHP 5.6. /** prevedie viacrozmerné pole na jednorozmerné pole pomocou zložitých indexov a nahradí znak @ v predpone CurlFile na použitie v Curl * @param $inputArray * @param string $inputKey * @return pole $requestVars = pole ("id" => pole( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); dostaneme: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ function convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray ako $key => $value ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? new CurlFile(ltrim($value, "@")) : $value; ) else ( $resultArray[$tmpKey ] = $value; ) ) return $resultArray; ) // kontrola $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile" " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "stránka"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Príklady použitia Curl
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
?>
Poznámky
Prečo cURL?
Základy cUrl
// 1. inicializácia $ch = curl_init(); // 2. nastavenie možností vrátane URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. vykonanie požiadavky a prijatie odpovede $output = curl_exec($ch); // 4. čistenie zdrojov curl_close($ch); Sledovanie chýb
Získanie informácií o žiadosti
Sledovanie presmerovania v závislosti od prehliadača
Odosielanie žiadostí POST
Nahrávanie súborov
Viacnásobné cURL
Kontrola externých odkazov vo WordPress
Ďalšie funkcie cURL v PHP
HTTP autentifikácia
Nahrajte cez FTP
Pomocou proxy
Funkcie spätného volania
Záver
príkaz curl
Ako používať curl?
Limit rýchlosti
Prenos súborov
Odosielanie údajov POST
Odosielanie a prijímanie cookies
Prenos a analýza hlavičky
overenie kučery
Pomocou proxy
závery
Čo presne sú cURL a libcurl? Všeobecné body
Inštalácia cURL na Denwer (Denver). Ako začať používať libcurl?
Popis cURL a prvé kroky
Štruktúra hlavičky HTTP požiadavky
Žiadosť
GET / HTTP/1.1 - Snažíme sa získať stránku na /, teda hlavnú stránku umiestnenú v koreňovom adresári priečinka. Používame protokol verzie 1.1.
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 verzia/12.14— Predstavujeme sa serveru, sme prehliadač Opera.
Hostiteľ: ya.ru — Názov domény požadovaného zdroja.
Prijať: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1— Zoznam prijateľných formátov zdrojov.
Akceptačný jazyk: ru-RU,ru;q=0,9,en;q=0,8— Zoznam podporovaných jazykov.
Accept-Encoding: gzip, deflate— Podporované metódy kódovania.
Cookie: yandexuid=ХХХХХ - Cookies, ak je to potrebné.
Spojenie: Keep-Alive - Prosím, neprerušujte spojenie a zostaňte v kontakte.
Odpoveď
HTTP/1.1 200 Ok - Dostávame odpoveď s kódom 200, čo znamená, že je všetko v poriadku.
Server: nginx - Server sa predstavil - toto je nginx.
Dátum: nedeľa, 10. marec 2013 14:10:50 GMT— Aktuálny dátum a čas na serveri.
Content-Type: text/html; znaková sada=UTF-8— Typ obsahu a kódovanie.
Pripojenie: zavrieť - Server s nami nechce udržiavať trvalé spojenie, preto ho okamžite zatvorí. Pre ďalšiu požiadavku sa vytvorí nové pripojenie.
Cache-Control: no-cache,no-store,max-age=0, must-revalidate— Správa vyrovnávacej pamäte. V tomto prípade je deaktivovaná.
Vyprší: nedeľa, 10. marec 2013 14:10:50 GMT— Dátum predpokladaného konca relácie. V našom prípade sa zhoduje s časom otvorenia, pretože server ho okamžite zatvoril, ihneď po spracovaní.
Posledná úprava: nedeľa, 10. marec 2013 14:10:50 GMT— Čas poslednej úpravy.
Kódovanie obsahu: gzip — Spôsob kódovania informácií.
Kompletný zoznam všetkých parametrov, ktoré možno nájsť v hlavičke HTTP požiadavky, nájdete na Wikipédii.
Teraz máte približnú predstavu o tom, ako váš prehliadač a webový server navzájom komunikujú. Toto je veľmi užitočné poznať a pochopiť, pretože sa pokúsime napodobniť akcie prehliadača pomocou knižnice libcurl. Pokračuj.Príklad práce s knižnicou
url — adresa stránky alebo lokality.
Hodnoty výstupných parametrov (pole s tromi prvkami):
header['errno'] - ak sa niečo pokazilo, bude tu kód chyby.
header[‘errmsg’] – tu sa zobrazí chybový text.
hlavička['obsah'] - aktuálna strana\súbor\obrázok atď.
Potom môžete s kódom stránky robiť, čo chcete, napríklad ho analyzovať pomocou regulárnych výrazov. Ale to je všetko v ďalších lekciách, no nateraz sa zastavme pri tomto.Curl
libcurl v súčasnosti podporuje protokoly http, https, ftp, gopher, telnet, dict, file a ldap.
libcurl tiež podporuje HTTPS certifikáty, HTTP POST, HTTP PUT, FTP upload (toto sa dá urobiť aj s ftp PHP rozšírením), HTTP upload založený na formulári, proxy, cookies a autentifikáciu užívateľ+heslo.curl_init
Popis
curl_setopt
Popis
curl_exec
Popis
curl_close
Popis
curl_errno
Popis
Príklad 1: Inicializácia novej relácie CURL a načítanie webovej stránky.
Príklad 2: Použitie PHP modulu CURL na získanie example.com
Príklad 3: Kontrola dostupnosti URL pomocou PHP CURL
Príklad 4: Oddelenie hlavičky od tela získaného pomocou PHP CURL
Príklad 5: Určenie referenčnej adresy URL pomocou PHP CURL
problém: curl_setopt($ch,FOLLOW_LOCATION,1); chyba: problém s open_basedir a safe_mode riešenie: funkcia, ktorú už niekto vyvinul riešenie n 2: rovnaká funkcia, upravená, mi funguje skvele.= $curl_max_loops) ( $curl_loops = 0; návrat FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); zoznam($hlavička, $údaje) = explode("\n\n", $údaje, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop($matches))); if (!$url) ( //nepodarilo sa spracovať url na presmerovanie na $curl_loops = 0; vrátiť $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["schéma"]) $url["schéma"] = $posledná_url["schéma"]; if (!$url["hostiteľ"]) $url["hostiteľ"] = $posledná_url[ "hostiteľ"]; if (!$url["cesta"]) $url["cesta"] = $posledná_url["cesta"]; $new_url = $url["schéma"] . "://" . $ url["hostiteľ"] . $url["cesta"] . ($url["dotaz"]?"?".$url["dotaz"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Presmerovanie na", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
stačí použiť túto funkciu bez de FOLLOW_LOCATION a mala by fungovať. problém bol v tom, že keď sa dostanete na riadok, kde vraciate údaje, ak bol http_code iný ako 301 oe 302, $data má zastarané informácie alebo žiadne. takže $debbbb robí túto prácu. Príklad 6: Analýza súboru cookie z hlavičky pomocou CURL PHP
Niekedy nemôžete použiť CURLOPT_COOKIEJAR a CURLOPT_COOKIEFILE kvôli php-settings servera (hovorí sa, že pomocou týchto možností môžete zo servera stiahnuť akékoľvek súbory). Tu je riešenie 1)Nepoužívajte CURLOPT_FOLLOWLOCATION 2)Použite curl_setopt($ch, CURLOPT_HEADER, 1) 3)Zoberte súbory cookie z hlavičky takto: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $vysledky); 4)Nastavte ich pomocou curl_setopt($ch, CURLOPT_COOKIE, $cookies); Príklad 7: Analýza súboru cookie z hlavičky pomocou CURL PHP
Ako už spomenul Jevgen, niekedy nemôžeme použiť CURLOPT_COOKIEJAR a CURLOPT_COOKIEFILE. Nižšie je funkcia spätného volania hlavičky, ktorú som napísal v januári a ktorá vám umožňuje udržiavať súbory cookie medzi požiadavkami cURL. Súbory cookie sa pridávajú do $ch počas všetkých požiadaviek, dokonca aj počas presmerovania, takže môžete použite ho spolu s CURLOPT_FOLLOWLOCATION. Tu je kód: function read_header($ch, $string) (globálna $umiestnenie; #sledovať polohu/presmeruje globálne $cookiearr; #uložiť súbory cookie tu globálne $ch; # ^prepíše parameter funkcie $ch # toto je v poriadku, pretože musíme # aktualizovať globálne $ch pomocou # nových súborov cookie $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep track of posledné presmerovanie $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #získať súbor cookie $cookiestr = trim(substr( $string, 11, -1)); $cookie = explode(";", $cookiestr); $cookie = explode("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute len na konci hlavičky foreach ($cookiearr ako $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) return $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Tento kód predpokladá, že znova použijete $ch bez toho, aby ste ho zakaždým inicializovali (zavolajte curl_init iba raz, na začiatku). Ak potrebujete v ktoromkoľvek bode kódu znova inicializovať $ch, môžete pristupovať k aktuálne uloženým súborom cookie v $cookiearr a zahrnúť ich do nového $ch. Túto funkciu som napísal skôr, ako som mal dostatok skúseností s regulárnymi výrazmi, takže tu nenájdete žiadne volania preg_match. Tento kód som používal už dosť dlho a bez problémov som sa dostal na gmail, yahoo, hotmail, aol atď. prejsť prihlásením a niekoľkými stránkami, kým som sa dostal k tomu, čo som hľadal. Príklad 8: Nastavenie obslužného programu načítania hlavičky pomocou CURL PHP
Pomocou cURL som potreboval zavolať skript tretej strany, ktorý vracal binárne údaje ako prílohu, aby som znova odovzdal získané údaje ako prílohu. Problém bol v tom, že skript tretej strany príležitostne vracal chyby HTTP a chcel som sa v takýchto prípadoch vyhnúť odovzdávaniu prílohy s nulovou dĺžkou. Kombinácia použitia spätného volania CURLOPT_FAILONERROR a CURLOPT_HEADERFUNCTION pomohla úhľadne spracovať chyby HTTP skriptu tretej strany: funkcia curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) ( header($strHeader) ); header("Content-Disposition: attachment; filename="názov-súboru.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://site/"); curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1); curl_setopt($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); curl_setopt($resURL, CURLOPT_FAILONERROR, 1); curl_exec($resURL); $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE); curl_close($resURL); if ($intReturnCode != 200) ( print "Chyba s kódom: " . $intReturnCode; ) Príklad 9. Uloženie stránky do súboru a výpočet prenosovej rýchlosti pomocou CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); function WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_HEADER, 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); echo " "; echo "Priemerná rýchlosť sťahovania == " . $sAverageSpeedDownload ."
"; curl_close($sh); FClose ($hFile); echo "( Pozrite si súbor ".$sTxtfile."" v rovnakej ceste ako hostiteľ." " na miesto, kde sa nachádza tento skript PHP).
"; echo "Priemerná rýchlosť nahrávania == " . $sAverageSpeedUpload ."
"; echo"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Príklad 9. Príjem stránky cez pripojenie SSL (https)
$ch=curl_init("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Vypnite chybu "Problém s certifikátom SSL, overte, či je certifikát CA v poriadku" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Zakázať chybu "SSL: názov predmetu certifikátu "hostname.ru" sa nezhoduje s názvom cieľového hostiteľa "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); Príklad 10: Používanie relácií a súborov cookie v zvlnení
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://stránka"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//uložiť prijaté COOKIE do súboru curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //odošlete na server súbory COOKIE prijaté od neho počas autorizácie $out=curl_exec($curl); Príklad 11: Nahranie súboru a viacrozmerné pole v Curl. CURLOPT_POSTFIELDS + CurlFile