PHP CURL - funkce a příklady použití. Pokročilé použití cURL v možnostech příkazového řádku PHP Curl

(PHP 4 >= 4.0.2, PHP 5, PHP 7)

curl_setopt — Nastavuje parametr pro relaci CURL

Seznam parametrů

popisovač cURL získaný z curl_init().

Parametr k nastavení CURLOPT_XXX.

Hodnota parametru opce.

bool:

Parametr Poznámky
CURLOPT_AUTOREFERER SKUTEČNÝ pro automatické nastavení v terénu Referrer: v požadavcích přesměrovaných hlavičkou Umístění:.
CURLOPT_BINARYTRANSFER SKUTEČNÝ vrátit nezpracovanou odezvu při použití konstanty CURLOPT_RETURNTRANSFER. Od PHP 5.1.3 již tato možnost není vyžadována: při použití této možnosti je vždy vrácen nezpracovaný výstup CURLOPT_RETURNTRANSFER.
CURLOPT_COOKIESESSION SKUTEČNÝ aby dal aktuální relaci pokyn ke spuštění nové „relace“ souborů cookie. To způsobí, že libcurl bude ignorovat všechny soubory cookie „relace“, které by měl načíst z předchozí relace. Ve výchozím nastavení libcurl vždy ukládá a načítá všechny soubory cookie, bez ohledu na to, zda jsou „session“ nebo ne. Soubory cookie „relace“ jsou soubory cookie, jejichž platnost nevyprší a musí existovat pouze pro aktuální „relaci“.
CURLOPT_CERTINFO SKUTEČNÝ pro výstup informací o certifikátu SSL do streamu STDERR se zabezpečeným připojením. Přidáno v cURL 7.19.1. Dostupné od PHP 5.3.2. Pro správnou funkci vyžaduje povolení této možnosti CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY SKUTEČNÝříká knihovně, aby provedla nezbytnou proxy autentizaci a nastavení připojení, ale nepřenáší data. Tato možnost je implementována pro HTTP, SMTP a POP3. Přidáno 7.15.2. Dostupné od PHP 5.5.0.
CURLOPT_CRLF SKUTEČNÝ převést konce řádků Unix na CRLF.
CURLOPT_DNS_USE_GLOBAL_CACHE SKUTEČNÝ používat globální mezipaměť DNS. Tato možnost není bezpečná pro vlákna a je ve výchozím nastavení povolena.
CURLOPT_FAILONERROR SKUTEČNÝ pro podrobnou zprávu o selhání, pokud je přijatý kód HTTP větší nebo roven 400. Výchozí chování vrátí stránku jako normální, kód ignoruje.
CURLOPT_FILETIME SKUTEČNÝ pokusit se získat datum změny vzdáleného dokumentu. Tuto hodnotu lze získat pomocí parametru CURLINFO_FILETIME z funkce curl_getinfo().
CURLOPT_FOLLOWLOCATION SKUTEČNÝ sledovat jakýkoli nadpis "Umístění:" odeslané serverem ve své odpovědi (všimněte si, že se to děje rekurzivně, PHP bude následovat všechny odeslané hlavičky "Umístění:", kromě případů, kdy je nastavena konstanta CURLOPT_MAXREDIRS).
CURLOPT_FORBID_REUSE SKUTEČNÝ vynutit uzavření připojení po dokončení jeho zpracování, aby jej nebylo možné znovu použít.
CURLOPT_FRESH_CONNECT SKUTEČNÝ vynutit použití nového připojení místo připojení uloženého v mezipaměti.
CURLOPT_FTP_USE_EPRT SKUTEČNÝ používat EPRT (a LPRT) pro aktivní odesílání FTP. Použití NEPRAVDIVÉ za účelem deaktivace EPRT a LPRT a použití pouze PORT.
CURLOPT_FTP_USE_EPSV SKUTEČNÝ pro počáteční testování příkazu EPSV během přenosů FTP. Pokud příkaz selže, přejde zpět na PASV. Instalovat v NEPRAVDIVÉ zakázat EPSV.
CURLOPT_FTP_CREATE_MISSING_DIRS SKUTEČNÝ k vytvoření chybějících adresářů, pokud operace FTP narazí na neexistující cestu.
CURLOPT_FTPAPPEND SKUTEČNÝ k zapsání vzdáleného souboru na konec, místo jeho přepsání přes existující soubor.
CURLOPT_TCP_NODELAY Trvale určuje, zda má být nastavena nebo vymazána volba TCP_NODELAY (1 = nastaveno, 0 = vymazáno). Ve výchozím nastavení je tato možnost vymazána. Dostupné od PHP 5.2.1 pro verze vytvořené s libcurl 7.11.2 nebo novější.
CURLOPT_FTPASCII Přezdívka CURLOPT_TRANSFERTEXT. Místo toho použijte toto.
CURLOPT_FTPLISTONLY SKUTEČNÝ vrátit pouze seznam jmen z adresáře FTP.
CURLOPT_HEADER SKUTEČNÝ k zahrnutí záhlaví do výstupu.
CURLINFO_HEADER_OUT SKUTEČNÝ sledovat řetězec dotazu handle. Dostupné od PHP 5.1.3. Předpona CURLINFO_ používá konkrétně.
CURLOPT_HTTPGET SKUTEČNÝ k resetování metody požadavku HTTP na metodu GET. Protože GET je výchozí nastavení, je tento parametr potřeba pouze v případě, že byla dříve změněna metoda požadavku.
CURLOPT_HTTPPROXYTUNNEL SKUTEČNÝ k tunelování přes zadaný HTTP proxy.
CURLOPT_MUTE SKUTEČNÝ pro úplné zakázání zpráv funkce cURL. Odstraněno v cURL 7.15.5 (lze použít možnost CURLOPT_RETURNTRANSFER)
CURLOPT_NETRC SKUTEČNÝ k načtení souboru ~/.netrc pro přihlašovací jméno a heslo pro vzdálený web, se kterým se navazuje spojení.
CURLOPT_NOBODY SKUTEČNÝ k vyloučení těla odpovědi z výstupu. Metoda požadavku je nastavena na HEAD. Změna tohoto nastavení na NEPRAVDIVÉ nezmění to zpět na GET.
CURLOPT_NOPROGRESS

SKUTEČNÝ pro deaktivaci indikátoru průběhu přenosu cURL.

Komentář:

PHP automaticky nastaví tento parametr na SKUTEČNÝ, změňte jej pouze pro účely ladění.

CURLOPT_NOSIGNAL SKUTEČNÝ ignorovat jakoukoli funkci cURL, která odesílá signály do procesu PHP. Tato možnost je ve výchozím nastavení povolena ve vícevláknových SAPI, aby parametry časového limitu fungovaly správně.
CURLOPT_POST SKUTEČNÝ používat běžný HTTP POST. Tato metoda POST používá normální , běžně používané ve formulářích HTML.
CURLOPT_PUT SKUTEČNÝ ke stažení souboru pomocí metody HTTP PUT. Použitý soubor je nutné nastavit pomocí voleb CURLOPT_INFILE A CURLOPT_INFILESIZE.
CURLOPT_RETURNTRANSFER SKUTEČNÝ vrátit výsledek přenosu jako řetězec z curl_exec() místo přímého výstupu do prohlížeče.
CURLOPT_SAFE_UPLOAD SKUTEČNÝ zakázat podporu prefixů @ pro stažené soubory v CURLOPT_POSTFIELDS, což znamená, že hodnoty předané s @ lze bezpečně přenášet jako pole. Místo předpony můžete použít volbu CURLFile d. Přidáno v PHP 5.5.0 s výchozí hodnotou NEPRAVDIVÉ. V PHP 5.6.0 se standardně rovnal SKUTEČNÝ.
CURLOPT_SSL_VERIFYPEER NEPRAVDIVÉ zakázat cURL v kontrole hostitelského certifikátu. Alternativní certifikáty k ověření lze zadat pomocí parametru CURLOPT_CAINFO nebo adresář s certifikáty určený parametrem CURLOPT_CAPATH. Výchozí je SKUTEČNÝ od cURL verze 7.10. Výchozí distribuce se instaluje od cURL verze 7.10.
CURLOPT_TRANSFERTEXT SKUTEČNÝ pro použití režimu ASCII pro přenosy FTP. Při použití LDAP jsou data vrácena jako prostý text namísto HTML. V systémech Windows vlákno STDOUT se nenastaví do binárního režimu.
CURLOPT_UNRESTRICTED_AUTH SKUTEČNÝ pokračovat v odesílání přihlašovacího jména a hesla během přesměrování (při použití CURLOPT_FOLLOWLOCATION), i když se změní název hostitele.
CURLOPT_UPLOAD SKUTEČNÝ pro přípravu na nahrání souboru na server.
CURLOPT_VERBOSE SKUTEČNÝ pro zobrazení dalších informací. Zapíše výstup do streamu STDERR, nebo soubor určený parametrem CURLOPT_STDERR.

U následujících hodnot parametru volby musí být parametr value typu celé číslo:

Parametr Nastavte hodnotu hodnoty Poznámky
CURLOPT_BUFFERSIZE Velikost vyrovnávací paměti použité pro každé čtení. Neexistuje však žádná záruka, že tento požadavek bude dokončen. Přidáno v cURL 7.10.
CURLOPT_CLOSEPOLICY Jedna z konstant CURLCLOSEPOLICY_*.

Komentář:

Tato možnost je zastaralá, protože nebyla nikdy implementována v cURL a nefungovala.

Odstraněno v PHP 5.6.0.
CURLOPT_CONNECTTIMEOUT Počet sekund čekání při pokusu o připojení. Chcete-li čekat neomezeně, použijte 0.
CURLOPT_CONNECTTIMEOUT_MS Počet milisekund, které se mají čekat při pokusu o připojení. Chcete-li čekat neomezeně, použijte 0. Pokud je libcurl zkompilován pomocí systémového standardního překladače názvů, pak připojení bude stále používat celou sekundu čekání jako časový limit, s minimálním povoleným časovým limitem 1 sekunda. Přidáno ve verzi cURL 7.16.2. Dostupné od PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT Počet sekund, po které jsou záznamy DNS uloženy v paměti. Ve výchozím nastavení je tento parametr 120 (2 minuty).
CURLOPT_FTPSSLAUTH Metoda ověřování FTP (v aktivním režimu): CURLFTPAUTH_SSL(nejprve se kontroluje SSL), CURLFTPAUTH_TLS(nejprve zkontrolováno TLS) popř CURLFTPAUTH_DEFAULT(cURL se rozhodne samo). Přidáno ve verzi cURL 7.12.2.
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (ve výchozím nastavení CURL vybere, kterou verzi použít), CURL_HTTP_VERSION_1_0 (vynutit HTTP/1.0) nebo CURL_HTTP_VERSION_1_1 (vynutit HTTP/1.1).
CURLOPT_HTTPAUTH

Můžete použít bitový operátor | (nebo) kombinovat několik metod dohromady. V tomto případě cURL požádá server o podporované metody autorizace a vybere tu nejlepší.

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čekávaná velikost souboru v bajtech při nahrávání souboru na vzdálený server. Upozorňujeme, že použití této možnosti nezastaví odesílání dalších dat nad tuto hodnotu, protože odeslaná data závisí na výsledku CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT Horní práh rychlosti přenosu dat v bajtech za sekundu. Ověření probíhá uvnitř CURLOPT_LOW_SPEED_TIME sekund, po kterých PHP považuje přenos za příliš pomalý a přeruší jej.
CURLOPT_LOW_SPEED_TIME Maximální počet sekund, během kterých nesmí přenosová rychlost překročit CURLOPT_LOW_SPEED_LIMIT, jinak PHP označí přenos jako příliš pomalý a zastaví ho.
CURLOPT_MAXCONNECTS Maximální počet trvalých připojení. Po dosažení limitu se parametr používá k určení, které připojení se má uzavřít. CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS Maximální počet přijatých přesměrování. Použijte tuto možnost společně s možností CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Alternativní připojovací port.
CURLOPT_POSTREDIR Bitová maska ​​obsahující 1 (301 trvale přesunuto), 2 (302 nalezeno) a 4 (303 viz jiné), která určuje, zda má být zpracována metoda HTTP POST, když je tato možnost povolena CURLOPT_FOLLOWLOCATION pokud došlo k zadanému typu přesměrování. Přidáno v cURL 7.19.1. K dispozici od PHP 5.3.2.
CURLOPT_PROTOCOLS

Bitová maska ​​hodnot CURLPROTO_*. Tato maska ​​omezuje protokoly používané libcurl. To vám umožní pracovat s libcurl s velkým počtem protokolů a omezit provoz určitých přenosů pouze na jejich podmnožinu. Ve výchozím nastavení používá libcurl všechny podporované protokoly. Viz také parametr CURLOPT_REDIR_PROTOCOLS.

Správné hodnoty protokolu: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAPS, CURLPROTO_TOALLTFPURL, CURLCURLPROTO_TOALLTPURL

CURLOPT_PROXYAUTH Metody autorizace HTTP používané při připojování k serveru proxy. Použijte stejné bitové masky, které byly popsány pro parametr CURLOPT_HTTPAUTH. V současné době jsou pro autorizaci proxy podporovány pouze CURLAUTH_BASIC a CURLAUTH_NTLM. Přidáno ve verzi cURL 7.10.7.
CURLOPT_PROXYPORT Číslo portu proxy serveru, ke kterému je navázáno připojení. Toto číslo lze také nastavit pomocí parametru CURLOPT_PROXY.
CURLOPT_PROXYTYPE Buď CURLPROXY_HTTP (výchozí) nebo CURLPROXY_SOCKS5 . Přidáno v cURL 7.10.
CURLOPT_REDIR_PROTOCOLS Bitová maska ​​hodnot CURLPROTO_*. Tato bitová maska ​​omezuje protokoly používané libcurl při přesměrování (s povoleným parametrem CURLOPT_FOLLOWLOCATION). To umožňuje omezit sadu protokolů používaných při přesměrování pro některé přenosy. Ve výchozím nastavení libcurl podporuje všechny protokoly kromě FILE a SCP. Ve verzích před 7.19.4 bylo přesměrování používáno pro všechny protokoly bez výjimky. Viz také popis parametrů CURLOPT_PROTOCOLS pro seznam konstant s hodnotami protokolu. Přidáno ve verzi cURL 7.19.4.
CURLOPT_RESUME_FROM Posun začátku přenosu v bajtech.
CURLOPT_SSL_VERIFYHOST Pomocí 1 zkontrolujte existenci společného jména v certifikátu SSL. Použijte 2 ke kontrole, zda běžný název existuje a také odpovídá zadanému hostiteli. V bojovém prostředí by hodnota tohoto parametru měla být 2 (ve výchozím nastavení). Podpora pro hodnotu 1 byla v cURL 7.28.1 odstraněna
CURLOPT_SSLVERSION Jedna z konstant 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) popř CURL_SSLVERSION_TLSv1_2 (6).
CURLOPT_TIMECONDITION Metoda interpretace parametrů CURLOPT_TIMEVALUE. Pomocí CURL_TIMECOND_IFMODSINCE vrátíte stránku pouze v případě, že se změnila od doby uvedené v parametru CURLOPT_TIMEVALUE. Pokud nebyla stránka upravena, bude vrácen název "304 nezměněno", což znamená, že parametr CURLOPT_HEADER nainstalovaný v SKUTEČNÝ. Pro opačný efekt použijte CURL_TIMECOND_IFUNMODSINCE. Výchozí hodnota je CURL_TIMECOND_IFMODSINCE.
CURLOPT_TIMEOUT Maximální počet sekund povolený pro provádění funkcí cURL.
CURLOPT_TIMEOUT_MS Maximální počet milisekund povolený pro provádění funkcí cURL. Pokud je libcurl vytvořen pomocí normálního překladače názvů systému, pak toto rozpětí připojení bude stále používat časové limity pro zaokrouhlování sekund, přičemž minimální povolený časový limit je jedna sekunda. Přidáno ve verzi cURL 7.16.2. Dostupné od PHP 5.2.3.
CURLOPT_TIMEVALUE Počet sekund od 1. ledna 1970. Tento čas bude použit parametrem CURLOPT_TIMECONDITION. Ve výchozím nastavení se používá parametr CURL_TIMECOND_IFMODSINCE.
CURLOPT_MAX_RECV_SPEED_LARGE Pokud rychlost stahování překročí tuto hodnotu (uvedenou v bajtech za sekundu) v průměru za celý přenos, stahování se pozastaví, aby se udržela průměrná rychlost nižší nebo rovna tomuto parametru. Ve výchozím nastavení není rychlost omezena.
CURLOPT_MAX_SEND_SPEED_LARGE Pokud nahrávání na server překročí tuto hodnotu (uvedenou v bajtech za sekundu) v průměru během celého přenosu, nahrávání se pozastaví, aby se udržela průměrná rychlost nižší nebo rovna tomuto parametru. Ve výchozím nastavení není rychlost omezena. Přidáno ve verzi cURL 7.15.5. Dostupné od PHP 5.4.0.
CURLOPT_SSH_AUTH_TYPES Bitová maska ​​skládající se z jedné nebo více konstant: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Nainstalujte CURLSSH_AUTH_ANY aby si libcurl vybral jeden z nich nezávisle. Přidáno v cURL 7.16.1.
CURLOPT_IPRESOLVE Umožňuje aplikaci vybrat typ adresy IP, se kterou je určen název hostitele. To je nutné, pokud používáte název hostitele, který je odvozen z více než jedné verze adresy IP. Možné hodnoty mohou být CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6 a ve výchozím nastavení CURL_IPRESOLVE_WHATEVER. Přidáno v cURL 7.10.8.

U následujících hodnot parametru volby musí být parametr value typu tětiva:

Parametr Nastavte hodnotu hodnoty Poznámky
CURLOPT_CAINFO Název souboru obsahujícího jeden nebo více certifikátů, proti kterým budou uzly kontrolovány. Tento parametr má smysl pouze při použití ve spojení s CURLOPT_SSL_VERIFYPEER. Vyžaduje absolutní cestu.
CURLOPT_CAPATH Adresář obsahující několik certifikátů CA. Použijte tuto možnost ve spojení s CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Obsah záhlaví "Cookie:", použitý v požadavku HTTP. Upozorňujeme, že více souborů cookie je odděleno středníkem následovaným mezerou (např. ovoce=jablko; barva=červená")
CURLOPT_COOKIEFILE Název souboru obsahujícího soubory cookie. Tento soubor musí být ve formátu Netscape nebo jednoduše hlavičky HTTP zapsané do souboru. Pokud je jako název souboru předán prázdný řetězec, soubory cookie se neuloží, ale jejich zpracování bude stále povoleno.
CURLOPT_COOKIEJAR Název souboru, do kterého budou uloženy všechny interní cookies aktuálního přenosu po zavření handle, například po zavolání curl_close.
CURLOPT_CUSTOMREQUEST

Místo toho byla použita metoda vlastního požadavku "DOSTAT" nebo "HLAVA" při vytváření požadavku HTTP. To je užitečné pro dotazy "VYMAZAT" nebo jiné, vzácnější požadavky HTTP. Správný význam by měla slova jako "DOSTAT", "POŠTA", "PŘIPOJIT" a tak dále; těch. Nezadávejte zde celý řádek požadavku HTTP. Například indikace "ZÍSKAT /index.html HTTP/1.0\r\n\r\n" bude špatně.

Komentář:

Tuto funkci nepoužívejte, dokud si nejste jisti, že server tento typ požadavku podporuje.

CURLOPT_EGDSOCKET Jako CURLOPT_RANDOM_FILE, kromě toho, že název souboru je nastaven na socket Entropy Gathering Daemon.
CURLOPT_ENCODING Obsah záhlaví "Accept-Encoding:". To umožňuje dekódování požadavku. Podporovaná kódování jsou "identita", "vypustit" A "gzip". Pokud je předán prázdný řetězec, "" , je odeslána hlavička obsahující všechny podporované typy kódování. Přidáno v cURL 7.10.
CURLOPT_FTPPORT Hodnota, která bude použita k určení adresy IP pro příkaz FTP "PORT". Příkaz "PORT" sdělí serveru, ke které IP adrese se má připojit. Může to být IP adresa, název hostitele, název síťového rozhraní (v Unixu) nebo jednoduše "-" pro použití výchozí systémové IP adresy.
CURLOPT_INTERFACE Název síťového rozhraní, které se má použít. Může to být název rozhraní, adresa IP nebo název hostitele.
CURLOPT_KEYPASSWD Pro použití soukromého klíče je vyžadováno heslo CURLOPT_SSLKEY nebo CURLOPT_SSH_PRIVATE_KEYFILE. Přidáno v cURL 7.16.1.
CURLOPT_KRB4LEVEL Úroveň zabezpečení KRB4 (Kerberos 4). Každá z následujících hodnot (v pořadí od nejslabší po nejsilnější) je správná: "Průhledná", "bezpečný", "důvěrné", „soukromé“.. Pokud se zadaný řetězec liší od zadaných hodnot, použije se hodnota "soukromý". Nastavení této možnosti na NULA zcela deaktivuje zabezpečení KRB4. V tuto chvíli zabezpečení KRB4 funguje pouze s FTP transakcemi.
CURLOPT_POSTFIELDS Všechna data přenášená v požadavku HTTP POST. Chcete-li přenést soubor, zadejte před název souboru @ a také použijte úplnou cestu k souboru. Typ souboru lze také určit pomocí formátu " ;type=mimetype" za názvem souboru. Tento parametr lze předat jako řetězec zakódovaný v adrese URL, například " para1=val1¶2=val2&...", a ve formě pole, jehož klíče budou názvy polí a hodnoty budou jejich obsahem. Pokud je hodnota pole, záhlaví Typ obsahu bude nastaveno na multipart/form-data. Počínaje PHP 5.2.0 při přenosu souborů s prefixem @ , hodnota musí být pole. Od PHP 5.5.0 prefix @ je zastaralé a soubory lze odesílat pomocí CURLFile. Předpona @ lze deaktivovat a povolit hodnoty začínající na @ nastavením možnosti CURLOPT_SAFE_UPLOAD ve smyslu SKUTEČNÝ.
CURLOPT_PROXY HTTP proxy, přes kterou budou požadavky směrovány.
CURLOPT_PROXYUSERPWD Přihlašovací jméno a heslo napsané ve formuláři ":" , který se používá při připojení přes proxy.
CURLOPT_RANDOM_FILE Název souboru použitý k inicializaci generátoru náhodných čísel pro SSL.
CURLOPT_RANGE Rozsah dat ke stažení ve formátu "X-Y" a buď X nebo Y mohou být vynechány. Protokol HTTP také podporuje přenos více rozsahů oddělených čárkami, jsou uvedeny ve formátu "X-Y,N-M".
CURLOPT_REFERER Obsah záhlaví "Referrer:", který bude použit v požadavku HTTP.
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 Řetězec obsahující 32 hexadecimálních číslic. Řetězec musí být kontrolní součet MD5 veřejného klíče vzdáleného počítače a libcurl resetuje připojení ke vzdálenému hostiteli, dokud se kontrolní součet neshoduje s veřejným klíčem. Tato možnost je pouze pro přenos dat pomocí SCP a SFTP. Přidáno v cURL 7.17.1.
CURLOPT_SSH_PUBLIC_KEYFILE Název souboru pro váš veřejný klíč. Není-li zadán, libcurl se jako výchozí použije soubor $HOME/.ssh/id_dsa.pub, pokud je nastavena proměnná prostředí HOME, a soubor "id_dsa.pub" v aktuálním adresáři, pokud není nastavena proměnná prostředí HOME. Přidáno v cURL 7.16.1.
CURLOPT_SSH_PRIVATE_KEYFILE Název souboru pro váš soukromý klíč. Není-li zadán, libcurl se jako výchozí použije soubor $HOME/.ssh/id_dsa, pokud je nastavena proměnná prostředí HOME, a soubor "id_dsa" v aktuálním adresáři, pokud není nastavena proměnná prostředí HOME. Pokud je soubor chráněn heslem, nastavte heslo pomocí CURLOPT_KEYPASSWD. Přidáno v cURL 7.16.1.
CURLOPT_SSL_CIPHER_LIST Seznam šifer používaných při přenosech SSL. Například, RC4-SHA A TLSv1 jsou platné seznamy šifer.
CURLOPT_SSLCERT Název souboru se správně naformátovaným certifikátem PEM.
CURLOPT_SSLCERTPASSWD Pro použití certifikátu je vyžadováno heslo CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Formát certifikátu. Podporované formáty "PEM"(výchozí), "DER" A "ENG". Přidáno ve verzi cURL 7.9.3.
CURLOPT_SSLENGINE ID šifrovacího stroje pro soukromý klíč SSL zadaný v parametru CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Identifikátor šifrovacího mechanismu používaného pro operace asymetrického šifrování.
CURLOPT_SSLKEY Název souboru soukromého klíče SSL.
CURLOPT_SSLKEYPASSWD

Tajné heslo požadované pro použití soukromého klíče SSL určeného parametrem CURLOPT_SSLKEY.

Komentář:

Protože tento parametr obsahuje cenné heslo, nezapomeňte tento skript PHP uložit na bezpečném místě.

CURLOPT_SSLKEYTYPE Typ soukromého klíče SSL zadaný v parametru CURLOPT_SSLKEY. Podporovány jsou následující typy klíčů: "PEM"(výchozí), "DER" A "ENG".
CURLOPT_URL URL ke stažení. Tento parametr lze také nastavit při inicializaci relace pomocí curl_init().
CURLOPT_USERAGENT Obsah záhlaví "User-Agent: ", odeslané v požadavku HTTP.
CURLOPT_USERPWD Přihlašovací jméno a heslo používané během připojení, zadané ve formátu ":" .

U následujících hodnot parametru volby musí být parametr value pole:

Parametr Nastavte hodnotu hodnoty Poznámky
CURLOPT_HTTP200ALIASES Pole odpovědí HTTP 200, které budou považovány spíše za správné než chybné. Přidáno ve verzi cURL 7.10.3.
CURLOPT_HTTPHEADER Pole nastavených HTTP hlaviček ve formátu pole("Content-type: text/plain", "Content-length: 100")
CURLOPT_POSTQUOTE Pole FTP příkazů spuštěných na serveru po dokončení požadavku FTP.
CURLOPT_QUOTE Pole FTP příkazů spuštěných na serveru před odesláním požadavku FTP.

U následujících hodnot parametru volby musí být parametr value popisovač proudu (vrácený například funkcí fopen()):

Parametr Nastavte hodnotu hodnoty
CURLOPT_FILE Soubor, do kterého bude zapsán výsledek přenosu. Výchozí výstupní proud STDOUT(okno prohlížeče).
CURLOPT_INFILE Soubor, ze kterého mají být načtena data při nahrávání na server.
CURLOPT_STDERR Alternativní chybový výstupní soubor použitý namísto chybového proudu STDERR.
CURLOPT_WRITEHEADER Soubor, do kterého budou zapsány hlavičky aktuální operace.

U následujících hodnot parametru volby musí být parametr value platný název funkce nebo uzávěrka:

Parametr Nastavte hodnotu hodnoty
CURLOPT_HEADERFUNCTION Funkce zpětného volání má dva parametry. První parametr je handle cURL, druhý parametr je řetězec obsahující hlavičky, které se mají zapsat. Záhlaví musí být zapsáno pomocí této funkce zpětného volání. Měl by vrátit počet zapsaných bajtů.
CURLOPT_PASSWDFUNCTION Funkce zpětného volání má tři parametry. První parametr je popisovač cURL, druhý parametr je řetězec výzvy k zadání hesla a třetí parametr je maximální délka hesla. Měl by vrátit řetězec obsahující heslo.
CURLOPT_PROGRESSFUNCTION

Funkce zpětného volání má pět parametrů. První je deskriptor cURL, druhý je celkový počet bajtů očekávaných ke stažení ze serveru, třetí je počet již stažených bajtů, čtvrtý je celkový počet bajtů, které mají být odeslány na server a pátý je počet již odeslaných bajtů.

Komentář:

Funkce zpětného volání je volána pouze v případě možnosti CURLOPT_NOPROGRESS nastavit na hodnotu NEPRAVDIVÉ.

Pro zrušení převodu můžete vrátit nenulovou hodnotu. V tomto případě se zobrazí chyba CURLE_ABORTED_BY_CALLBACK.

CURLOPT_READFUNCTION Funkce zpětného volání má tři parametry. První parametr je handle cURL, druhý parametr je zdroj streamu předaný cURL přes volbu CURLOPT_INFILE a třetím parametrem je maximální povolené množství dat ke čtení. Funkce zpětného volání musí vracet řetězec o délce ne větší než požadované množství dat, obvykle čtením z předávaného zdroje streamování. Měl by vrátit prázdný řetězec, aby signalizoval konec souboru EOF.
CURLOPT_WRITEFUNCTION Funkce zpětného volání má dva parametry. První parametr je handle cURL a druhý parametr je řetězec obsahující data, která mají být zapsána. Pomocí této funkce je nutné ukládat data. Musí vrátit přesný počet zapsaných bajtů, jinak bude stahování přerušeno s chybou.

Další významy:

Návratové hodnoty

Návraty SKUTEČNÝ po úspěšném absolvování popř NEPRAVDIVÉ v případě chyby.

Seznam změn

Verze Popis
5.6.0 Volba CURL_SAFE_UPLOAD nyní má výchozí hodnotu SKUTEČNÝ.
5.6.0 Odebrána možnost CURLOPT_CLOSEPOLICY a související významy.
5.5.0 Zdroj cURL je přidán jako první argument funkce zpětného volání CURLOPT_PROGRESSFUNCTION.
5.5.0 Přidána možnost CURLOPT_SHARE.
5.3.0 Přidána možnost CURLOPT_PROGRESSFUNCTION.
5.2.10 Přidány možnosti CURLOPT_PROTOCOLS A CURLOPT_REDIR_PROTOCOLS.
5.1.0 Přidány možnosti CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH A CURLOPT_TIMECONDITION.
5.0.0 Přidány možnosti CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE A CURLOPT_HTTP200ALIASES.

Příklady

Příklad č. 1 Inicializace relace CURL a načtení webové stránky

// vytvořit nový zdroj cURL
$ch = curl_init();

/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/

$ch = curl_init();

$data = array("name" => "Foo" , "file" => "@/home/user/test.png" );

Curl_setopt($ch, CURLOPT_URL, "http://localhost/upload.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

Curl_exec($ch);
?>

Výsledek spuštění tohoto příkladu:

Pole ( => Foo) Pole ( => Pole ( => test.png => obrázek/png => /tmp/phpcpjNeQ => 0 => 279))

Poznámky

Komentář:

Předání pole do CURLOPT_POSTFIELDS zakóduje data jako multipart/form-data, zatímco předání řetězce zakódovaného URL zakóduje data jako application/x-www-form-urlencoded.

cURL je nástroj, který umožňuje interakci s různými servery a podporuje mnoho protokolů: HTTP, FTP, TELNET atd. cURL je původně nástroj příkazového řádku. Ale naštěstí pro nás PHP podporuje práci s knihovnou cURL. V tomto článku se podíváme na netriviální příklady práce s cURL.

Proč cURL?

Ve skutečnosti existuje mnoho dalších způsobů, jak odeslat požadavek na jiný server, například načíst obsah stránky. Mnoho lidí, většinou z lenosti, místo cURL používá jednoduché funkce PHP:

$obsah = file_get_contents("http://www.example.com"); // nebo $lines = file("http://www.example.com"); // nebo readfile("http://www.example.com");

Neumožňují však efektivní zpracování chyb. Existuje také řada úkonů, které neumí vůbec – například práce s cookies, autorizace, požadavky na odesílání, stahování souborů.

cUrl je výkonný nástroj, který podporuje více protokolů a poskytuje kompletní informace o požadavcích.

Základy cUrl

Než přejdeme ke složitým příkladům, podívejme se na základní strukturu cURL požadavku v PHP. Chcete-li provést požadavek cURL v PHP, musíte provést 4 hlavní kroky:

  1. Inicializace.
  2. Možnosti nastavení.
  3. Vyřízení požadavku.
  4. Čisticí prostředky.
// 1. inicializace $ch = curl_init(); // 2. nastavení možností, včetně URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. provedení požadavku a přijetí odpovědi $output = curl_exec($ch); // 4. čištění zdrojů curl_close($ch);

V tomto článku se většinou podíváme na krok č. 2, protože tam se děje kouzlo. Seznam možností cURL je velmi rozsáhlý, takže dnes nebudeme zvažovat všechny možnosti, ale použijeme ty, které jsou užitečné pro řešení konkrétních problémů.

Sledování chyb

V případě potřeby můžete ke sledování chyb přidat následující řádky:

// ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ...

Upozorňujeme, že místo „==“ používáme „===“, protože Je nutné rozlišovat mezi prázdnou odpovědí serveru a booleovskou hodnotou FALSE, která je vrácena v případě chyby.

Získání informací o požadavku

Dalším volitelným krokem je získání informací o požadavku cURL po jeho provedení.

// ... curl_exec($ch); $info = curl_getinfo($ch); echo "Vzalo". $info["total_time"] . "sekundy pro url". $info["url"]; //...

V důsledku toho obdržíte pole s následujícími informacemi:

  • "url"
  • "typ obsahu"
  • "http_code"
  • "velikost_hlavičky"
  • "velikost_požadavku"
  • "filetime"
  • "ssl_verify_result"
  • "redirect_count"
  • "celkový čas"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "speed_download"
  • "speed_upload"
  • "délka_obsahu ke stažení"
  • "délka_nahrávaného_obsahu"
  • "starttransfer_time"
  • "čas_přesměrování"

Sledování přesměrování v závislosti na prohlížeči

V tomto příkladu napíšeme skript, který bude detekovat přesměrování na základě různých nastavení prohlížeče. Některé stránky například přesměrovávají návštěvníky z mobilních zařízení na návštěvníky z jiných zemí.

Použijeme možnost CURLOPT_HTTPHEADER k nastavení vlastních záhlaví, včetně User-Agent a Language, a uvidíme, kam nás stránky přesměrují.

// URL $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // prohlížeč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 jako Mac OS X; en) AppleWebKit/420+ (KHTML, jako Gecko) Verze/3.0 Mobile/1A537a Safari/419.3", "language" => "en"), "francouzš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 jako $url) ( echo "URL: $url\n"; foreach ($browsers jako $test_name => $browser) ( $ch = curl_init(); // nastavení adresy curl_setopt($ch, CURLOPT_URL , $url); // označte používaný prohlížeč a jazyk curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["jazyk" ]) ")); // nepotřebujeme obsah stránky curl_setopt($ch, CURLOPT_NOBODY, 1); // potřebujeme pouze záhlaví curl_setopt($ch, CURLOPT_HEADER, 1); // místo toho vrátí výsledek jeho výstupu curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // definovat přesměrování v HTTP hlavičkách? if (preg_match("!Umístění: (.*)!" , $output, $matches)) ( echo "$test_name: přesměruje na $matches\n"; ) else ( echo "$test_name: žádné přesměrování\n"; ) ) echo "\n\n"; )

Ve smyčce kontrolujeme prohlížeče pro každou adresu URL. Nejprve nastavíme možnosti pro náš požadavek: URL a prohlížeč a jazyk, který se má testovat.

Protože Nastavili jsme speciální volbu, výsledek požadavku bude obsahovat pouze HTTP hlavičky. Pomocí jednoduchého regulárního výrazu můžeme zkontrolovat, zda odpověď obsahuje řetězec "Location:".

Výsledek spuštění skriptu:

URL: http://www.cnn.com standardní: přesměruje na http://edition.cnn.com/ iphone: přesměruje na http://edition.cnn.com/ Francouzština: přesměruje na http://edition.cnn .com/ URL: http://www.mozilla.com standard: přesměruje na https://www.mozilla.org/firefox/ iphone: přesměruje na https://www.mozilla.org/firefox/ french: přesměruje na https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: přesměruje na https://www.facebook.com/ iphone: přesměruje na http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Francouzština: žádné přesměrování

Odesílání požadavků POST

Při provádění požadavků GET lze data předávat v řetězci dotazu. Když například vyhledáváte na Googlu, váš dotaz je přeložen do adresy URL:

http://www.google.com/search?q=google

K získání výsledku tohoto dotazu nepotřebujete ani cURL, můžete být líní a použít "file_get_contents()".

Některé formuláře HTML však používají metodu POST. V tomto případě jsou data odeslána v těle zprávy požadavku spíše než v samotné URL.

Pojďme napsat skript, který bude odesílat požadavky POST. Nejprve si vytvořte jednoduchý PHP soubor, který bude tyto požadavky přijímat a vracet do něj odeslaná data. Říkejme tomu post_output.php :

$url = "http://localhost/post_output.php"; $post_data = pole ("foo" => "bar", "query" => "FooBar", "action" => "Odeslat"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // vytvoření požadavku POST curl_setopt($ch, CURLOPT_POST, 1); // přidání dat curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $výstup;

Tento skript vypíše:

Pole ( => pruh => FooBar => Odeslat)

Tento skript odeslal požadavek POST do souboru post_output.php. který vypsal obsah pole $_POST a tuto odpověď jsme obdrželi pomocí cURL.

Nahrávání souborů

Stejně jako v předchozím příkladu vytvořte soubor, který bude přijímat požadavky, upload_output.php :

Print_r($_FILES);

A samotný skript, který stahuje soubory:

$url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // soubor k nahrání "upload" => "@/tmp/desert.jpg"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $výstup;

Pokud chcete nahrát soubor, vše, co musíte udělat, je předat k němu cestu, stejně jako normální parametr požadavku POST, s předponou „@“. Výsledek skriptu:

Pole ( => Pole ( => poušť.jpg => aplikace/oktet-stream => /tmp/phpAhEvXy => 0 => 845941))

Více cURL

Jednou z pokročilých funkcí cURL v PHP je schopnost provádět více požadavků současně a asynchronně.

Za normálních podmínek se skript zastaví a čeká na dokončení požadavku. A pokud potřebujete provést mnoho dotazů, může to trvat hodně času, protože... budete provádět postupně. Toto omezení lze obejít:

// vytvoření handlerů $ch1 = curl_init(); $ch2 = curl_init(); // nastavení voleb 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); //vytvoření vícenásobného cURL handle $mh = curl_multi_init(); // přidání handlerů curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $běží = null; // vykonání požadavků do ( curl_multi_exec($mh, $running); ) while ($running > 0); // uvolní zdroje curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

Myšlenka je taková, že můžete vytvořit více úchytů cURL, zkombinovat je do jednoho více úchytu a spouštět je asynchronně.

Nejprve je vše stejné jako u běžného požadavku cURL – vytvoří se deskriptor ( curl_init() ), parametry jsou nastaveny ( curl_setopt() ). Dále je vytvořen multideskriptor ( curl_multi_init() ) a jsou přidány dříve vytvořené běžné deskriptory ( curl_multi_add_handle() ). Místo normálního volání curl_exec() zavoláme curl_multi_exec() tato funkce nás informuje o počtu aktivních spojení pomocí druhého parametru - $running. Cyklus tedy běží, dokud se $running nestane rovným 0. A samozřejmě po dokončení práce je nutné uvolnit zdroje.

V tomto příkladu jednoduše vypíšeme výsledek dotazů do STDOUT. Uvažujme netriviální případ použití multi cURL.

Kontrola externích odkazů ve WordPressu

Představte si blog se spoustou příspěvků obsahujících odkazy na externí stránky. Některé z těchto odkazů nemusí fungovat.

Pojďme napsat skript, který najde všechny nefunkční odkazy a ukáže nám je.

Nejprve musíme stáhnout všechny externí odkazy z databáze:

// CONFIG $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "site"); $max_connections = 10; $url_list = array(); $working_urls = array(); $dead_urls = array(); $not_found_urls = array(); $aktivní = null; // připojení k MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Nelze se připojit: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Mohl not select db: " . mysql_error()); ) // vzít všechny příspěvky s odkazy v textu $q = "VYBRAT post_content FROM wp_posts WHERE 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)) ( // shromáždit všechny odkazy pomocí regulárního výrazu if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($odpovídá $url) ( // odfiltrování nepotřebných domén $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ exclusive_domains)) ( pokračovat; ) // dát dohromady $url_list = $url; ) ) ) // odstranit opakování $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Žádná adresa URL ke kontrole"); )

V této části skriptu jednoduše vytáhneme všechny externí odkazy z databáze. Pojďme je zkontrolovat:

$mh = curl_multi_init(); // 1. přidejte odkazy pro ($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 "==Mrtvé adresy URL==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URL==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Pracovní adresy URL==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. přidá handle s danou URL funkcí add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // pokud jsou ještě odkazy if (isset($url_list[$index])) ( // vše je jako obvykle $ ch = curl_init(); // nastavit možnosti curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // vrátit místo zobrazení výsledku curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // povolit přesměruje curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // získáte pouze záhlaví, abyste ušetřili čas curl_setopt($ch, CURLOPT_NOBODY, 1); // přidejte do víceovládacího prvku curl_multi_add_handle($mh, $ch); $index++; ) )

Podívejme se na kód podrobněji (číslování odpovídá komentářům v kódu):

  1. Aby nedošlo k přetížení systému vlákny, přidáme počáteční počet deskriptorů. Číslo je řízeno proměnnou $max_connections.
  2. Proměnná $curRunning ukládá počet běžících vláken, $running ukládá předchozí hodnotu; pokud se nerovnají, pak jedno z vláken dokončilo práci.
  3. Dostáváme informaci o dokončené žádosti.
  4. Pokud server neodpovídá, odkaz nefunguje.
  5. Odpověď serveru je 404.
  6. Jinak odkaz funguje.
  7. Žádost je dokončena, uvolňujeme zdroje.
  8. Pojďme přidat novou adresu URL do multi deskriptoru.
  9. Funkce add_url_to_multi_handle() přidá nový popisovač s danou URL do multideskriptoru.

Spustíme skript:

Mrtvé adresy URL== xample1234.com/ ==404 URL== www.google.com/dsfasdfafd ==Fungující 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 kodex. 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. Spuštěním 10 vláken současně se výkon zvýší 10krát ve srovnání s běžnými požadavky cURL. Chcete-li získat obsah odpovědi serveru, použijte funkci curl_multi_getcontent($ch) , kde $ch je deskriptor získaný z curl_multi_info_read() .

Další funkce cURL v PHP

HTTP ověřování

Pokud požadavek HTTP vyžaduje ověření, použijte následující kód:

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // odeslání uživatelského jména a hesla curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // pokud jsou povolena přesměrování curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL odešle heslo po přesměrování curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);

Nahrát přes FTP

PHP má vlastní knihovnu pro práci s FTP, ale můžete také použít cURL:

// přečtení souboru $file = fopen("/cesta/k/souboru", "r"); // url již obsahuje potřebné údaje $url = "ftp://username: [e-mail chráněný]:21/cesta/k/novému/souboru"; $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, velikost souboru("/cesta/k/souboru")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch);

Pomocí proxy

Žádosti lze podávat prostřednictvím konkrétního proxy:

$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"); // pokud je vyžadována autorizace curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch);

Funkce zpětného volání

Je možné použít zpětná volání, zatímco požadavek běží, aniž byste čekali na jeho dokončení. Například během stahování odpovědi serveru můžeme použít již přijatá data, aniž bychom čekali na úplné stažení.

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"funkce_progresu"); curl_exec($ch); curl_close($ch); function progress_function($ch,$str) ( echo $str; return strlen($str); )

Funkce zpětného volání musí vrátit délku řetězce, aby požadavek fungoval správně.

Pokaždé, když je přijata další část odpovědi serveru, bude zavoláno zpětné volání.

Závěr

V tomto článku jsme se podívali na pokročilé funkce cURL v PHP. Až budete příště potřebovat požadavky na adresy URL, použijte cURL.

Často musíme stahovat různé soubory z internetu, například soubory spustitelných programů, soubory skriptů, zdrojové archivy. To však není vždy nutné provádět prostřednictvím prohlížeče. V mnoha situacích je mnohem jednodušší provádět všechny akce prostřednictvím terminálu. Protože tímto způsobem můžete proces automatizovat. Na druhou stranu webmasteři musí čas od času testovat dostupnost webu, kontrolovat odeslané a přijaté hlavičky a mnoho dalšího.

Chcete-li vyřešit takové problémy a problémy podobného rozsahu, můžete použít nástroj curl. Umožňuje vám řešit mnohem širší škálu problémů, včetně simulace uživatelských akcí na webu. V tomto článku se podíváme na to, jak používat curl, co to je a proč je tento program potřebný.

Curl je ve skutečnosti více než jen nástroj příkazového řádku pro Linux nebo Windows. Jedná se o sadu knihoven, které implementují základní možnosti práce s URL stránkami a přenos souborů. Knihovna podporuje práci s protokoly: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, dále POP3, IMAP a SMTP. Je skvělý pro simulaci uživatelských akcí na stránkách a dalších operací s URL.

Podpora knihovny curl byla přidána do mnoha různých programovacích jazyků a platforem. Obslužný program curl je nezávislý obal pro tuto knihovnu. Právě na tuto utilitu se zaměříme v tomto článku.

příkaz curl

Než přejdeme k popisu toho, jak lze použít příkaz curl linux, podívejme se na samotný nástroj a jeho hlavní možnosti, které budeme potřebovat. Syntaxe nástroje je velmi jednoduchá:

$ odkaz možnosti curl

Nyní se podívejme na hlavní možnosti:

  • -# - zobrazit jednoduchý ukazatel průběhu během načítání;
  • -0 - použijte protokol http 1.0;
  • -1 - používat šifrovací protokol tlsv1;
  • -2 - použijte sslv2;
  • -3 - použijte sslv3;
  • -4 - používat ipv4;
  • -6 - používat ipv6;
  • -A- uveďte svého USER_AGENT;
  • -b- uložit cookie do souboru;
  • -C- odeslat cookie na server ze souboru;
  • -C- pokračovat ve stahování souboru od bodu přerušení nebo zadaného offsetu;
  • -m- maximální doba čekání na odpověď ze serveru;
  • -d- odesílání dat metodou POST;
  • -D- uložit hlavičky vrácené serverem do souboru;
  • -E- nastavte pole Referer-uri udávající, ze které stránky uživatel přišel;
  • -E- použít externí SSL certifikát;
  • -F- nezobrazovat chybová hlášení;
  • -F- odeslat data ve formě formuláře;
  • -G- pokud je tato volba povolena, pak budou všechna data specifikovaná ve volbě -d přenášena metodou GET;
  • -H- přenos hlaviček na server;
  • -Já- přijímat pouze hlavičku HTTP a ignorovat celý obsah stránky;
  • -j- číst a odesílat soubory cookie ze souboru;
  • -J- odstranit hlavičku z požadavku;
  • -L- přijímat a zpracovávat přesměrování;
  • -s- maximální počet přesměrování pomocí umístění;
  • - výstup obsahu stránky do souboru;
  • - uložit obsah do souboru s názvem stránky nebo souboru na serveru;
  • -p- používat proxy;
  • --proto- uveďte protokol, který má být použit;
  • -R- uložit čas poslední úpravy vzdáleného souboru;
  • -s- zobrazovat minimum informací o chybách;
  • -S- zobrazovat chybová hlášení;
  • -T- nahrát soubor na server;
  • -proti- nejpodrobnější výstup;
  • -y- minimální rychlost stahování;
  • -Y- maximální rychlost stahování;
  • -z- stáhnout soubor pouze v případě, že byl změněn později než zadaný čas;
  • -PROTI- zobrazit verzi.

V žádném případě to nejsou všechny možnosti pro curl linux, ale jsou zde uvedeny základy, které budete muset použít.

Jak používat curl?

Probrali jsme vše, co souvisí s teorií práce s utilitou curl, nyní je čas přejít k praxi a podívat se na příklady příkazu curl.

Nejčastější úkol je tento. Stažení souboru je velmi jednoduché. Chcete-li to provést, stačí předat název souboru nebo html stránku obslužnému programu v parametrech:

curl https://raw.githubusercontent.com/curl/curl/master/README.md

Zde vás ale čeká jedno překvapení: celý obsah souboru bude odeslán na standardní výstup. Chcete-li jej zapsat do libovolného souboru, použijte:

curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md

A pokud chcete, aby se výsledný soubor jmenoval stejně jako soubor na serveru, použijte volbu -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 případě potřeby můžete jedním příkazem stáhnout několik souborů:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Další věc, která může být pro správce užitečná, je stáhnout soubor pouze v případě, že byl změněn:

curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Rychlostní limit

Rychlost stahování můžete omezit na požadovaný limit, abyste nepřetěžovali síť pomocí volby -Y:

curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Zde musíte zadat počet kilobajtů za sekundu, které lze stáhnout. Pokud rychlost nestačí, můžete také ukončit připojení, použijte volbu -Y:

curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md

Přenos souborů

curl -T login.txt ftp://speedtest.tele2.net/upload/

Nebo zkontrolujte, zda je soubor odeslán přes HTTP; na to existuje speciální služba:

curl -T ~/login.txt http://posttestserver.com/post.php

V odpovědi vám obslužný program sdělí, kde můžete stažený soubor najít.

Odesílání dat POST

Metodou POST můžete odesílat nejen soubory, ale i jakákoli data. Připomínám, že tento způsob se používá k odesílání dat různých forem. K odeslání takového požadavku použijte volbu -d. Pro testování použijeme stejnou službu:

curl -d "pole1=val&fileld2=val1"http://posttestserver.com/post.php

Pokud nejste spokojeni s touto možností odeslání, můžete předstírat odeslání formuláře. Existuje možnost -F:

curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php

Zde předáme pole hesla s formulářem jako prostý text, stejným způsobem můžete předat několik parametrů.

Odesílání a přijímání cookies

Cookies používají webové stránky k ukládání určitých informací na straně uživatele. To může být nezbytné například pro autentizaci. Cookies můžete odesílat a přijímat pomocí curl. Chcete-li uložit přijaté soubory cookie do souboru, použijte volbu -c:

curl -c cookie.txt http://posttestserver.com/post.php

Pak můžete poslat cookie curl zpět:

curl -b cookie.txt http://posttestserver.com/post.php

Přenos a analýza hlavičky

Ne vždy nutně potřebujeme obsah stránky. Někdy mohou být zajímavé jen titulky. Chcete-li zobrazit pouze je, existuje možnost -I:

curl -I https://site

A volba -H vám umožňuje odeslat několik nebo více na server, například můžete předat záhlaví If-Modified-Since, takže stránka bude vrácena pouze v případě, že byla změněna:

autentizace curl

Pokud server vyžaduje jeden z běžných typů autentizace, jako je HTTP Basic nebo FTP, pak curl zvládne tento úkol velmi snadno. Chcete-li zadat podrobnosti ověřování, jednoduše je zadejte oddělené dvojtečkou ve volbě -u:

curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

Autentizace na HTTP serverech bude probíhat stejným způsobem.

Pomocí proxy

Pokud potřebujete ke stahování souborů použít proxy server, je to také velmi jednoduché. Stačí zadat adresu proxy serveru ve volbě -x:

curl -x proxysever.test.com:3128 http://google.co.in

závěry

V tomto článku jsme se podívali na to, jak používat curl, proč je tento nástroj potřebný a jeho hlavní možnosti. Navzdory jejich podobnosti jsou velmi odlišné. Příkaz curl linux je navržen spíše pro analýzu a simulaci různých akcí na serveru, zatímco wget je vhodnější pro stahování souborů a procházení stránek.

Tento článek bude hovořit o tak silném nástroji, jako je cURL, a také o knihovně pro PHP, která poskytuje přístup k tomuto nástroji - libcurl. K čemu to všechno je? Chcete-li komunikovat se serverem pomocí protokolů přenosu dat, například http nebo ftp. Zbytek protokolů nás nijak zvlášť nezajímá, pokud se chce někdo do tohoto tématu ponořit hlouběji, bude muset vyhrabat anglicky psané zdroje a základy a příklady použití bude obsahovat tento článek.

Co přesně jsou cURL a libcurl? Obecné body

Knihovna libcurl nám tedy poskytuje možnost přenášet data na server a přijímat od něj odpovědi. Co nám to dává? Schopnost emulovat chování uživatele nebo ! Můžete přijímat obsah stránek pro následnou analýzu, můžete přijímat hlavičky odpovědí služby a programově se přihlašovat na stránky, vytvářet skripty pro odesílání zpráv (například na Twitter nebo na fórech) nebo informací. Vše je omezeno pouze vaší fantazií!

Instalace cURL na Denwer (Denver). Jak začít používat libcurl?

První věc, kterou musíme udělat, je nainstalovat knihovnu. Na svém lokálním počítači používám sestavení Denwer, jako naprostá většina začínajících webmasterů, kterým je článek určen. Zkušení uživatelé, kteří si samostatně nainstalují kombinaci php+apache+mysql, budou moci nainstalovat cURL, není na mně, abych jim vysvětloval, jak se to dělá;) A my, začátečníci, používáme hotová řešení, abychom to usnadnili. Proto nainstalujte libcurl následovně:

  • Stáhněte si hotový rozšiřující balíček „PHP5: dodatečné moduly“.
  • Podle toho jej nainstalujeme. Nic složitého, souhlasím :)
  • Otevřete soubor v programu Poznámkový blok (vždy doporučuji Notepad++): X:/webservers/usr/local/php5/php.ini //kde X je váš disk, na kterém je nainstalován webový server

    a odstraňte středník na začátku pojmů:

    ;přípona=php_curl.dll

  • Restartujeme server Denver.

Připraven. Chcete-li zkontrolovat funkčnost knihovny, můžete zavolat funkci phpinfo() a najít tam řádek: podpora cURL povolena. Gratuluji k prvnímu vítězství.

Popis cURL a první kroky

Chcete-li začít pracovat s nástrojem, je třeba jej inicializovat. To se provádí následovně:

$ch = curl_init();

Použili jsme funkci inicializace relace cURL. V tomto případě můžete adresu URL nastavit hned, takto:

$ch = curl_init("https://site");

A můžete to udělat později v možnostech. Na pořadí, ve kterém jsou doplňky instalovány, nezáleží. To se provádí další funkcí:

Curl_setopt (zdroj ch, možnost řetězce, smíšená hodnota)

První parametr této funkce, tedy resource ch, jsme již vytvořili hned výše, ale existuje spousta parametrů možností a hodnot. Myslím, že byste je sem neměli všechny kopírovat a vkládat, ale stačí dát odkaz na podrobný popis funkce, doufám, že se nikdo neurazí: curl_setopt.

Uvedu příklad možností nastavení pomocí adresy URL jako příklad:

$url = "https://stránka"; curl_setopt($ch, CURLOPT_URL,$url);

Několik dalších příkladů možností nastavení: pojďme získat záhlaví odpovědi serveru, aniž bychom získali samotnou stránku:

Curl_setopt($ch, CURLOPT_HEADER, 1); // přečtení hlavičky curl_setopt($ch, CURLOPT_NOBODY, 1); // čtení POUZE záhlaví bez těla

Takže jsme inicializovali relaci, nastavili parametry, které potřebujeme, nyní provedeme výsledný požadavek, zavřeme relaci a zobrazíme výsledek:

$vysledek = curl_exec($ch); curl_close($ch); echo $výsledek;

Výsledkem je náš první plně funkční příklad použití knihovny libcurl:

$ch = curl_init(); $url = "https://stránka"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // přečtení hlavičky curl_setopt($ch, CURLOPT_NOBODY, 1); // přečte POUZE hlavičku bez těla $result = curl_exec($ch); curl_close($ch); echo $výsledek;

Jak to funguje, je doufám jasné, protože jsme se podívali na každý krok zvlášť :) Výsledkem je, že ze serveru obdržíme hlavičku HTTP odpovědi, kterou určitě analyzujeme níže, abychom lépe porozuměli všem fázím interakce mezi prohlížeč a server:

HTTP/1.1 200 OK Server: nginx/1.2..php 1

Báječný! Obdrželi jsme hlavičku odpovědi ze serveru a otestovali knihovnu v akci. Jak je to pro nás užitečné? Protože nyní si můžete zhruba představit sled akcí při práci s cURL:

  • Inicializovat relaci (curl_init)
  • Nastavte možnosti, které potřebujeme (curl_setopt)
  • Provést přijatý požadavek (curl_exec)
  • Ukončit relaci (curl_close)

Struktura hlavičky HTTP požadavku

Například jsem se obrátil na stránku ya.ru a podíval se na vygenerovaný požadavek prohlížeče a odpověď přijatou ze serveru. Zde jsou:
Žádost
GET / HTTP/1.1 - Snažíme se získat stránku na /, tedy hlavní stránku umístěnou v kořenovém adresáři složky. Používáme protokol verze 1.1.
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 verze/12.14— Představujeme se serveru, jsme prohlížeč Opera.
Host: ya.ru — Název domény požadovaného zdroje.
Přijmout: text/html, aplikace/xml;q=0.9, aplikace/xhtml+xml, obrázek/png, obrázek/webp, obrázek/jpeg, obrázek/gif, obrázek/x-xbitmap, */*;q=0,1— Seznam přijatelných formátů zdrojů.
Accept-Language: ru-RU,ru;q=0,9,en;q=0,8— Seznam podporovaných jazyků.
Accept-Encoding: gzip, deflate— Podporované metody kódování.
Cookie: yandexuid=ХХХХХ - Cookies, pokud je to nutné.
Připojení: Keep-Alive – Prosím nepřerušujte spojení a zůstaňte v kontaktu.
Odpovědět
HTTP/1.1 200 Ok - Obdržíme odpověď s kódem 200, což znamená, že je vše v pořádku.
Server: nginx - Server se představil - toto je nginx.
Datum: Ne, 10. března 2013 14:10:50 GMT— Aktuální datum a čas na serveru.
Content-Typ: text/html; znaková sada=UTF-8— Typ obsahu a kódování.
Připojení: zavřít - Server s námi nechce udržovat trvalé spojení, proto jej okamžitě uzavře. Pro další požadavek bude vytvořeno nové připojení.
Cache-Control: no-cache,no-store,max-age=0,must-revalidate— Správa mezipaměti. V tomto případě je zakázáno.
Vyprší: Ne, 10. března 2013 14:10:50 GMT— Datum očekávaného ukončení relace. V našem případě se shoduje s otevírací dobou, protože ji server okamžitě zavřel, ihned po zpracování.
Poslední změna: Ne, 10. března 2013 14:10:50 GMT— Čas poslední úpravy.
Content-Encoding: gzip — Metoda kódování informací.
Kompletní seznam všech parametrů, které lze nalézt v hlavičce HTTP požadavku, najdete na Wikipedii.
Nyní máte přibližnou představu o tom, jak spolu váš prohlížeč a webový server komunikují. To je velmi užitečné vědět a pochopit, protože se pokusíme emulovat akce prohlížeče pomocí knihovny libcurl. Pokračuj.

Ukázka práce s knihovnou

Věřím, že poté, co jsou některé obecné body již jasné a vše se zdá být jasné, je čas přejít k procvičování a zdokonalování svých dovedností pomocí příkladu. Mě osobně vždy svrbí ruce vše vyzkoušet v praxi :)

Protože cURL je pro analyzátory tak dobré, uvažujme funkci získání kódu stránky podle její adresy. V tomto případě bude výstupem pole s názvem, obsahem stránky a dokonce i kódy chyb, pokud se něco pokazí.

Funkce get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 verze/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // vrátí webovou stránku curl_setopt($ch, CURLOPT_HEADER, 0); // nevrátí záhlaví curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // následuje přesměrování curl_setopt($ch, CURLOPT_ENCODING, ""); // zpracuje všechna kódování curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // uživatelský agent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // vypršení časového limitu připojení curl_setopt($ch, CURLOPT_TIMEOUT, 120); // časový limit odpovědi curl_setopt_MAXIROPT(CURLOPT_URL) , 10); // zastavení po 10. přesměrování $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í parametry:
url — adresa stránky nebo webu.
Hodnoty výstupních parametrů (pole se třemi prvky):
header['errno'] - pokud se něco pokazilo, bude zde kód chyby.
header[‘errmsg’] – zde se objeví chybový text.
header['content'] - skutečná stránka\soubor\obrázek atd.

Funkci použijeme například takto:

$vysledek = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["obsah "]; echo $page; )

Vše by mělo probíhat bez chyb a kód stránky obdržíte v proměnné $page. Pokud se pokusíme získat neexistující stránku yaaaaaaaaaaaa.ru, dostaneme chybu:

Nelze vyřešit hostitele: yaaaaaaaaaaaa.ru; Hostitel nenalezen

Vše je zpracováno správně a krásně :)
Poté si můžete s kódem stránky dělat, co chcete, například jej analyzovat pomocí regulárních výrazů. Ale to je v dalších lekcích vše, ale u tohoto se zatím zastavme.

JavaScript je ve vašem prohlížeči blokován. Povolte prosím JavaScript, aby stránka fungovala!

Kučera

PHP podporuje libcurl, knihovnu vytvořenou Danielem Stenbergem, která umožňuje připojení k různým typům serverů a protokolů.
libcurl aktuálně podporuje protokoly http, https, ftp, gopher, telnet, dict, file a ldap.
libcurl také podporuje HTTPS certifikáty, HTTP POST, HTTP PUT, FTP upload (toto lze provést také pomocí ftp PHP rozšíření), HTTP nahrání na základě formuláře, proxy, cookies a autentizaci uživatele+heslo.

Tyto funkce byly zavedeny v PHP 4.0.2.

curl_init

curl_init - inicializuje relaci CURL.

Popis

zdroj curl_init()

Funkce curl_init() inicializuje novou relaci a vrátí popisovač CURL pro použití ve funkcích a. Pokud je volitelný parametr url je poskytnuta, pak možnost CURLOPT_URL obdrží hodnotu tohoto parametru. Můžete jej nainstalovat ručně pomocí .

curl_setopt

curl_setopt - nastavuje možnosti pro přenos/přenos CURL.

Popis

bool curl_setopt(zdroj ch, možnost řetězce, smíšená hodnota)

Funkce curl_setopt() nastavuje možnosti pro relaci CURL identifikovanou parametrem ch. Parametr volba je možnost, kterou chcete nastavit, a hodnota toto je hodnota opce volba .

Parametr hodnota musí být dlouhé pro následující možnosti (určené parametrem volba):

  • CURLOPT_INFILESIZE: Pokud nahráváte soubor na vzdálený web, měla by se tato možnost použít k tomu, abyste PHP sdělili, jaká bude očekávaná velikost vstupního souboru.
  • CURLOPT_VERBOSE: Nastavte tuto možnost na nenulovou hodnotu, pokud chcete, aby CURL hlásilo všechny akce.
  • CURLOPT_HEADER: Nastavte tuto možnost na nenulovou hodnotu, pokud chcete, aby bylo záhlaví zahrnuto do výstupu.
  • CURLOPT_NOPROGRESS: Nastavte tuto volbu na nenulovou hodnotu, pokud nechcete, aby PHP zobrazovalo indikátor průběhu přenosu CURL. (PHP automaticky nastaví tuto možnost na nenulovou hodnotu; stačí ji změnit pouze při ladění.)
  • CURLOPT_NOBODY: Nastavte tuto možnost na nenulovou hodnotu, pokud nechcete, aby bylo tělo zahrnuto do výstupu.
  • CURLOPT_FAILONERROR: Nastavte tuto volbu na nenulovou hodnotu, pokud chcete, aby se PHP tiše ukončilo, pokud je vrácený kód HTTP větší než 300. Ve výchozím nastavení je stránka vrácena normálně s ignorovaným kódem.
  • CURLOPT_UPLOAD: Nastavte tuto volbu na nenulovou hodnotu, pokud chcete, aby PHP připravilo soubor k nahrání.
  • CURLOPT_POST: Nastavte tuto volbu na nenulovou hodnotu, pokud chcete, aby PHP provádělo běžný HTTP POST. Tento POST je v normální formě application/x-www-form-urlencoded, nejčastěji používaný formuláři HTML.
  • CURLOPT_FTPLISTONLY: Nastavte tuto volbu na nenulovou hodnotu a PHP vypíše názvy adresářů FTP.
  • CURLOPT_FTPAPPEND: Nastavte tuto volbu na nenulovou hodnotu a PHP se ke vzdálenému souboru místo přepsání připojí.
  • CURLOPT_NETRC: Nastavte tuto volbu na nenulovou hodnotu a PHP prohledá váš soubor ~./netrc, aby nalezlo vaše uživatelské jméno a heslo pro vzdálený web, ke kterému se připojujete.
  • CURLOPT_FOLLOWLOCATION: Nastavte tuto volbu na nenulovou hodnotu, aby se řídila libovolnou hlavičkou „Location: “, kterou server odešle jako součást HTTP hlavičky (všimněte si, že se jedná o rekurzi, PHP bude následovat všechna odesílaná „Location: -headers“. )
  • CURLOPT_PUT: Nastavte tuto možnost na nenulovou hodnotu HTTP PUT soubor. Soubor pro PUT musí být nastaven pomocí CURLOPT_INFILE a CURLOPT_INFILESIZE.
  • CURLOPT_MUTE: Nastavte tuto možnost na nenulovou hodnotu a PHP bude pracovat skrytě s ohledem na funkce CURL.
  • CURLOPT_TIMEOUT: Předejte long jako parametr, který obsahuje maximální dobu v sekundách, po kterou povolíte spouštění funkcí CURL.
  • CURLOPT_CONNECTTIMEOUT: Předejte dlouhé jako parametr, který obsahuje maximální dobu v sekundách, po kterou můžete čekat při pokusu o připojení. Použijte 0 k věčnému čekání.
  • CURLOPT_LOW_SPEED_LIMIT: Předejte long jako parametr, který obsahuje přenosovou rychlost v bajtech za sekundu, pod kterou musí přenos během provádění CURLOPT_LOW_SPEED_TIME v sekundách běžet, aby jej PHP považovalo za příliš pomalé a přerušilo jej.
  • CURLOPT_LOW_SPEED_TIME: Předejte long jako parametr, který obsahuje čas v sekundách, pod kterým musí přenos běžet při běhu CURLOPT_LOW_SPEED_LIMIT, aby jej PHP považovalo za příliš pomalé a přerušilo jej.
  • CURLOPT_RESUME_FROM: Pass long jako parametr, který obsahuje bajtový offset, na kterém by měl přenos začít.
  • CURLOPT_SSLVERSION: Předejte délku jako parametr, který obsahuje verzi SSL, která se má použít (2 nebo 3). Ve výchozím nastavení se to PHP pokouší určit samo, i když v některých případech musíte toto nastavit ručně.
  • CURLOPT_SSL_VERIFYHOST: Pokud má CURL zkontrolovat běžný název partnerského certifikátu při navázání spojení SSL, projde dlouho. Hodnota 1 znamená, že bychom měli zkontrolovat existenci společného /běžného názvu, hodnota 2 znamená, že bychom měli zajistit, aby odpovídal zadanému názvu hostitele.
  • CURLOPT_TIMECONDITION: Předání dlouhého parametru, který určuje, jak bude CURLOPT_TIMEVALUE zpracováno. Tento parametr můžete nastavit na TIMECOND_IFMODSINCE nebo TIMECOND_ISUNMODSINCE. Toto funguje pouze pro HTTP.
  • CURLOPT_TIMEVALUE: Předejte dlouhý jako parametr, což je čas v sekundách od 1. ledna 1970. Tento čas se používá tak, jak je určeno volbou CURLOPT_TIMEVALUE, nebo se použije výchozí TIMECOND_IFMODSINCE.
  • CURLOPT_RETURNTRANSFER: Předejte nenulovou hodnotu, pokud chcete, aby CURL přímo vrátila přijaté informace namísto jejich přímého tisku.

Parametr hodnota musí být řetězec pro následující hodnoty parametrů volba :

Následující možnosti očekávají deskriptor souboru, který se získá pomocí funkce fopen() :

  • CURLOPT_FILE: Soubor, kam by měl být umístěn výstup vašeho přenosu, ve výchozím nastavení je STDOUT.
  • CURLOPT_INFILE: Soubor, ze kterého pochází váš vstup pro přenos.
  • CURLOPT_WRITEHEADER: Soubor pro záznam hlavičkové části výstupu.
  • CURLOPT_STDERR: Soubor pro záznam chyb místo stderr.

Parametr hodnota long write_callback (resource ch, string data)( ... return strlen($data);) volba :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

Parametr hodnota by měla být funkcí následujícího tvaru řetězec read_callback (resource ch, resource fd, long length)() pro následující hodnoty parametrů volba :

  • CURLOPT_READFUNCTION: .

curl_exec

curl_exec - provede relaci CURL.

Popis

bool curl_exec(zdroj ch)

Tato funkce by měla být volána poté, co jste inicializovali relaci CURL a všechny možnosti pro tuto relaci již byly nastaveny. Jeho účelem je jednoduše provést předdefinovanou relaci CURL (zadanou v parametru ch).

curl_close

curl_close - zavře relaci CURL.

Popis

prázdnota curl_close(zdroj ch)

Tato funkce zavře relaci CURL a uvolní všechny zdroje. rukojeť CURL ch je také vymazán.

curl_errno

curl_errno - vrací celé číslo obsahující poslední číslo chyby.

Popis

Příklad 1: Inicializace nové relace CURL a načtení webové stránky.
Příklad 2: Použití modulu CURL v PHP k získání example.com
Příklad 3: Kontrola dostupnosti URL pomocí PHP CURL
Příklad 4: Oddělení hlavičky od těla získaného pomocí PHP CURL
Příklad 5: Určení odkazující adresy URL pomocí PHP CURL
problém: curl_setopt($ch,FOLLOW_LOCATION,1); chyba: potíže s open_basedir a safe_mode řešení: funkce již vyvinutá někým řešení n 2: stejná funkce, upravená, pro mě funguje skvěle.= $curl_max_loops) ( $curl_loops = 0; return FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); seznam($hlavička, $data) = explode("\n\n", $data, 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) ( //nelze zpracovat adresu URL pro přesměrování na $curl_loops = 0; vrátit $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["schéma"]) $url["schéma"] = $poslední_url["schéma"]; if (!$url["host"]) $url["host"] = $poslední_url[ "host"]; if (!$url["cesta"]) $url["cesta"] = $posledni_url["cesta"]; $new_url = $url["schéma"] . "://" . $ url["hostitel"] . $url["cesta"] . ($url["dotaz"]?"?".$url["dotaz"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Přesměrování na", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
stačí použít tuto funkci bez de FOLLOW_LOCATION a měla by fungovat. problém byl v tom, že když se dostanete na řádek, kde vracíte data, pokud byl http_code jiný než 301 oe 302, $data má zastaralé informace nebo žádné. takže $debbbb to udělá.
Příklad 6: Analýza souboru cookie z hlavičky pomocí CURL PHP
Někdy nemůžete použít CURLOPT_COOKIEJAR a CURLOPT_COOKIEFILE kvůli nastavení php-settings serveru (Říká se, že pomocí těchto možností můžete získat jakékoli soubory ze serveru). Zde je řešení 1)Nepoužívejte CURLOPT_FOLLOWLOCATION 2)Používejte curl_setopt($ch, CURLOPT_HEADER, 1) 3)Uchopte soubory cookie z hlavičky takto: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4)Nastavte je pomocí curl_setopt($ch, CURLOPT_COOKIE, $cookies);
Příklad 7: Analýza souboru cookie z hlavičky pomocí CURL PHP
Jak již dříve zmínil Jevgen, někdy nemůžeme použít CURLOPT_COOKIEJAR a CURLOPT_COOKIEFILE. Níže je funkce zpětného volání záhlaví, kterou jsem napsal v lednu a která vám umožňuje udržovat soubory cookie mezi požadavky cURL. Soubory cookie se přidávají do $ch během všech požadavků i během přesměrování, takže můžete použijte jej společně s CURLOPT_FOLLOWLOCATION. Zde je kód: function read_header($ch, $string) ( global $location; #keep track of location/redirects global $cookiearr; #store cookies here global $ch; # ^override the function param $ch # to je v pořádku, protože potřebujeme # aktualizovat globální $ch pomocí # nových souborů cookie $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep track of poslední přesměrování $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get the 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 pouze na konci záhlaví foreach ($cookiearr jako $key=>$value) ( ​​​​$cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) return $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Tento kód předpokládá, že $ch použijete znovu, aniž byste jej pokaždé inicializovali (zavolejte curl_init pouze jednou, na začátku). Pokud potřebujete v kterémkoli bodě kódu znovu inicializovat $ch, můžete přistupovat k aktuálně uloženým souborům cookie v $cookiearr a zahrnout je do nového $ch. Tuto funkci jsem napsal dříve, než jsem měl dostatek zkušeností s regulárními výrazy, takže zde nenajdete žádná volání preg_match. Tento kód jsem používal poměrně dlouho a bez problémů jsem se dostal na gmail, yahoo, hotmail, aol atd., kde jsem musel projděte přihlášení a několik stránek, než jsem se dostal k tomu, co jsem hledal.
Příklad 8: Nastavení obslužného programu načítání záhlaví pomocí CURL PHP
Pomocí cURL jsem potřeboval zavolat skript třetí strany, který vracel binární data jako přílohu, abych znovu předal načtená data jako přílohu. Problém byl v tom, že skript třetí strany občas vracel chyby HTTP a chtěl jsem se v takových případech vyhnout předání přílohy s nulovou délkou. Kombinace použití zpětného volání CURLOPT_FAILONERROR a CURLOPT_HEADERFUNCTION pomohla úhledně zpracovat chyby HTTP skriptu třetí strany: funkce curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) ( header($strHeader) ); header("Content-Disposition: attachment; filename="název-souboru.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ódem: " . $intReturnCode; )
Příklad 9. Uložení stránky do souboru a výpočet přenosové rychlosti pomocí 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 "Průměrná rychlost stahování == " . $sAverageSpeedDownload ." 
"; echo "Průměrná rychlost nahrávání == " . $sAverageSpeedUpload ."
"; echo"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
"; curl_close($sh); FClose ($hFile); echo "( Viz soubor "".$sTxtfile."" ve stejné cestě jako hosting." " kam tento skript PHP).
"; }
Příklad 9. Příjem stránky přes SSL připojení (https)
$ch=curl_init("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Zakáže chybu "Problém s certifikátem SSL, ověřte, zda je certifikát CA v pořádku" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Zakáže chybu "SSL: název předmětu certifikátu "hostname.ru" neodpovídá cílovému názvu hostitele "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);
Příklad 10: Použití relací a souborů cookie ve zvlnění
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://web"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//uložení přijatých COOKIE do souboru curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //odeslat na server soubory COOKIE přijaté od něj během autorizace $out=curl_exec($curl);
Příklad 11: Nahrání souboru a vícerozměrné pole v Curl. CURLOPT_POSTFIELDS + CurlFile

Pokud potřebujete odeslat vícerozměrné pole a soubor v požadavku POST, narazíte na neřešitelný problém. Pokud předáte vícerozměrné pole CURLOPT_POSTFIELDS, bude druhá úroveň předána jako řetězec "Array". Pokud převedete pomocí http_build_query, nebudete moci přenést soubor.

Níže je uvedena funkce pro kódování dvourozměrného pole s načítáním souborů pro Curl, která bude fungovat v obou starších verzích PHP 5.3, PHP 5.4 a PHP 5.6.

/** převede vícerozměrné pole na jednorozměrné pomocí komplexních indexů a nahradí @ v předponě CurlFile pro použití v Curl * @param $inputArray * @param řetězec $inputKey * @return pole $requestVars = pole ("id" => array( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); dostaneme: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["jméno"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ funkce convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray jako $klíč => $hodnota ) ( $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, "web"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Příklady aplikací použití Curl