Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
#1 · Zasláno: 23. 3. 2015, 13:24:03
Vie prosím niekto v ľudskej reči opísať, čo to je curl, načo sa používa a ako funguje? Najhoršie je na tom to, že jeden taký potrebný curl som teraz vytvoril a funguje, hoci neviem, na čo to slúži. Dokumentácia v php.net je ako vždy oničom a pravdupovediac som sa z nej nič nedozvedel. Ak by mi niekto napísal o tom nejaký odstavec stručný, bol by som rád
|
||
juriad Profil |
cURL přesně simuluje činnost klienta.
Nastavíš mu na jakou adresu se má připojit, jakým protokolem (HTTP, HTTPS, FTP, SMTP, ...), jakou metodou (v případě HTTP: GET, POST, HEAD, PUT, ...), jak se připojit (proxy), jak se má zachovat ke spojení (znovupoužití, timeouty), jaké zabezpečení se má použít (žádně, SSL, TLS, verze), zda má používat cookies (v připadě HTTP; kam je ukládat, odkud je brát), autorizace (pokud ji HTTP vyžaduje), zpracování výstupu/chyb (vypsat, uložit, přesměrovat při statusu 3xx), vlastní hlavičky (a jejich zkratky), vlastní obsah zprávy (kódování dat a samotná data, soubory k uploadu). Pěkně je to také popsané v manuálové stránce 1: „curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction. curl offers a busload of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer resume, Metalink, and more. As you will see below, the number of features will make your head spin!“ Abys jej mohl použít, musíš znát většinu těchto vlastností; nebo je zkopírovat z nějaké ukázky. Protože toto vše je přesně to, co za tebe dělá prohlížeč při brouzdání webem. Asi by šlo napsat webový prohlížeč, který by používal pro komunikaci po síti jen knihovku cURL. Ale ty typicky chceš jen hodně omezenou podmnožinu. Jaká podmnožina to bude závisí na tom, co chceš v daném prostředí provést. Taková ukázka: Někdy můžeš chtít stáhnout nějakou stránku, ale to musíš provést v několika krocích: 1) napřed request pro získání tokenu v přihlašovacím formuláři 2) pak request pro zadání jména, hesla, tokenu a klíče, který je uložený v souboru 3) po přihlášení jsi přesměrován a cookie s přihlášením se uloží až na druhé stránce, musíš tedy následovat status 3xx. 4) pak stažení cílové stránky Během tohoto procesu musíš někam ukládat cookies. Můžeš se potřebovat připojit přes firemní proxy a může ta stránka běžet na SSL. A také kdykoli může cokoli selhat. Už chápeš, proč funce file_get_contents někdy nestačí? |
||
jefitto44 Profil |
#3 · Zasláno: 23. 3. 2015, 14:10:01
Čiže pomocou curl kvázi môžem simulovať klienta ak dobre rozumiem?
|
||
Juraj Hajdúch Profil |
#4 · Zasláno: 23. 3. 2015, 14:34:20
jefitto44:
Rozumieš správne. |
||
Jan Tvrdík Profil |
#5 · Zasláno: 23. 3. 2015, 17:45:41
juriad:
„Už chápeš, proč funce file_get_contents někdy nestačí?“ To je dost závádějící, přes file_get_contents lze dělat prakticky cokoliv. Akorát je na některé činnosti příliš nízkoúrovňová. |
||
jefitto44 Profil |
#6 · Zasláno: 24. 3. 2015, 08:06:45
Potom trošku nerozumiem jeho zmyslu... :O Veď predsa keď chcem vyskúšať, ako bude vyzerať na klientskej strane, tak si to naklikám v browseri, či?
|
||
juriad Profil |
#7 · Zasláno: 24. 3. 2015, 08:21:32
jefitto44:
Ano, naklikáš si to v prohlížeči, ale co když to klikání chceš automatizovat? Stahovat každý den aktuálni kurzy, výsledkovky. Nebo třeba hodinový upload obrázků z webkamery přes webové rozhraní redakčního systému. |
||
jefitto44 Profil |
Jasne, približne chápem... Čiže pomocou curl si môžem akoby sťahovať zo servera niečo a posielať mu niečo... a samotná curl_exec() by mala mať nejakú návratovú hodnotu? Teraz s tým práve niečo skúšam, ale dajako to nefunguje... vyzerá to takto:
$curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt_array($curl, array( CURLOPT_URL => "urlAdresa", CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $postfields, )); $return = curl_exec($curl); curl_close($curl); return $return; Ako mám prinútiť aby mi to uložilo výsledok curlu do $return a poslalo ďalej? |
||
Keeehi Profil |
#9 · Zasláno: 24. 3. 2015, 15:01:35
jefitto44:
Chceš HTML stránky? Musíš si to zapnout pomocí CURLOPT_RETURNTRANSFER => true
|
||
Juraj Hajdúch Profil |
jefitto44:
1. Ako nahradzujete string "urlAdresa"? 2. Čo obsahuje premenná $postfields? |
||
aDAm Profil |
#11 · Zasláno: 24. 3. 2015, 16:59:11
1. tak že tam předáš hodnoty co chceš?
2. Žeby to obsahovalo hodnoty co chceš poslat postem? |
||
Juraj Hajdúch Profil |
#12 · Zasláno: 24. 3. 2015, 17:06:55
aDAm:
„tak že tam předáš hodnoty co chceš?“ Díky, ale pýtal som sa na spôsob nahradzovania a nie na to, čo tam chcete predať. :) Otázka bola smerovaná na Jeffito44 (post som editoval). |
||
jefitto44 Profil |
#13 · Zasláno: 25. 3. 2015, 07:44:28
No takže takto... :D Už to ide, uvediem dôvody:
Keeehi: „Musíš si to zapnout pomocí CURLOPT_RETURNTRANSFER => true“ Mám to zapnuté na riadku 2: curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $postfields vyzerá asi takto $postfields = array( "kej1" = "valju1", "kej2" = "valju2", ... ); |
||
Časová prodleva: 10 let
|
0