Autor Zpráva
jefitto44
Profil
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
Čiže pomocou curl kvázi môžem simulovať klienta ak dobre rozumiem?
Juraj Hajdúch
Profil
jefitto44:
Rozumieš správne.
Jan Tvrdík
Profil
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
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
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;
Lenže dajako mi to vracia furt error... Ako môžem spraviť, aby to nevrátilo error, ale aby to vrátilo nič, resp. blank site?
Ako mám prinútiť aby mi to uložilo výsledok curlu do $return a poslalo ďalej?
Keeehi
Profil
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
1. tak že tam předáš hodnoty co chceš?
2. Žeby to obsahovalo hodnoty co chceš poslat postem?
Juraj Hajdúch
Profil
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
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); 
urlAdresa samozrejme nie je string, zabudol osm tam dať dolár a práve tu bol problém. Mal som urobený skúšobný skript, ktorý zapisoval do súboru XMLko a zabudol som ho prepísať na serverovú adresu :D
$postfields vyzerá asi takto
$postfields = array(
"kej1" = "valju1",
"kej2" = "valju2",
...
);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: