Praktická aplikácia curl php. Použitie cURL a libcurl v php

Na čo slúži cURL?

  • cURL je skvelé na simuláciu akcií používateľov v prehliadači.

Skutočný praktický príklad: ak chcete zmeniť IP adresu, musíte reštartovať router (modem). Ak to chcete urobiť, musíte: prihlásiť sa do smerovača, prejsť na stránku údržby a kliknúť na tlačidlo „Reštartovať“. Ak je potrebné túto akciu vykonať niekoľkokrát, potom sa musí postup zopakovať. Súhlasíte s tým, že túto rutinu nechcete zakaždým robiť manuálne. cURL vám toto všetko umožňuje automatizovať. Pomocou niekoľkých príkazov cURL môžete dosiahnuť autorizáciu a dokončiť úlohu na smerovači.

  • cURL je užitočné na získavanie údajov z webových stránok v príkazovom riadku.

Ďalší praktický príklad: chceme implementovať zobrazovanie všeobecných štatistík pre viacero stránok. Ak použijeme cURL, stáva sa to úplne triviálnou úlohou: pomocou cURL sa autentifikujeme v službe zberu štatistík (ak je to potrebné), potom (opäť pomocou príkazov cURL) získame potrebné stránky, analyzujeme údaje, ktoré potrebujeme; postup sa opakuje pre všetky naše stránky, potom pridáme a zobrazíme konečný výsledok.

Tie. prípady použitia cURL sú celkom reálne, hoci vo väčšine prípadov cURL potrebujú programátori, ktorí ho používajú pre svoje programy.

cURL podporuje mnoho protokolov a autorizačných metód, dokáže prenášať súbory, správne pracuje s cookies, podporuje SSL certifikáty, proxy a mnohé ďalšie.

cURL v PHP a príkazovom riadku

CURL môžeme použiť dvoma hlavnými spôsobmi: v PHP skriptoch a na príkazovom riadku.

Ak chcete povoliť cURL v PHP na serveri, musíte odkomentovať riadok v súbore php.ini

Prípona=php_curl.dll

A potom reštartujte server.

V systéme Linux musíte nainštalovať balík curl.

Na Debian, Ubuntu alebo Linux Mint:

$ sudo apt-get install curl

Na Fedore, CentOS alebo RHEL:

$ sudo yum install curl

Aby sme jasne videli rozdiel v používaní v PHP a na príkazovom riadku, vykonáme rovnaké úlohy dvakrát: najprv v skripte PHP a potom na príkazovom riadku. Skúsme sa nenechať zmiasť.

Načítanie údajov pomocou cURL

Získavanie údajov pomocou cURL v PHP

Príklad v PHP:

Všetko je veľmi jednoduché:

$target_url— adresa stránky, ktorá nás zaujíma. Za adresu lokality môžete vložiť dvojbodku a pridať adresu portu (ak sa port líši od štandardného).

curl_init— inicializuje novú reláciu a vráti deskriptor, ktorý je v našom príklade priradený k premennej $ch.

Potom vykonáme požiadavku pomocou funkcie cURL curl_exec, ktorému sa odovzdá deskriptor ako parameter.

Všetko je veľmi logické, ale po spustení tohto skriptu sa obsah stránky zobrazí na našej stránke. Čo však v prípade, ak nechceme obsah zobraziť, ale chceme ho zapísať do premennej (na následné spracovanie alebo analýzu).

Pridajme trochu k nášmu skriptu:

0) ( echo "Chyba curlingu: " . curl_error($ch); ) curl_close($ch); ?>

Máme linku curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt— nastavuje možnosti. Kompletný zoznam možností nájdete na tejto stránke: http://php.net/manual/en/function.curl-setopt.php

$response_data = curl_exec($ch);

Teraz je hodnota skriptu priradená k premennej $response_data, s ktorou je možné vykonávať ďalšie operácie. Môžete napríklad zobraziť jeho obsah.

If (curl_errno($ch) > 0) ( echo "Curl error: " . curl_error($ch); )

slúžia na ladenie v prípade výskytu chýb.

Načítanie údajov pomocou cURL na príkazovom riadku

Na príkazovom riadku stačí zadať

Curl mi-al.ru

kde namiesto toho mi-al.ru- adresa vašej webovej stránky.

Ak potrebujete skopírovať údaje do premennej namiesto zobrazenia výsledku na obrazovke, postupujte takto:

Temp=`curl mi-al.ru`

Niektoré údaje sa však stále zobrazujú:

Ak chcete zabrániť ich zobrazeniu, pridajte kľúč -s:

Temp=`curl -s mi-al.ru`

Môžete vidieť, čo bolo zaznamenané:

Echo $temp | menej

Základná a HTTP autentifikácia

Autentifikácia, zjednodušene povedané, je zadanie používateľského mena a hesla.

Základná autentifikácia je serverová autentifikácia. Na tento účel sa vytvoria dva súbory: .htaccess A .htpasswd

Obsah súboru .htaccess je približne takýto

AuthName "Len pre registrovaných užívateľov!" AuthType Basic vyžaduje platného používateľa AuthUserFile /home/freeforum.biz/htdocs/.htpassw

Obsah súboru .htpasswd je približne takýto:

Mial:CRdiI.ZrZQRRc

Tie. hash prihlasovacieho mena a hesla.

Keď sa pokúsite o prístup k priečinku chránenému heslom, prehliadač zobrazí niečo takéto:

HTTP autentifikácia je prípad, keď zadáme prihlasovacie meno a heslo do formulára na stránke. Práve toto overenie sa používa pri prihlasovaní do pošty, na fórach atď.

Základné overenie cURL (PHP)

Existuje stránka http://62.113.208.29/Update_FED_DAYS/, ktorá vyžaduje, aby sme sa prihlásili:

Skúsme náš úvodný skript:

0) ( echo "Curl error: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Hoci skript verí, že nejde o žiadnu chybu, výstup sa nám vôbec nepáči:

Pridajte dva riadky:

Curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

V prvom riadku nastavíme typ autentifikácie – základné. Druhý riadok obsahuje meno a heslo oddelené dvojbodkou (v našom prípade je meno a heslo rovnaké - ru-board). Dopadlo to takto:

0) ( echo "Curl error: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Základná autentifikácia cURL (na príkazovom riadku)

To isté sa dá dosiahnuť na príkazovom riadku jedným riadkom:

Curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

Nezabudol som špecifikovať typ autentifikácie, ide len o to, že v cURL je základný typ autentifikácie predvolený.

Na príkazovom riadku všetko fungovalo tak rýchlo, že som z frustrácie napísal nasledujúci program. Pripojí sa k stránke a stiahne najnovšiu aktualizáciu:

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Aktualizovať_FED_201(1).(2).(2).7z" | uniq | chvost -n 1'; curl -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

Pomocou niekoľkých ďalších príkazov môžete pridať:

  • rozbalenie archívu do určeného adresára;
  • spustenie aktualizácií ConsultantPlus (sú to jeho aktualizácie);
  • môžete skontrolovať, či už bola stiahnutá najnovšia dostupná aktualizácia alebo či sa objavila nová;
  • pridajte to všetko do Cron pre denné aktualizácie.

HTTP autentifikácia cURL

Autentifikácia HTTP cURL v PHP

Potrebujeme vedieť:

  • adresu, kam sa majú zaslať autentifikačné údaje
  • spôsob odoslania GET alebo POST
  • Prihlásiť sa
  • heslo

Niekedy tieto údaje nestačia. Poďme na to.

Adresu, na ktorú je potrebné odoslať údaje, môžete získať z overovacieho formulára. Napríklad:

Pozeráme sa na nehnuteľnosť akcie. Tie. posledná strana je login.php. Potrebujeme úplnú adresu, napríklad túto http://188.35.8.64:8080/login.php

Tu nájdeme aj spôsob odoslania: method="post"

Poznám aj prihlasovacie meno a heslo: admin a qwerasdfzxcv

Pre každý prípad, toto nie je môj router (a neviem koho), takže ak ma chcete obťažovať, nemusíte na tomto routeri robiť nič špinavé.

Tie. Reťazec sa odošle na server z formulára pomocou metódy POST. Teoreticky by mal fungovať náš predchádzajúci skript, do ktorého sme pridali nový riadok. Tie. musí nastať autentifikácia.

0) ( echo "Chyba curlingu: " . curl_error($ch); ) else ( ) curl_close($ch); ?>

Nový riadok v skripte

curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

Tu curl_setopt- funkcia, ktorá je nám už známa na nastavenie možností pre cURL, CURLOPT_POSTFIELDS- toto je názov možnosti, ktorú nastavujeme. CURLOPT_POSTFIELDS obsahuje všetky údaje, ktoré sa prenášajú pomocou metódy POST. No, samotná línia LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv- toto sú práve tie údaje, ktoré prenášame.

Ak si formulár pozorne prezriete, uvidíte, že obsahuje aj skryté polia. A dáta sa dajú spracovať alebo doplniť JavaScriptom.To všetko si môžete naštudovať, ale ja mám radšej jednoduchší spôsob.

Používam Wireshark. Tento program je určený na snímanie (zachytávanie) premávky. A práve v ňom je veľmi pohodlné vidieť, čo presne sa na stránku prenáša.

Pozrite si toto malé video:

Tie. s adresou, kam sa prenášajú dáta, som hádal správne. Ukázalo sa však, že prenášaný reťazec je oveľa komplikovanejší.

Zadal som správny parameter a tiež som mierne upravil skript tak, aby sa nielen prihlásil, ale aj niečo dostal zo smerovača:

0) ( echo "Chyba curlingu: " . curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 = curl_init($target_url2); curl_setopt($). ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 = curl_exec($ch2); preg_match("|f.ssid.value = "(.*)";|", $response_data2, $results2); $results2 = str_replace("f .ssid.value = "", "", $results2); $results2 = str_replace("";", "", $results2); echo "Názov siete Wi-Fi: $results2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Heslo siete Wi-Fi: $results3"; ) curl_close($ch); ?>

Mimochodom, ak vlastník aktualizuje heslo (ale neaktualizuje firmvér), nové heslo si môžete vždy pozrieť na http://188.35.8.64:8080/model/__show_info.php?REQUIRE_FILE=/var/etc /httpasswd

(Ide o dobre známu zraniteľnosť smerovačov D-Link DIR-300, D-Link DIR-320 a D-Link DAP-1353).

Autentifikácia HTTP cURL na príkazovom riadku

Už poznáme celú adresu, ako aj reťazec, ktorý sa má preniesť. Takže je to jednoduché:

Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php

Myslím si, že je všetko jasné, keďže sme tieto termíny už zvážili. Ak niekto nerozumie, pýtajte sa v komentároch.

Príkladom použitia cURL na získanie a analýzu údajov by bola nasledujúca sada príkazov:

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php - &de "v/nnnulle > /de " && echo "Názov siete Wi-Fi" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Heslo siete Wi-Fi" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

Komplexné prípady autorizácie: AJAX, JQuery, JavaScript atď.

Správnejšie by bolo napísať tento nadpis takto: „Komplexné“ prípady autorizácie. Tie. Dajte slovo „komplikované“ do úvodzoviek. Zložité sa zdajú iba na prvý pohľad, keď nie je jasné: kde sa odosiela, aké sú názvy polí, čo presne sa odosiela atď.

Ale v skutočnosti sa všetky týkajú metód POST alebo GET. Aby ste pochopili, čo presne sa odosiela, môžete si stránku s formulárom uložiť na disk a pridať funkciu na zobrazenie údajov vygenerovaných na odoslanie na tlačidlo Odoslať. Alebo ešte jednoduchšie – ako ja, Wireshark.

Ak sú údaje správne, ale nedôjde k overeniu totožnosti, musíte postupovať podľa nasledujúcich pokynov:

  • nastavte správny reťazec sprostredkovateľa
  • nastavte "správny" reťazec používateľského agenta.

To všetko sa dá urobiť pomocou základných metód cURL, ale nebudem sa tým zaoberať. Lekcia už bola dostatočne dlhá, ale chcel som ukázať aj pár trikov s cURL.

Tipy a triky cURL

cURL a prijímanie súborov cookie okrem CURLOPT_COOKIEJAR

Myslím, že už je jasné, že cURL narába s cookies správne – ukladá ich, používa ich, keď si ich server vyžiada, atď. Niekedy je však potrebné cookies uložiť. Existuje na to možnosť s názvom CURLOPT_COOKIEJAR, ale nie vždy je možné ju použiť. Tomu je venovaný náš prvý trik.

Niekedy kvôli spôsobu, akým je PHP nakonfigurované na serveri, nemáme dostupné možnosti ako CURLOPT_COOKIEJAR (umožňuje vám uložiť prijaté súbory cookie do súboru) a CURLOPT_COOKIEFILE (umožňuje vám používať súbory cookie zo súboru). Pretože hovoria, že pomocou týchto možností môžeme ukradnúť akýkoľvek súbor z ich servera. Tu je riešenie tohto problému:

1) Nepoužívame CURLOPT_FOLLOWLOCATION

2) Použite curl_setopt($ch, CURLOPT_HEADER, 1)

3) Zbierajte cookies z hlavičky takto:

Preg_match_all("|Nastaviť súbor cookie: (.*);|U", $obsah, $výsledky); $cookies = implode(";", $vysledky);

4) Nastavte ich pomocou curl_setopt($ch, CURLOPT_COOKIE, $cookies);

Druhý tip. Z útočníkov sa môžeme zmeniť na obete. Robíme to, aby sme sa nestali obeťou útoku typu man-in-the-middle.

Prosím, všetci, prestaňte nastavovať nastavenie CURLOPT_SSL_VERIFYPEER na hodnotu false alebo 0. Ak vaša inštalácia PHP nemá aktuálnu sadu certifikátov koreňovej CA, stiahnite si jeden z webovej stránky curl a uložte ho na svoj server:

Potom nastavte cestu v súbore php.ini, napríklad v systéme Windows:

Curl.cainfo=c:phpcacert.pem

Zakázanie CURLOPT_SSL_VERIFYPEER umožňuje útok typu man-in-the-middle (MITM), ktorý nechceme!

No a dnes posledný tip. Vedeli ste, že je možný veľký počet žiadostí o asynchrónne zvlnenie?

Na to môžete použiť curl_multi_init. Podrobnosti a príklad kódu v oficiálnej dokumentácii http://php.net/manual/ru/function.curl-multi-init.php

O cURL na príkazovom riadku

Muž curl

Druhá časť hodiny je pripravená aj na čítanie v ruštine cURL: " ".

21 odpovedí

Možno už máte kučeru

Možno nebudete musieť nič sťahovať:

  • Ak používate Windows 10 verzie 1803 alebo vyššej, váš operačný systém sa dodáva s kópiou curl už nakonfigurovanou a pripravenou na použitie.
  • Ak máte ezoterickejšie potreby (napr. potrebujete zostavy cygwin, zostavy tretích strán, libcurl, hlavičkové súbory, zdroje atď.), použite sprievodcu sťahovaním curl. Po zodpovedaní piatich otázok sa vám zobrazí zoznam odkazov na stiahnutie.

    Odstránenie a úprava zvlnenia

    Nájdite curl.exe v stiahnutom balíku; pravdepodobne je pod košom\ .

    Vyberte miesto na pevnom disku, ktoré bude slúžiť ako trvalý domov pre kučery:

    • Ak chcete curl vytvoriť vlastný priečinok, urobí to C:\Program Files\curl\ alebo C:\curl\.
    • Ak máte veľa bezplatných spustiteľných súborov a nechcete do svojej PATH pridávať veľa samostatných priečinkov, použite na tento účel jeden priečinok, napríklad C:\Program Files\tools\ alebo C:\tools\ .

    Umiestnite curl.exe do priečinka. A priečinok ani jeho obsah nikdy nepremiestňujte.

    Potom budete chcieť sprístupniť curl kdekoľvek na príkazovom riadku. Ak to chcete urobiť, pridajte priečinok do PATH takto:

    1. Kliknite na ponuku Štart systému Windows 10. Začnite písať „prostredie“.
    2. Uvidíte výsledok vyhľadávania. Upravte systémové premenné prostredia. Vyberte toto.
    3. Otvorí sa okno Vlastnosti systému. Kliknite na tlačidlo Premenné prostredia na spodku.
    4. Vyberte premennú "Cesta" v sekcii "Systémové premenné" (spodné pole). Kliknite na tlačidlo Zmeniť.
    5. Kliknite na " Pridať" a vložte cestu do priečinka, kde sa nachádza curl.exe.
    6. Kliknite dobre, ak je to potrebné. Zatvorte všetky otvorené okná konzoly a znova ich otvorte, aby získali novú PATH.

    Teraz si vychutnajte písanie curl na ľubovoľnom príkazovom riadku. Čas na zábavu!

    Ak chcete spustiť curl z príkazového riadku

    a) Kliknite pravým tlačidlom myši na ikonu Tento počítač

    b) Vyberte "Vlastnosti"

    d) Prejdite na kartu [Rozšírené] – tlačidlo „Premenné prostredia“.

    e) V časti „Systémová premenná“ vyberte „Cesta“ a „Upraviť“

    f) Pridajte bodkočiarku a potom cestu k miestu, kam ste umiestnili svoj curl.exe (napr. D:\software\curl)

Teraz môžete spustiť z príkazového riadku zadaním:

Curl www.google.com

Počnúc Windowsom 10 verzie 1803 (a staršej, Insider build 17063) už neinštalujete curl . Windows obsahuje svoj vlastný curl.exe (a tar.exe) v C:\Windows\System32\, ku ktorému máte prístup priamo z bežného CMD.

C:\Users\vonc>C:\Windows\System32\curl.exe --version curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL Release-Date: Protokoly: dict súbor ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Vlastnosti: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL C:\Users\vonc>C:\Windows\System32\tar.exe --verzia bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.5.f- ipp

Pravdepodobne stojí za zmienku, že Powershell v3 a novší obsahuje cmdlet Invoke-WebRequest, ktorý má určité možnosti curlingu. Pravdepodobne stojí za zmienku aj cmdlety New-WebServiceProxy a Invoke-RestMethod.

Nie som si istý, či vám budú vyhovovať alebo nie, ale aj keď nie som Windows, musím povedať, že objektovo založený prístup, ktorý PS používa, sa mi zdá oveľa jednoduchší na prácu s nástrojmi ako curl, wget atď. Možno by stáli za pozretie

Môžete vytvoriť najnovšiu verziu curl, openssl, libssh2 a zlib v 3 jednoduchých krokoch podľa tohto návodu.

Curl je zostavený staticky, takže nemusíte šíriť potrebný dynamický runtime.

Môžete si tiež stiahnuť predpripravenú verziu (x86 a x64).

Hľadal som proces sťahovania Curl a všade tam, kde povedali, skopírujte súbor curl.exe na System32, ale neposkytli priamy odkaz. takže si tu môžete užiť curl.exeľahké na priečinok bin Len

rozbaľte ho a potom prejdite do priečinka bin, kde získate súbor exe

Myslel som, že napíšem presne to, čo som napísal (Windows 10, 64-bitová verzia):

Vyberte spustiteľný súbor curl.

Vyberte Win64.

Vyberte si univerzálne.

Vyberte si ľubovoľnú.

curl verzia: 7.53.1 - SSL povolené SSH povolené. Poďakovanie: Victor Shakats. Tento balík je spustiteľný typ curl. Tento odkaz vám poskytne predkompilovaný binárny súbor curl (alebo v niektorých prípadoch pomocou informácií poskytnutých na stránke, na ktorú sa dostanete). Môžete alebo nemusíte nainštalovať libcurl ako zdieľanú knižnicu/DLL. Súbor je zabalený pomocou 7zip. 7zip je formát archivácie súborov.

Kliknite na stiahnutie.

V priečinku sťahovania by ste mali mať súbor curl-7.53.1-win64-mingw.7z.

Nainštalujte si 7-Zip, ak ho nemáte.

Kliknite pravým tlačidlom myši, 7-Zip, rozbaľte sem. Skopírujte a prilepte extrahovaný súbor niekde ako Z:\Tools\

Ak sa pozriete do priečinka bin, uvidíte curl.exe. Ak naň dvakrát kliknete, okno rýchlo zabliká a zmizne. Ak ho chcete spustiť, musíte použiť príkazový riadok. Prejdite do priečinka koša a zadajte zvlnenie a potom možnosti na odoslanie požiadavky. Musíte použiť dvojité úvodzovky. Jednoduché úvodzovky nebudú fungovať so zvlnením v systéme Windows.

Teraz musíte do premennej cesty používateľa pridať curl, aby ste nemuseli pre spustenie programu prechádzať do správneho priečinka. Prejdite na Tento počítač, Počítač, Vlastnosti systému, Rozšírené nastavenia systému, prihláste sa ako správca (nie ste správca, však? Nie?). Premenné prostredia, Systémové premenné, pozrite si zoznam a vyberte Cesta, potom Upraviť, potom Nové, potom napr.

Z:\Tools\curl-7.53.1-win64-MinGW\Bin

Ak chcete, môžete pridať spätné lomítko, myslím, že na tom nezáleží. Stláčajte tlačidlo pre posun nahor, kým sa nedostanete na začiatok zoznamu a nebudete ho môcť ľahko vidieť z predchádzajúcej obrazovky. Kliknite na OK, OK, OK, potom otvorte príkazový riadok a môžete spustiť curl zadaním curl z ľubovoľného priečinka ako ktorýkoľvek používateľ. Nezabudnite na dvojité úvodzovky.

Toto je odpoveď, ktorú by som chcel dostať.

Tento inštalačný program mi to uľahčil http://www.confusedbycode.com/curl/

"CURL pre Windows môžete nainštalovať len niekoľkými kliknutiami. Jednoducho si stiahnite a spustite inštalačný program z tabuľky nižšie a kliknite na tlačidlo Inštalovať. Predvolená inštalácia zahŕňa.

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.

Čo presne sú cURL a libcurl? Všeobecné body

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!

Inštalácia cURL na Denwer (Denver). Ako začať používať libcurl?

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:

  • Stiahnite si hotový rozširujúci balík „PHP5: dodatočné moduly“.
  • Podľa toho ho nainštalujeme. Nič zložité, súhlasím :)
  • Otvorte súbor v programe Poznámkový blok (vždy odporúčam Notepad++): X:/webservers/usr/local/php5/php.ini //kde X je váš disk, na ktorom je nainštalovaný webový server

    a odstráňte bodkočiarku na začiatku výrazov:

    ;extension=php_curl.dll

  • Reštartujeme server Denver.

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.

Popis cURL a prvé kroky

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 porozumeli všetkým fázam 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:

  • Inicializovať reláciu (curl_init)
  • Nastavte možnosti, ktoré potrebujeme (curl_setopt)
  • Vykonať prijatú požiadavku (curl_exec)
  • Ukončiť reláciu (curl_close)

Štruktúra hlavičky HTTP požiadavky

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

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

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

Použitie libcurl s C a Pythonom

Vývoj aplikácií, ktoré sa spoliehajú na protokoly aplikačnej vrstvy, ako sú HTTP a FTP, nie je veľmi náročný, ale nie je ani triviálny. Navyše, na takýto vývoj sa nezameriavame, pretože vo väčšine prípadov je oveľa dôležitejšie to, čo leží nad týmito protokolmi. Na Libcurl je zaujímavé, že kladie dôraz skôr na aplikáciu ako na prechodný aspekt vývoja. Všimnite si, že len málo aplikácií má svoj vlastný TCP/IP zásobník – koniec koncov, opätovné použitie všetkého možného minimalizuje záťaž programátora a zvyšuje spoľahlivosť aplikácie.

Tento článok začína krátkym úvodom do protokolov aplikačnej vrstvy a potom prechádza na preskúmanie cURL, libcurl a ich aplikácií.

webové protokoly

Moderný vývoj aplikácií sa výrazne líši od toho, čo bolo v nedávnej minulosti. Dnes musia aplikácie komunikovať cez sieť alebo internet tým, že používateľom poskytujú sieťové API alebo rozhranie a poskytujú flexibilitu prostredníctvom vlastného skriptovania. Moderné aplikácie zvyčajne exportujú webové rozhranie pomocou HTTP a odosielajú upozornenia o abnormálnych situáciách pomocou protokolu SMTP (Simple Mail Transport Protocol). Tieto protokoly umožňujú webovému prehliadaču spustenému na zariadení prenášať konfiguráciu alebo stav a prijímať štandardné správy zo zariadení na štandardného e-mailového klienta (prostredníctvom HTTP a SMTP).

Tieto webové služby sú zvyčajne postavené na soketovej vrstve zásobníka sieťových protokolov (obrázok 1). Soketová vrstva implementuje API, ktoré sa datuje od operačného systému Berkeley Software Distribution (BSD) a izoluje detaily základných protokolov transportnej a sieťovej vrstvy.

Obrázok 1. Zásobník sieťových protokolov a libcurl

Webové služby poskytujú interakciu medzi klientskymi a serverovými protokolmi. V kontexte HTTP je server koncovým zariadením a klientom je prehliadač na vzdialenom mieste. Pre SMTP je server poštová brána alebo vzdialený používateľ a klient je koncové zariadenie. V niektorých prípadoch prebiehajú protokolové interakcie v dvoch fázach (požiadavka a odpoveď), zatiaľ čo v iných je na udržanie komunikácie potrebná oveľa väčšia prevádzka. Táto interakcia môže spôsobiť značné ťažkosti, ktoré sú prekonané použitím API, ako je libcurl.

Úvod do cURL

Pôvod a obsah cURL

cURL navrhol Daniel Stenberg, ale na jeho vývoji sa podieľalo viac ako 600 programátorov. Niet pochýb o tom, že ide o užitočnú technológiu so širokým spektrom aplikácií.

cURL bol pôvodne navrhnutý ako prostriedok na presúvanie súborov medzi koncovými bodmi pomocou rôznych protokolov, ako sú FTP, HTTP, SCP a iné. Pôvodne nástroj príkazového riadku je teraz tiež knižnicou s väzbami pre viac ako 30 jazykov. Takže teraz namiesto použitia cURL z príkazového riadku môžete vytvárať aplikácie, ktoré obsahujú tieto dôležité funkcie. Knižnica libcurl je tiež prenosná a podporuje Linux®, IBM® AIX®, BSD, Solaris a mnohé ďalšie varianty UNIX®.

Získanie a inštalácia cURL/libcurl

Získanie a inštalácia libcurl je jednoduchá, ale proces sa líši v závislosti od distribúcie Linuxu. Na Ubuntu je možné tieto balíčky nainštalovať pomocou pomôcky apt-get. Nasledujúce dva riadky ukazujú, ako nainštalovať libcurl a väzby Pythonu pre libcurl:

$ sudo apt-get install libcurl3 $ sudo apt-get install python-pycurl

Pomôcka apt-get zaisťuje splnenie všetkých závislostí počas procesu inštalácie.

cURL na príkazovom riadku

cURL začal ako nástroj príkazového riadka na prenos údajov pomocou syntaxe Uniform Resource Locator (URL). Kvôli popularite tejto funkcie vo forme príkazového riadka bola vytvorená knižnica na jej integráciu do aplikácií. Dnes slúži cURL pre príkazový riadok ako obal okolo knižnice cURL. Tento článok začína preskúmaním cURL na príkazovom riadku a potom sa ponoríme do používania pomôcky ako knižnice.

Dve typické použitia cURL sú prenos súborov pomocou protokolov HTTP a FTP. cURL poskytuje jednoduché rozhranie pre tieto a ďalšie protokoly. Ak chcete získať súbor z webovej lokality pomocou protokolu HTTP, stačí zadať cURL názov lokálneho súboru, do ktorého chcete webovú stránku napísať, ako aj adresu URL webovej lokality a súbor na prenos. To je veľa slov pre jednoduchý príkazový riadok zobrazený vo výpise 1.

Výpis 1. Príklad použitia cURL na získanie súboru z webovej stránky
$ curl -o test html www.exampledomain.com % Celkom % prijatých % Xferd Priemerná rýchlosť Čas Čas Čas Aktuálne predĺženie Odovzdanie Celkom Spotrebované Zostávajúca rýchlosť 100 43320 100 43320 0 0 55831 0 --:--:-- - -:-- :-- --:--:-- 89 299 USD

Všimnite si, že som zadal doménu, nie súbor, takže dostanem koreňový súbor (index.html). Ak chcete nahrať tento súbor na lokalitu FTP pomocou cURL, musíte zadať súbor, ktorý sa má odovzdať, pomocou voľby -T a potom zadať adresu URL lokality FTP a cestu k súboru (Výpis 2).

Výpis 2. Príklad použitia cURL na nahranie súboru na FTP stránku
$ curl -T test.html ftp://user: [e-mail chránený]/ftpdir/ % Celkom % Prijatých % Xferd Priemerná rýchlosť Čas Čas Čas Aktuálne predĺženie Odovzdanie Celkom vynaložené Zostávajúca rýchlosť 100 43320 0 0 100 43320 0 38946 0:00:01 0:00:01 --:--:- - 124 tisíc dolárov

Mohlo by to byť jednoduchšie? Stačí zvládnuť niekoľko jednoduchých modelov a cURL bude veľmi jednoduché. Ale množstvo dostupných možností je veľmi veľké - žiadosť o pomoc z príkazového riadku cURL (--help) zobrazí 129 riadkov. Veľké množstvo možností vám umožňuje ovládať všetko od výrečnosti až po bezpečnosť a rôzne konfigurovateľné prvky závislé od protokolu.

Z pohľadu vývojára to nie je najpríjemnejšia stránka cURL. Poďme sa ponoriť hlbšie do knižnice cURL a uvidíme, ako pridať tieto protokoly prenosu súborov do vašej aplikácie.

cURL ako knižnica

Ak ste za posledných 10 rokov sledovali skriptovacie jazyky, všimli ste si výraznú zmenu v ich zložení. Skriptovacie jazyky ako Python, Ruby, Perl a mnohé ďalšie zahŕňajú nielen vrstvu soketov, ako napríklad C alebo C++, ale aj rozhrania protokolov aplikačnej vrstvy. Tieto skriptovacie jazyky obsahujú funkcie na vysokej úrovni, vďaka ktorým je napríklad vytváranie HTTP servera alebo klienta triviálne. Knižnica libcurl pridáva funkcie podobné jazykom ako C a C++, ale spôsobom, ktorý vám umožňuje pracovať s viacerými jazykmi. Libcurl sa správa zhruba rovnako vo všetkých jazykoch, ktoré podporuje, aj keď sa tieto jazyky môžu výrazne líšiť (C a Scheme), spôsob, akým sa toto správanie vynucuje, sa tiež môže líšiť.

Knižnica libcurl obsahuje funkcie, ktoré sú znázornené vo výpisoch a vo forme API, takže ju možno použiť v jazykoch vysokej úrovne (dodnes viac ako 30). Tento článok poskytuje dva príklady použitia libcurl. Prvý skúma jednoduchý HTTP klient v C (vhodný na vytváranie webových pavúkov) a druhý je jednoduchý HTTP klient v Pythone.

HTTP klient v jazyku C

C API poskytuje okrem funkčnosti libcurl dve API. Jednoduché rozhranie je jednoduché synchrónne API (to znamená, že keď libcurl zadá požiadavku, vykoná ju až do dokončenia alebo pred nahlásením chybovej správy). Multi-interface poskytuje kontrolu nad libcurl, čo umožňuje aplikácii vykonávať viacero súčasných prenosov a kontrolovať, kde a kedy libcurl prenáša dáta.

Tento príklad používa jednoduché rozhranie. Toto API stále poskytuje určitú kontrolu nad procesom pohybu údajov (pomocou funkcií spätného volania), ale stále zodpovedá svojmu názvu. Výpis 3 ukazuje príklad C pre HTTP.

Výpis 3. HTTP klient v C pomocou jednoduchého rozhrania libcurl
#include #include #include #define MAX_BUF 65536 char wr_buf; int wr_index; /* * Funkcia spätného volania dát (volaná v kontexte * curl_easy_perform. */ size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) ( int segsize = veľkosť * nmemb; /* Skontrolujte, či je to údaje presahujú veľkosť našej vyrovnávacej pamäte. Ak áno, * nastavte hodnotu kontextu definovanú používateľom a vráťte hodnotu 0, aby ste * označili problém, ktorý sa má skrútiť. */ if (wr_index + segsize > MAX_BUF) ( *(int *)userp = 1; return 0; ) /* Skopírujte údaje z vyrovnávacej pamäte curl do našej vyrovnávacej pamäte */ memcpy((void *)&wr_buf, buffer, (size_t)segsize); /* Aktualizujte index zápisu */ wr_index += segsize; /* Null ukončiť vyrovnávaciu pamäť */ wr_buf = 0; /* Vráti počet prijatých bajtov, čo naznačuje, že je všetko v poriadku */ return segsize; ) /* * Jednoduchá aplikácia curl na čítanie súboru index.html z webovej lokality. * / int main(void) ( CURL *curl; CURLcode ret; int wr_error; wr_error = 0; wr_index = 0; /* Prvý krok, init curl */ curl = curl_easy_init(); if (!curl) ( printf("mohlo by to byť "t init curl\n"); return 0; ) /* Povedz curl URL súboru, ktorý sa chystáme získať */ curl_easy_setopt(curl, CURLOPT_URL, "www.exampledomain.com"); /* Povedz curl, že dostaneme údaje do funkcie write_data a * poskytnite mu tiež kontextový ukazovateľ pre návrat našej chyby. */ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&wr_error); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); /* Povolí curl vykonať akciu */ ret = curl_easy_perform(curl); printf("ret = %d (chyba_zapisu = %d)\n", ret, chyba_wr); /* Vyšle stránku, ak pokrčenie indikuje, že sa nevyskytli žiadne chyby */ if (ret == 0) printf("%s\n", wr_buf); curl_easy_cleanup(curl); návrat 0; )

V hornej časti sú potrebné zahrnuté súbory vrátane koreňového súboru cURL. Ďalej som definoval niekoľko premenných, ktoré sa majú odovzdať. Prvý, wr_buf, je vyrovnávacia pamäť, do ktorej sa budú zapisovať vstupné dáta. wr_index odráža index aktuálnej položky vyrovnávacej pamäte.

Prejdime k hlavnej funkcii, ktorá vykoná inštaláciu pomocou jednoduchého API. Všetky volania cURL prechádzajú cez ukazovateľ, ktorý ukladá stav konkrétnej požiadavky. Je definovaný ako referencia ukazovateľa CURL. Tento príklad tiež generuje špeciálny návratový kód s názvom CURLcode. Pred použitím akýchkoľvek funkcií libcurl musíte zavolať curl_easy_init, aby ste získali ukazovateľ CURL. Ďalej si všimnite niekoľko volaní funkcie curl_easy_setopt. Toto sú nastavenia ukazovateľa pre konkrétnu operáciu. Pre tieto volania sa zadáva ukazovateľ, príkaz a možnosť. Tento príklad najprv používa príkaz CURLOPT_URL na nastavenie adresy URL údajov, ktoré sa majú načítať. Potom nasleduje CURL_WRITEDATA na vytvorenie kontextovej premennej (v našom prípade premennej záznamu o internej chybe). Nakoniec CURLOPT_WRITEFUNCTION špecifikuje funkciu, ktorá sa má volať, keď sú dostupné údaje. Rozhranie API zavolá túto funkciu raz alebo viackrát s údajmi, ktoré načíta po spúšťacom signáli.

Ak chcete spustiť prenos, zavolajte funkciu curl_easy_perform. Jeho úlohou je vykonať prenos s ohľadom na preddefinovanú konfiguráciu. Pri volaní tejto funkcie vráti výsledok až po úspešnom prenose alebo chybe. Posledné prvky main sú určené na odovzdanie vrátených stavov, spustenie čítania stránky a nakoniec vyčistenie pomocou funkcie curl_easy_cleanup (po dokončení operácie).

Teraz sa pozrime na funkciu write_data. Toto je funkcia spätného volania, ktorá sa volá pri prijatí údajov pre konkrétnu operáciu. Upozorňujeme, že keď sa údaje čítajú z webovej stránky, zapíšu sa vám (write_data). Spätné volanie obsahuje vyrovnávaciu pamäť (s pripravenými údajmi), počet prvkov a ich veľkosť (ich súčin udáva celkové množstvo údajov vo vyrovnávacej pamäti) a kontextový ukazovateľ. Prvou úlohou je zabezpečiť, aby vyrovnávacia pamäť (wr_buf) mala dostatočnú kapacitu na zápis dát. V opačnom prípade nastaví kontextový ukazovateľ a vráti nulu, čo znamená, že sa vyskytol problém. V opačnom prípade skopíruje údaje z vyrovnávacej pamäte cURL do vyrovnávacej pamäte a vytvorí index tak, aby ukazoval na ďalšie miesto na zápis. Tento príklad ukončí riadok, aby bolo možné naň neskôr použiť printf. Nakoniec vráti počet bajtov spracovaných do libcurl. To hovorí libcurl, že údaje boli prijaté a môžu byť odstránené. To je všetko – nie je to jednoduchý spôsob, ako načítať súbor z webovej lokality do pamäte?

HTTP klient v Pythone

Táto časť poskytuje príklad podobný klientovi C HTTP, ale tentoraz napísaný v Pythone. Python je užitočný objektovo orientovaný skriptovací jazyk, ktorý je skvelý pre prototypovanie a komerčný softvér. Príklad predpokladá, že máte určité znalosti jazyka Python, ale používa sa veľmi málo, takže nie sú potrebné žiadne pokročilé znalosti.

Kód pre jednoduchého HTTP klienta napísaného v Pythone pomocou pycurl je zobrazený vo výpise 4.

Výpis 4. Python HTTP klient používajúci rozhranie pycurl z libcurl
import sys import pycurl wr_buf = "" def write_data(buf): global wr_buf wr_buf += buf def main(): c = pycurl.Curl() c.setopt(pycurl.URL, "http://www.exampledomain.com ") c.setopt(pycurl.WRITEFUNCTION, write_data) c.perform() c.close() main() sys.stdout.write(wr_buf)
Prototypovanie v Pythone

Toto ilustruje jednu z výhod Pythonu pri vytváraní prototypov. S malým množstvom kódu sa dosiahne pomerne široká škála funkcií. V C môžete dosiahnuť lepší výkon, ale ak je vaším cieľom rýchlo vygenerovať kód na testovanie nápadu, je lepšie použiť skriptovacie jazyky na vysokej úrovni, ako je Python.

Tento kód je oveľa jednoduchší ako verzia C. Začína sa importovaním potrebných modulov (štandardný systémový modul sys a modul pycurl). Ďalej je definovaná zapisovacia vyrovnávacia pamäť (wr_buf). Rovnako ako v programe C deklarujem funkciu write_data. Všimnite si, že táto funkcia má jeden argument: vyrovnávaciu pamäť údajov načítaných z HTTP servera. Jednoducho som vzal túto vyrovnávaciu pamäť a pridal ju do globálnej vyrovnávacej pamäte pre zápis. Hlavná funkcia začína vytvorením ukazovateľa Curl, potom používa metódy setopt a WRITEFUNCTION na určenie adresy URL. Zavolá metódu perform na spustenie prenosu a zatvorí ukazovateľ. Nakoniec zavolá hlavnú funkciu a odošle zapisovaciu vyrovnávaciu pamäť do stdout. Všimnite si, že ukazovateľ kontextovej chyby v tomto prípade nie je potrebný, pretože sa používa zreťazenie reťazcov v Pythone, čo znamená, že nie je potrebné použiť reťazec statickej veľkosti.

Čo bude ďalej

Tento článok iba poškriabe povrch libcurl, vzhľadom na obrovské množstvo protokolov a jazykov podporovaných knižnicou. Dúfajme však, že to ukazuje, aké ľahké je vytvárať aplikácie, ktoré používajú protokoly aplikačnej vrstvy, ako je HTTP. Webová stránka libcurl (pozri sekciu) obsahuje veľké množstvo príkladov a značné množstvo užitočnej dokumentácie. Takže pri ďalšom vývoji webového prehliadača, pavúka alebo inej aplikácie, ktorá vyžaduje protokol na úrovni aplikácie, vyskúšajte libcurl. To určite urýchli proces vývoja a budete si to užívať.

Táto príručka je určená pre tých webových vývojárov, ktorí chcú automatizovať prenos súborov cez sieť alebo pracovať s inými internetovými službami. Aby ste si prečítali túto kapitolu, musíte pochopiť, ako funguje stratégia klient-server, a poznať základy syntaxe PHP.

cURL a libcurl sú knižnice, ktoré umožňujú serveru prenášať súbory na vzdialený počítač pomocou rôznych internetových protokolov. Knižnice sú veľmi flexibilné a umožňujú vykonávať takmer akúkoľvek vzdialenú požiadavku. Pomocou nich môže webový server fungovať ako plnohodnotný klient akejkoľvek služby založenej na protokole HTTP, napríklad: XML-RPC, SOAP alebo WebDAV.

Tento článok sa bude zaoberať tým, čo je cURL, ako ho používať z príkazového riadku a jeho použitie v PHP.

Čo je cURL a libcurl

cURL je skratka pre "Adresy URL klienta". Vyvinul ho Daniel Stenberg v roku 1998 ako nástroj príkazového riadku. Libcurl je prenosná knižnica, ktorá poskytuje jednoduché funkcie API pre cURL. Knižnica je vláknová, kompatibilná s IPv6 a podporuje trvalé pripojenia. Rozhranie php pridal Sterling Hughes.

cURL a libcurl možno použiť na prenos informácií pomocou protokolov ako HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET a FILE. Bola implementovaná podpora pre takmer všetky *nix systémy, ako aj Windows, OS/2, BeOS a niektoré ďalšie.

Knižnica curl je produkt s otvoreným zdrojovým kódom s originálnou licenciou MIT/X, ktorá vám umožňuje používať tento balík na akýkoľvek účel: na komerčné aj nekomerčné účely a zahrnúť ho do svojej distribúcie (aj keď je distribuovaný bez otvoreného zdrojového kódu ).

Prosím pochopte, že cURL nemá nič spoločné s Curl Corporation, ktorá je komerčným výrobcom programovacieho jazyka Curl.

Inštaluje sa cURL

Ak chcete pracovať v PHP verzie 4.2.3 a vyššej, potrebujete verziu cURL nie nižšiu ako 7.9.0. Ak chcete pracovať v PHP verzie 4.3.0 a vyššej, potrebujete verziu cURL nie nižšiu ako 7.9.8.

Windows

Ako každý iný doplnkový modul vyžaduje nainštalovanú distribúciu PHP. Ak chcete nainštalovať cURL, skopírujte súbory php4ts.dll, ssleay32.dll, php_curl.dll, msvcrt.dll z adresára DLL do systémového adresára Windows, zvyčajne to je:

C:\windows\system pre Windows 9x/Me c:\winnt\system32 pre Windows NT/2000 c:\windows\system32 pre Windows XP.

Potom musíte odkomentovať riadok

;extension=php_curl.dll

v súbore php.ini alebo načítajte modul dynamicky počas behu skriptu.

dl("php_curl.dll");
?>

Unix

Najbližšie zrkadlo obsahujúce zdrojové kódy a skompilované binárky pre rôzne operačné systémy nájdete na stránke http://curl.haxx.se/.

Keďže cURL používa na pripojenia SSL knižnicu openssl, najprv je potrebné nastaviť server SSL. Ak sa knižnica openssl nenájde počas inštalácie cURL, cURL sa nainštaluje bez podpory pripojení SSL.

Inštalácia cURL pozostáva z nasledujúcich krokov: ./configure, make, make install.

Potom musíte prebudovať PHP s voľbou --with-curl

Môžete zistiť, či je podpora cURL povolená v php spustením phpinfo().

príklad cURL

Používanie cURL z príkazového riadku je veľmi jednoduché. Nasledujúci príklad požaduje webovú stránku a vytlačí ju na stdout

$ curl -L zend.com

M (možnosť -L umožňuje presmerovania)

Je tiež možné použiť cURL z príkazového riadku pomocou PHP. Nasledujúci príklad vyžaduje 3 strany a zobrazuje ich na obrazovke

$var = echo shell_exec ( "/usr/bin/curl -L http://www.zend.com http://zend.com/developers.php http://zend.com/zend/tut/");
?>

Príklad použitia cURL v PHP

Použitie libcurl v skripte PHP je pomerne jednoduché, najmä pre operácie, ako je generovanie požiadaviek POST.

Ak chcete použiť libcurl, musíte postupovať podľa týchto krokov:

  • Inicializujte reláciu cURL
  • Nainštalujte možnosti cURL (na poradí, v akom sú nainštalované, nezáleží)
  • Vykonať žiadosť
  • Ukončite reláciu cURL

Aby sme demonštrovali vyššie uvedené, poskytneme praktické príklady použitia cURL na generovanie požiadavky POST, autorizácie HTTP a relácie FTP.

// Vyhľadajte knihy na serveri amazon.com
$url = "http://www.amazon.com/exec/obidos/search-handle-form/002-5640957-2809605";
$ch = curl_init();
// nastavenie adresy URL, na ktorú sa má príspevok uverejňovať
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //povoliť presmerovania
// návrat do premennej
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // vyprší čas po 4s
curl_setopt($ch, CURLOPT_POST, 1); // nastavenie metódy POST
curl_setopt ($ch, CURLOPT_POSTFIELDS, "url=index%3Dbooks&field-keywords=PHP+MYSQL"); // pridanie polí POST
$vysledok = curl_exec($ch); // spustiť celý proces
curl_close($ch);
echo $vysledok ;
?>

// HTTP autentifikácia
$url = "http://www.example.com/protected/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "mojepouzivatelske meno:mojeheslo");
$vysledok = curl_exec($ch);
curl_close($ch);
echo $vysledok ;
?>

// FTP tento skript na server
$fp = fopen(__FILE__, "r");
$url = "ftp://username: [e-mail chránený]:21/cesta/k/novemusuboru.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt ($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_FTPASCII, 1);
curl_setopt($ch, CURLOPT_INFILESIZE, veľkosť súboru (__FILE__));
$vysledok = curl_exec($ch);
curl_close($ch);
?>

Ak máte problémy s používaním cURL, musíte pred volaním curl_close pridať nasledujúce riadky, aby ste získali správu o poslednej požiadavke:

print_r(curl_getinfo($ch));
echo "\n\ncčíslo chyby URL:" . curl_errno($ch);
echo "\n\ncchyba URL:" . curl_error($ch);
// ...zatvorte rukoväť cURL ($ch) nižšie
?>

Rozhodnutie, či použiť cURL alebo libcurl, by sa malo urobiť v závislosti od okolností. Ak píšete skript spúšťaný z príkazového riadku alebo váš poskytovateľ nepodporuje libcurl, má zmysel použiť cURL. V iných prípadoch sa používanie libcurl ukazuje ako pohodlnejšie.




Ak máte ďalšie otázky alebo vám niečo nie je jasné, vitajte u nás