PHP CURL - funkcije i primjeri korištenja. Napredna upotreba cURL-a u PHP Curl opcijama komandne linije
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Postavlja parametar za CURL sesiju
Lista parametara
cURL ručka dobijena od curl_init().
Parametar koji treba postaviti CURLOPT_XXX.
Vrijednost parametra opcije.
bool:
Parametar | Bilješke | |
---|---|---|
CURLOPT_AUTOREFERER | ISTINITO za automatsko podešavanje na terenu Preporučitelj: u zahtjevima preusmjerenim zaglavljem Lokacija:. | |
CURLOPT_BINARYTRANSFER | ISTINITO za vraćanje sirovog odgovora kada koristite konstantu CURLOPT_RETURNTRANSFER. | Od PHP 5.1.3 ova opcija više nije potrebna: sirovi izlaz se uvijek vraća kada se koristi opcija CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | ISTINITO da biste naložili trenutnoj sesiji da započne novu "sesiju" kolačića. Ovo će uzrokovati da libcurl ignorira sve kolačiće "sesije" koje je trebao učitati iz prethodne sesije. Prema zadanim postavkama, libcurl uvijek sprema i učitava sve kolačiće, bez obzira da li su "session" ili ne. Kolačići "sesije" su kolačići koji ne ističu i moraju postojati samo za trenutnu "sesiju". | |
CURLOPT_CERTINFO | ISTINITO za izlaz informacija o SSL certifikatu za prijenos STDERR sa sigurnim vezama. | Dodato u cURL 7.19.1. Dostupno počevši od PHP 5.3.2. Zahteva da ova opcija bude omogućena za ispravan rad CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | ISTINITO govori biblioteci da izvrši potrebnu proxy autentifikaciju i postavljanje veze, ali ne prenosi podatke. Ova opcija je implementirana za HTTP, SMTP i POP3. | Dodato u 7.15.2. Dostupno od PHP 5.5.0. |
CURLOPT_CRLF | ISTINITO za pretvaranje završetaka Unix linija u CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | ISTINITO za korištenje globalne DNS keš memorije. Ova opcija nije sigurna niti i omogućena je po defaultu. | |
CURLOPT_FAILONERROR | ISTINITO za detaljan izvještaj o neuspjehu ako je primljeni HTTP kod veći od ili jednak 400. Zadano ponašanje vraća stranicu kao normalno, ignorirajući kod. | |
CURLOPT_FILETIME | ISTINITO da pokušate dobiti datum izmjene udaljenog dokumenta. Ova vrijednost se može dobiti pomoću parametra CURLINFO_FILETIME iz funkcije curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | ISTINITO da prati bilo koji naslov "Lokacija: " poslao server u svom odgovoru (imajte na umu da se to dešava rekurzivno, PHP će pratiti sva poslana zaglavlja "Lokacija: ", osim kada je postavljena konstanta CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | ISTINITO da prisilite vezu da se zatvori nakon što je njena obrada završena tako da se ne može ponovo koristiti. | |
CURLOPT_FRESH_CONNECT | ISTINITO da prisilite upotrebu nove veze umjesto keširane. | |
CURLOPT_FTP_USE_EPRT | ISTINITO da koristite EPRT (i LPRT) za aktivno FTP otpremanje. Koristi FALSE kako biste onemogućili EPRT i LPRT i koristili samo PORT. | |
CURLOPT_FTP_USE_EPSV | ISTINITO za početno testiranje EPSV komande tokom FTP transfera. Ako komanda ne uspije, vratit će se na PASV. Instaliraj unutra FALSE da onemogućite EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | ISTINITO za kreiranje direktorija koji nedostaju ako FTP operacija naiđe na nepostojeću stazu. | |
CURLOPT_FTPAPPEND | ISTINITO da zapišete udaljenu datoteku do kraja, umjesto da je prepišete preko postojeće datoteke. | |
CURLOPT_TCP_NODELAY | Trajno specificira da li opciju TCP_NODELAY treba postaviti ili obrisati (1 = postavljeno, 0 = obrisano). Podrazumevano, opcija je obrisana. | Dostupno od PHP 5.2.1 za verzije napravljene sa libcurl 7.11.2 ili novijim. |
CURLOPT_FTPASCII | Nadimak CURLOPT_TRANSFERTEXT. Koristite ovo umjesto toga. | |
CURLOPT_FTPLISTONLY | ISTINITO da vrati samo listu imena iz FTP direktorija. | |
CURLOPT_HEADER | ISTINITO uključiti zaglavlja u izlaz. | |
CURLINFO_HEADER_OUT | ISTINITO za praćenje niza upita. | Dostupno počevši od PHP 5.1.3. Prefiks CURLINFO_ posebno koristio. |
CURLOPT_HTTPGET | ISTINITO da resetujete metodu HTTP zahteva na GET metodu. Budući da je GET default, ovaj parametar je potreban samo ako je metoda zahtjeva prethodno promijenjena. | |
CURLOPT_HTTPPROXYTUNNEL | ISTINITO za tuneliranje kroz specificirani HTTP proxy. | |
CURLOPT_MUTE | ISTINITO da potpuno onemogućite poruke funkcije cURL. | Uklonjeno u cURL 7.15.5 (može se koristiti opcija CURLOPT_RETURNTRANSFER) |
CURLOPT_NETRC | ISTINITO da pročitate ~/.netrc datoteku za prijavu i lozinku za udaljenu lokaciju s kojom se uspostavlja veza. | |
CURLOPT_NOBODY | ISTINITO da isključi tijelo odgovora iz izlaza. Metoda zahtjeva je postavljena na HEAD. Promjena ove postavke u FALSE ne mijenja ga nazad u GET. | |
CURLOPT_NOPROGRESS | ISTINITO da onemogućite indikator napretka na cURL transferima.
|
|
CURLOPT_NOSIGNAL | ISTINITO da ignoriše bilo koju cURL funkciju koja šalje signale PHP procesu. Ova opcija je podrazumevano omogućena u višenitnim SAPI-ovima kako bi se omogućilo da parametri isteka vremena rade ispravno. | |
CURLOPT_POST | ISTINITO da koristite običan HTTP POST. Ova POST metoda koristi normalnu , koji se obično koristi u HTML formama. | |
CURLOPT_PUT | ISTINITO da preuzmete datoteku koristeći HTTP PUT metod. Datoteka koja se koristi mora biti podešena pomoću opcija CURLOPT_INFILE I CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | ISTINITO da vratite rezultat prijenosa kao string iz curl_exec() umjesto direktnog izlaza u pretraživač. | |
CURLOPT_SAFE_UPLOAD | ISTINITO da onemogućite podršku za prefiks @ za preuzete fajlove u CURLOPT_POSTFIELDS, što znači da su vrijednosti proslijeđene sa @ mogu se bezbedno prenositi kao polja. Umjesto prefiksa, možete koristiti opciju CURLFile d. | Dodato u PHP 5.5.0 sa podrazumevanom vrednošću FALSE. U PHP 5.6.0 postao je jednak standardno ISTINITO. |
CURLOPT_SSL_VERIFYPEER | FALSE da zaustavi cURL da provjerava host certifikat. Alternativni certifikati za provjeru mogu se specificirati pomoću parametra CURLOPT_CAINFO ili direktorij s certifikatima specificiranim parametrom CURLOPT_CAPATH. | Podrazumevano je ISTINITO od cURL verzije 7.10. Zadana distribucija je instalirana počevši od cURL verzije 7.10. |
CURLOPT_TRANSFERTEXT | ISTINITO da koristite ASCII mod za FTP transfere. Kada koristite LDAP, podaci se vraćaju u običnom tekstu umjesto u HTML-u. Na Windows sistemima nit STDOUT ne postavlja na binarni način rada. | |
CURLOPT_UNRESTRICTED_AUTH | ISTINITO da nastavite sa slanjem podataka za prijavu i lozinku tokom preusmjeravanja (kada koristite CURLOPT_FOLLOWLOCATION), čak i ako se ime hosta promijeni. | |
CURLOPT_UPLOAD | ISTINITO da se pripremite za učitavanje datoteke na server. | |
CURLOPT_VERBOSE | ISTINITO za prikaz dodatnih informacija. Zapisuje izlaz u tok STDERR, ili datoteku specificiranu parametrom CURLOPT_STDERR. |
Za sljedeće vrijednosti parametara opcije, parametar vrijednosti mora biti tipa cijeli broj:
Parametar | Postavite vrijednost vrijednosti | Bilješke |
---|---|---|
CURLOPT_BUFFERSIZE | Veličina bafera koji se koristi za svako čitanje. Međutim, ne postoji garancija da će ovaj zahtjev biti ispunjen. | Dodato u cURL 7.10. |
CURLOPT_CLOSEPOLICY | Jedna od konstanti CURLCLOSEPOLICY_*.
|
Uklonjeno u PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Broj sekundi za čekanje prilikom pokušaja povezivanja. Koristite 0 da čekate beskonačno. | |
CURLOPT_CONNECTTIMEOUT_MS | Broj milisekundi za čekanje prilikom pokušaja povezivanja. Koristite 0 da čekate beskonačno. Ako se libcurl kompajlira pomoću sistemskog standardnog razrjeđivača imena, tada će veza i dalje koristiti punu sekundu čekanja kao timeout, s minimalnim dozvoljenim timeoutom od 1 sekunde. | Dodato u cURL verziji 7.16.2. Dostupno počevši od PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Broj sekundi koje DNS snima pohranjene u memoriji. Standardno, ovaj parametar je 120 (2 minute). | |
CURLOPT_FTPSSLAUTH | Metoda FTP autentifikacije (u aktivnom načinu): CURLFTPAUTH_SSL(SSL se prvo provjerava), CURLFTPAUTH_TLS(TLS se prvo provjerava) ili CURLFTPAUTH_DEFAULT(cURL odlučuje sam). | Dodato u cURL verziji 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (podrazumevano, CURL bira koju verziju će koristiti), CURL_HTTP_VERSION_1_0 (prisilno HTTP/1.0) ili CURL_HTTP_VERSION_1_1 (prisilno HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Možete koristiti bitni operator | (ili) kombinirati nekoliko metoda zajedno. U ovom slučaju, cURL će ispitati server za podržane metode autorizacije i odabrati najbolji. CURLAUTH_ANY je pseudonim CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE je pseudonim CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Očekivana veličina datoteke, u bajtovima, prilikom učitavanja datoteke na udaljeni server. Imajte na umu da korištenje ove opcije neće zaustaviti daljnje slanje podataka iznad ove vrijednosti, jer podaci koji se šalju zavise od rezultata CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Gornji prag za brzinu prijenosa podataka, u bajtovima u sekundi. Verifikacija se odvija unutar CURLOPT_LOW_SPEED_TIME sekundi, nakon čega PHP smatra da je transfer prespor i prekida ga. | |
CURLOPT_LOW_SPEED_TIME | Maksimalni broj sekundi tokom kojeg brzina prijenosa ne smije biti veća CURLOPT_LOW_SPEED_LIMIT, inače će PHP označiti transfer kao presporo i zaustaviti ga. | |
CURLOPT_MAXCONNECTS | Maksimalan broj trajnih veza. Kada se dostigne ograničenje, parametar se koristi za određivanje veze koju treba zatvoriti. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Maksimalan broj prihvaćenih preusmjeravanja. Koristite ovu opciju zajedno sa opcijom CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Alternativni priključak za povezivanje. | |
CURLOPT_POSTREDIR | Bit maska koja sadrži 1 (301 Trajno premješteno), 2 (302 pronađeno) i 4 (303 Vidi ostalo) za određivanje da li treba obraditi HTTP POST metodu kada je opcija omogućena CURLOPT_FOLLOWLOCATION ako se dogodila navedena vrsta preusmjeravanja. | Dodato u cURL 7.19.1. Dostupno od PHP 5.3.2. |
CURLOPT_PROTOCOLS |
Bit maska vrijednosti CURLPROTO_*. Ova maska ograničava protokole koje koristi libcurl. Ovo vam omogućava da libcurl radi sa velikim brojem protokola i ograničite rad određenih transfera na samo njihov podskup. Podrazumevano, libcurl koristi sve podržane protokole. Vidi također parametar CURLOPT_REDIR_PROTOCOLS. Ispravne vrijednosti protokola: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLCULE PRORLTOPS,DICPROTO_ ROTO_TFTP, CURLPROTO_ALL |
|
CURLOPT_PROXYAUTH | Metode HTTP autorizacije koje se koriste prilikom povezivanja na proxy server. Koristite iste bitne maske koje su opisane za parametar CURLOPT_HTTPAUTH. Trenutno su samo CURLAUTH_BASIC i CURLAUTH_NTLM podržani za proxy autorizaciju. | Dodato u cURL verziji 7.10.7. |
CURLOPT_PROXYPORT | Broj porta proxy servera na koji se uspostavlja veza. Ovaj broj se također može postaviti pomoću parametra CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Ili CURLPROXY_HTTP (podrazumevano) ili CURLPROXY_SOCKS5 . | Dodato u cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Bit maska vrijednosti CURLPROTO_*. Ova bitmaska ograničava protokole koje koristi libcurl prilikom preusmjeravanja (sa uključenim parametrom CURLOPT_FOLLOWLOCATION). Ovo vam omogućava da ograničite skup protokola koji se koriste prilikom preusmjeravanja za neke prijenose. Podrazumevano, libcurl podržava sve protokole osim FILE i SCP. U verzijama prije 7.19.4, preusmjeravanje je korišteno za sve protokole bez izuzetka. Vidi također opis parametara CURLOPT_PROTOCOLS za listu konstanti sa vrijednostima protokola. | Dodato u cURL verziji 7.19.4. |
CURLOPT_RESUME_FROM | Pomak početka prijenosa, u bajtovima. | |
CURLOPT_SSL_VERIFYHOST | Koristite 1 da provjerite postojanje zajedničkog imena u SSL certifikatu. Koristite 2 da provjerite da li zajedničko ime postoji i da se također podudara sa specificiranim hostom. U borbenom okruženju, vrijednost ovog parametra bi trebala biti 2 (podešeno prema zadanim postavkama). | Podrška za vrijednost 1 je uklonjena u cURL 7.28.1 |
CURLOPT_SSLVERSION | Jedna od konstanti 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) ili CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Metoda interpretacije parametara CURLOPT_TIMEVALUE. Koristite CURL_TIMECOND_IFMODSINCE da vratite stranicu samo ako se promijenila od vremena navedenog u parametru CURLOPT_TIMEVALUE. Ako stranica nije izmijenjena, naslov će biti vraćen "304 nije modificirano", što implicira da je parametar CURLOPT_HEADER ugrađen u ISTINITO. Koristite CURL_TIMECOND_IFUNMODSINCE za suprotan efekat. Zadana vrijednost je CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | Maksimalan broj sekundi dozvoljen za izvršavanje cURL funkcija. | |
CURLOPT_TIMEOUT_MS | Maksimalan broj milisekundi dozvoljen za izvršavanje cURL funkcija. Ako je libcurl napravljen korištenjem normalnog razrjeđivača imena sistema, tada će ovaj raspon veze i dalje koristiti vremenska ograničenja drugog zaokruživanja, sa minimalnim dozvoljenim timeoutom od jedne sekunde. | Dodato u cURL verziji 7.16.2. Dostupno počevši od PHP 5.2.3. |
CURLOPT_TIMEVALUE | Broj sekundi od 1. januara 1970. Ovo vrijeme će koristiti parametar CURLOPT_TIMECONDITION. Po defaultu se koristi parametar CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Ako brzina preuzimanja premaši ovu vrijednost (navedenu u bajtovima u sekundi) u prosjeku tokom cijelog prijenosa, preuzimanje će biti pauzirano kako bi se održala prosječna brzina manja ili jednaka ovom parametru. Podrazumevano, brzina nije ograničena. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Ako otpremanje na server premaši ovu vrijednost (navedenu u bajtovima u sekundi) u prosjeku tokom cijelog prijenosa, otpremanje će biti pauzirano kako bi se održala prosječna brzina manja ili jednaka ovom parametru. Podrazumevano, brzina nije ograničena. | Dodato u cURL verziji 7.15.5. Dostupno počevši od PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Bitmaska koja se sastoji od jedne ili više konstanti: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Instaliraj CURLSSH_AUTH_ANY kako bi libcurl samostalno izabrao jedan od njih. | Dodato u cURL 7.16.1. |
CURLOPT_IPRESOLVE | Dozvoljava aplikaciji da odabere tip IP adrese s kojom je određeno ime hosta. Ovo je neophodno ako koristite ime hosta koje je izvedeno iz više od jedne verzije IP adrese. Moguće vrijednosti mogu biti CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, i po defaultu CURL_IPRESOLVE_WHATEVER. | Dodato u cURL 7.10.8. |
Za sljedeće vrijednosti parametara opcije, parametar vrijednosti mora biti tipa string:
Parametar | Postavite vrijednost vrijednosti | Bilješke |
---|---|---|
CURLOPT_CAINFO | Ime datoteke koja sadrži jedan ili više certifikata prema kojima će se čvorovi provjeravati. Ovaj parametar ima smisla samo kada se koristi u kombinaciji sa CURLOPT_SSL_VERIFYPEER. | Zahtijeva apsolutnu putanju. |
CURLOPT_CAPATH | Direktorij koji sadrži nekoliko CA certifikata. Koristite ovu opciju u kombinaciji sa CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Sadržaj zaglavlja "Kolačić:", koji se koristi u HTTP zahtjevu. Imajte na umu da je više kolačića odvojeno tačkom i zarezom nakon čega slijedi razmak (na primjer, " voće=jabuka; boja=crvena") | |
CURLOPT_COOKIEFILE | Naziv datoteke koja sadrži kolačiće. Ova datoteka mora biti u Netscape formatu ili jednostavno HTTP zaglavlja upisana u datoteku. Ako je kao ime datoteke proslijeđen prazan niz, kolačići neće biti spremljeni, ali će njihova obrada i dalje biti omogućena. | |
CURLOPT_COOKIEJAR | Ime datoteke u kojoj će biti sačuvani svi interni kolačići trenutnog prijenosa nakon zatvaranja ručke, na primjer nakon poziva curl_close. | |
CURLOPT_CUSTOMREQUEST | Umjesto toga se koristi metoda prilagođenog zahtjeva "UZMI" ili "GLAVA" prilikom postavljanja HTTP zahtjeva. Ovo je korisno za upite "IZBRIŠI" ili druge, rijeđe HTTP zahtjeve. Tačna značenja bila bi riječi poput "UZMI", "POŠTA", "POVEŽI" i tako dalje; one. Ovdje nemojte unositi cijeli red HTTP zahtjeva. Na primjer, indikacija "GET /index.html HTTP/1.0\r\n\r\n" biće pogrešno.
|
|
CURLOPT_EGDSOCKET | Sviđa mi se CURLOPT_RANDOM_FILE, osim što je ime datoteke postavljeno na utičnicu Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Sadržaj zaglavlja "Prihvati kodiranje: ". Ovo omogućava dekodiranje zahtjeva. Podržana kodiranja su "identitet", "ispuhati" I "gzip". Ako je proslijeđen prazan niz, "" , šalje se zaglavlje koje sadrži sve podržane tipove kodiranja. | Dodato u cURL 7.10. |
CURLOPT_FTPPORT | Vrijednost koja će se koristiti za određivanje IP adrese za FTP "PORT" naredbu. Komanda "PORT" govori serveru na koju IP adresu treba da se poveže. Ovo može biti IP adresa, ime hosta, ime mrežnog interfejsa (pod Unix-om) ili jednostavno "-" za korištenje zadane sistemske IP adrese. | |
CURLOPT_INTERFACE | Naziv mrežnog sučelja za korištenje. Može biti ime interfejsa, IP adresa ili ime hosta. | |
CURLOPT_KEYPASSWD | Lozinka je potrebna za korištenje privatnog ključa CURLOPT_SSLKEY ili CURLOPT_SSH_PRIVATE_KEYFILE. | Dodato u cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Sigurnosni nivo KRB4 (Kerberos 4). Bilo koja od sljedećih vrijednosti (redom od najslabije do najjače) je tačna: "jasno", "sigurno", "povjerljivo", "privatno".. Ako se navedeni niz razlikuje od datih vrijednosti, vrijednost će se koristiti "privatno". Postavljanje ove opcije na NULLće u potpunosti onemogućiti sigurnost KRB4. U ovom trenutku, KRB4 sigurnost radi samo sa FTP transakcijama. | |
CURLOPT_POSTFIELDS | Svi podaci preneseni u HTTP POST zahtjevu. Da biste prenijeli datoteku, navedite prije imena datoteke @ , a također koristite punu putanju do datoteke. Tip datoteke se također može odrediti korištenjem formata " ;type=mimetype" nakon naziva datoteke. Ovaj parametar se može proslijediti kao url kodirani niz, kao " para1=val1¶2=val2&...", i to u obliku niza, čiji će ključevi biti imena polja, a vrijednosti njihov sadržaj. Ako je vrijednost niz, zaglavlje Content-Typeće biti postavljeno na multipart/form-data. Počevši od PHP 5.2.0, kada prenosite fajlove sa prefiksom @ , vrijednost mora biti niz. Od PHP 5.5.0, prefiks @ je zastarjelo i datoteke se mogu slati koristeći CURLFile. Prefiks @ može se onemogućiti kako bi se omogućile vrijednosti koje počinju sa @ postavljanjem opcije CURLOPT_SAFE_UPLOAD u značenju ISTINITO. | |
CURLOPT_PROXY | HTTP proxy preko kojeg će se zahtjevi usmjeravati. | |
CURLOPT_PROXYUSERPWD | Login i lozinka upisani u formular ":" , koristi se pri povezivanju preko proxyja. | |
CURLOPT_RANDOM_FILE | Ime datoteke koja se koristi za inicijalizaciju generatora slučajnih brojeva za SSL. | |
CURLOPT_RANGE | Raspon podataka za preuzimanje, u formatu "X-Y", a X ili Y se mogu izostaviti. HTTP protokol također podržava prijenos više raspona odvojenih zarezima, oni su navedeni u formatu "X-Y,N-M". | |
CURLOPT_REFERER | Sadržaj zaglavlja "Preporučilac:", koji će se koristiti u HTTP zahtjevu. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Niz koji sadrži 32 heksadecimalne cifre. Niz mora biti MD5 kontrolni zbir javnog ključa udaljenog računara, a libcurl će resetovati vezu sa udaljenim hostom sve dok se kontrolni zbir ne poklopi sa javnim ključem. Ova opcija je samo za prijenos podataka koristeći SCP i SFTP. | Dodato u cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Ime datoteke za vaš javni ključ. Ako nije navedeno, libcurl podrazumevano postavlja datoteku $HOME/.ssh/id_dsa.pub ako je varijabla okruženja HOME postavljena i datoteku "id_dsa.pub" u trenutnom direktoriju ako HOME varijabla okruženja nije postavljena. | Dodato u cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Ime datoteke za vaš privatni ključ. Ako nije navedeno, libcurl podrazumevano postavlja datoteku $HOME/.ssh/id_dsa ako je postavljena varijabla okruženja HOME i datoteku "id_dsa" u trenutnom direktoriju ako varijabla okruženja HOME nije postavljena. Ako je datoteka zaštićena lozinkom, postavite lozinku pomoću CURLOPT_KEYPASSWD. | Dodato u cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Spisak šifri koje se koriste u SSL transferima. Na primjer, RC4-SHA I TLSv1 su važeće liste šifriranja. | |
CURLOPT_SSLCERT | Ime datoteke s ispravno formatiranim PEM certifikatom. | |
CURLOPT_SSLCERTPASSWD | Za korištenje certifikata potrebna je lozinka CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Format sertifikata. Podržani formati "PEM"(zadano), "DER" I "ENG". | Dodato u cURL verziji 7.9.3. |
CURLOPT_SSLENGINE | ID mehanizma za šifriranje za SSL privatni ključ naveden u parametru CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Identifikator mehanizma šifriranja koji se koristi za asimetrične operacije šifriranja. | |
CURLOPT_SSLKEY | Naziv datoteke privatnog ključa SSL. | |
CURLOPT_SSLKEYPASSWD | Tajna lozinka potrebna za korištenje privatnog SSL ključa navedenog parametrom CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Vrsta privatnog ključa SSL specificiranog u parametru CURLOPT_SSLKEY. Podržane su sljedeće vrste ključeva: "PEM"(zadano), "DER" I "ENG". | |
CURLOPT_URL | URL za preuzimanje. Ovaj parametar se također može postaviti prilikom inicijalizacije sesije koristeći curl_init(). | |
CURLOPT_USERAGENT | Sadržaj zaglavlja "Korisnički agent: ", poslano u HTTP zahtjevu. | |
CURLOPT_USERPWD | Prijava i lozinka korišteni tokom povezivanja, navedeni u formatu ":" . |
Za sljedeće vrijednosti parametara opcije, parametar vrijednosti mora biti niz:
Parametar | Postavite vrijednost vrijednosti | Bilješke |
---|---|---|
CURLOPT_HTTP200ALIASES | Niz HTTP 200 odgovora koji će se tretirati kao tačni odgovori, a ne kao pogrešni. | Dodato u cURL verziji 7.10.3. |
CURLOPT_HTTPHEADER | Niz postavljenih HTTP zaglavlja, u formatu niz ("Tip sadržaja: tekst/običan", "Dužina sadržaja: 100") | |
CURLOPT_POSTQUOTE | Niz FTP komandi koje se izvršavaju na serveru nakon što je FTP zahtjev završen. | |
CURLOPT_QUOTE | Niz FTP komandi koje se izvršavaju na serveru prije upućivanja FTP zahtjeva. |
Za sljedeće vrijednosti parametara opcije, parametar vrijednosti mora biti rukohvat toka (vraća ga, na primjer, funkcija fopen()):
Parametar | Postavite vrijednost vrijednosti |
---|---|
CURLOPT_FILE | Datoteka u koju će biti upisan rezultat prijenosa. Zadani izlazni tok STDOUT(prozor pretraživača). |
CURLOPT_INFILE | Datoteka iz koje se podaci trebaju čitati kada se uploaduju na server. |
CURLOPT_STDERR | Alternativni izlazni fajl greške koji se koristi umjesto toka greške STDERR. |
CURLOPT_WRITEHEADER | Datoteka u koju će biti upisana zaglavlja trenutne operacije. |
Za sljedeće vrijednosti parametara opcije, parametar vrijednosti mora biti valjano ime funkcije ili zatvaranje:
Parametar | Postavite vrijednost vrijednosti |
---|---|
CURLOPT_HEADERFUNCTION | Funkcija povratnog poziva uzima dva parametra. Prvi parametar je cURL ručka, drugi parametar je niz koji sadrži zaglavlja koja će se napisati. Zaglavlja moraju biti napisana pomoću ove funkcije povratnog poziva. Trebalo bi vratiti broj upisanih bajtova. |
CURLOPT_PASSWDFUNCTION | Funkcija povratnog poziva uzima tri parametra. Prvi parametar je cURL ručka, drugi parametar je string upita za lozinku, a treći parametar je maksimalna dužina lozinke. Trebalo bi vratiti niz koji sadrži lozinku. |
CURLOPT_PROGRESSFUNCTION |
Funkcija povratnog poziva uzima pet parametara. Prvi je deskriptor cURL, drugi je ukupan broj bajtova za koje se očekuje da će biti preuzeti sa servera, treći je broj već preuzetih bajtova, četvrti je ukupan broj bajtova za koji se očekuje da će biti poslani na server, i peti je broj već poslanih bajtova.
Možete vratiti vrijednost različitu od nule da otkažete prijenos. U tom slučaju će se prikazati greška CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Funkcija povratnog poziva uzima tri parametra. Prvi parametar je cURL ručka, drugi parametar je stream resurs proslijeđen cURL-u preko opcije CURLOPT_INFILE, a treći parametar je maksimalna dozvoljena količina podataka za čitanje. Funkcija povratnog poziva mora vratiti niz dužine koja nije veća od tražene količine podataka, obično čitanjem iz proslijeđenog izvora strujanja. Trebalo bi vratiti prazan string da signalizira kraj datoteke EOF. |
CURLOPT_WRITEFUNCTION | Funkcija povratnog poziva uzima dva parametra. Prvi parametar je cURL ručka, a drugi parametar je niz koji sadrži podatke koji će biti upisani. Podaci se moraju pohraniti pomoću ove funkcije. Mora vratiti tačan broj upisanih bajtova, inače će preuzimanje biti prekinuto uz grešku. |
Ostala značenja:
Povratne vrijednosti
Povratak ISTINITO po uspješnom završetku ili FALSE u slučaju greške.
Lista promjena
Verzija | Opis |
---|---|
5.6.0 | Opcija CURL_SAFE_UPLOAD sada ima zadanu vrijednost od ISTINITO. |
5.6.0 | Uklonjena opcija CURLOPT_CLOSEPOLICY i njegova pridružena značenja. |
5.5.0 | Resurs cURL se dodaje kao prvi argument funkciji povratnog poziva CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Dodata opcija CURLOPT_SHARE. |
5.3.0 | Dodata opcija CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Dodane opcije CURLOPT_PROTOCOLS I CURLOPT_REDIR_PROTOCOLS. |
5.1.0 | Dodane opcije CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH I CURLOPT_TIMECONDITION. |
5.0.0 | Dodane opcije CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE I CURLOPT_HTTP200ALIASES. |
Primjeri
Primjer #1 Inicijalizacija CURL sesije i učitavanje web stranice
// kreiramo novi cURL resurs /* http://localhost/upload.php: $ch = curl_init(); $data = array("name" => "Foo" , "file" => "@/home/user/test.png" ); Curl_setopt($ch, CURLOPT_URL, "http://localhost/upload.php"); Curl_exec($ch); Rezultat pokretanja ovog primjera: Niz ( => Foo) Niz ( => Niz ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) Komentar: Prosljeđivanje niza na CURLOPT_POSTFIELDS kodira podatke kao multipart/form-data, dok će prosljeđivanje URL kodiranog stringa kodirati podatke kao application/x-www-form-urlencoded. cURL je alat koji vam omogućava interakciju sa različitim serverima i podržava mnoge protokole: HTTP, FTP, TELNET, itd. cURL je izvorno uslužni program komandne linije. Ali, na našu sreću, PHP podržava rad sa cURL bibliotekom. U ovom članku ćemo pogledati netrivijalne primjere rada sa cURL-om. U stvari, postoji mnogo drugih načina da se pošalje zahtjev drugom serveru za, na primjer, preuzimanje sadržaja stranice. Mnogi ljudi, uglavnom iz lijenosti, koriste jednostavne PHP funkcije umjesto cURL: $content = file_get_contents("http://www.example.com"); // ili $lines = file("http://www.example.com"); // ili readfile("http://www.example.com"); Međutim, oni ne dozvoljavaju efikasno rukovanje greškama. Postoji i niz zadataka koje oni uopće ne mogu obaviti - na primjer, rad s kolačićima, autorizacija, zahtjevi za objavljivanje, preuzimanje datoteka. cUrl je moćan alat koji podržava više protokola i pruža potpune informacije o zahtjevu. Pre nego što pređemo na složene primere, pogledajmo osnovnu strukturu cURL zahteva u PHP-u. Da biste izvršili cURL zahtjev u PHP-u, morate poduzeti 4 glavna koraka: U ovom članku ćemo uglavnom gledati na korak #2 jer se tu dešava magija. Lista cURL opcija je vrlo velika, tako da danas nećemo razmatrati sve opcije, već ćemo koristiti one koje su korisne za rješavanje konkretnih problema. Ako je potrebno, možete dodati sljedeće linije za praćenje grešaka: // ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Greška: " . curl_error($ch); ) // ... Imajte na umu da koristimo “===” umjesto “==” jer Potrebno je razlikovati prazan odgovor servera i logičku vrijednost FALSE, koja se vraća u slučaju greške. Drugi opcioni korak je pribavljanje informacija o cURL zahtjevu nakon što se on izvrši. // ... curl_exec($ch); $info = curl_getinfo($ch); echo "Uzeo". $info["total_time"] . "sekunde za url". $info["url"]; // ... Kao rezultat, dobit ćete niz sa sljedećim informacijama: U ovom primjeru ćemo napisati skriptu koja će otkriti preusmjeravanja na osnovu različitih postavki pretraživača. Na primjer, neke web stranice preusmjeravaju posjetitelje s mobilnih uređaja na posjetitelje iz drugih zemalja. Koristit ćemo opciju CURLOPT_HTTPHEADER da postavimo vlastita zaglavlja, uključujući User-Agent i Jezik, i vidimo kamo nas web lokacije preusmjeravaju. // URL-ovi $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // pretraživači $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" => niz ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU kao Mac OS X; en) AppleWebKit/420+ (KHTML, kao Gecko) Verzija/3.0 Mobile/1A537a Safari/419.3", "language" => "en"), "francuski" => niz ("user_agent" = > "Mozilla/4.0 (kompatibilan; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls kao $url) ( echo "URL: $url\n"; foreach ($browseri kao $test_name => $browser) ( $ch = curl_init(); // postavite adresu curl_setopt($ch, CURLOPT_URL) , $url); // označava pretraživač i jezik koji se koristi curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])), "Prihvati-Jezik: ($browser["language" ]) ")); // ne treba nam sadržaj stranice curl_setopt($ch, CURLOPT_NOBODY, 1); // trebaju nam samo zaglavlja curl_setopt($ch, CURLOPT_HEADER, 1); // umjesto toga vraćamo rezultat njegovog izlaza curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); // definirati preusmjeravanja u HTTP zaglavljima? if (preg_match("!Location: (.*)!" , $output, $matches)) ( echo "$test_name: preusmjerava na $matches\n"; ) else ( echo "$test_name: nema preusmjeravanja\n"; ) ) echo "\n\n"; ) U petlji provjeravamo pretraživače za svaki URL. Prvo postavljamo opcije za naš zahtjev: URL i pretraživač i jezik za testiranje. Jer Postavili smo posebnu opciju; rezultat zahtjeva će sadržavati samo HTTP zaglavlja. Koristeći jednostavan regularni izraz, možemo provjeriti da li odgovor sadrži string "Location:". Rezultat izvršenja skripte: URL: http://www.cnn.com standard: preusmjerava na http://edition.cnn.com/ iphone: preusmjerava na http://edition.cnn.com/ francuski: preusmjerava na http://edition.cnn .com/ URL: http://www.mozilla.com standard: preusmjerava na https://www.mozilla.org/firefox/ iphone: preusmjerava na https://www.mozilla.org/firefox/ francuski: preusmjerava na https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: preusmjerava na https://www.facebook.com/ iphone: preusmjerava na http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr francuski: nema preusmjeravanja Prilikom izvođenja GET zahtjeva, podaci se mogu proslijediti u nizu upita. Na primjer, kada pretražujete na Googleu, vaš upit se prevodi u URL: http://www.google.com/search?q=google Da biste dobili rezultat ovog upita, nije vam potreban cURL, možete biti lijeni i koristiti "file_get_contents()". Ali neki HTML obrasci koriste POST metodu. U ovom slučaju, podaci se šalju u tijelu poruke zahtjeva, a ne u samom URL-u. Hajde da napišemo skriptu koja će slati POST zahtjeve. Prvo, napravimo jednostavnu PHP datoteku koja će prihvatiti ove zahtjeve i vratiti podatke poslane u njega. Nazovimo to post_output.php : $url = "http://localhost/post_output.php"; $post_data = niz ("foo" => "bar", "query" => "FooBar", "action" => "Pošalji"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // napravimo POST zahtjev curl_setopt($ch, CURLOPT_POST, 1); // dodaj podatke curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Ova skripta će ispisati: Niz ( => bar => FooBar => Pošalji) Ova skripta je poslala POST zahtjev u post_output.php fajl. koji je izbacio sadržaj niza $_POST i dobili smo ovaj odgovor koristeći cURL. Kao u prethodnom primjeru, napravimo fajl koji će prihvatiti zahtjeve, upload_output.php : Print_r($_FILES); I sama skripta koja preuzima fajlove: $url = "http://localhost/upload_output.php"; $post_data = niz ("foo" => "bar", // fajl za upload "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 $output; Ako želite da otpremite datoteku, sve što treba da uradite je da prosledite putanju do nje, baš kao i normalan parametar POST zahteva, sa prefiksom "@". Rezultat skripte: Niz ( => Niz ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Jedna od naprednih karakteristika cURL-a u PHP-u je mogućnost izvršavanja više zahteva istovremeno i asinhrono. U normalnim uslovima, skripta se zaustavlja i čeka da se zahtev završi. A ako trebate izvršiti puno upita, to može potrajati, jer... izvodit ćete uzastopno. Ovo ograničenje se može zaobići: // kreiranje rukovaoca $ch1 = curl_init(); $ch2 = curl_init(); // postavlja opcije 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); //kreiramo višestruku cURL ručku $mh = curl_multi_init(); // dodaj rukovaoce curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // izvršavanje zahtjeva do ( curl_multi_exec($mh, $running); ) while ($running > 0); // oslobađanje resursa curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Ideja je da možete kreirati više cURL ručki, kombinovati ih pod jednim multi-handle-om i izvršavati ih asinhrono. Prvo, sve je isto kao i kod običnog cURL zahtjeva - kreira se deskriptor ( curl_init()
), parametri su postavljeni ( curl_setopt()
). Zatim se kreira multi-deskriptor ( curl_multi_init()
) i dodaju se prethodno kreirani regularni deskriptori ( curl_multi_add_handle()
). Umjesto normalnog pozivanja curl_exec(), mi ćemo pozvati curl_multi_exec()
ova funkcija nas obavještava o broju aktivnih veza koristeći drugi parametar - $running. Dakle, petlja se izvodi sve dok $running ne postane jednak 0. I, naravno, nakon završetka rada potrebno je osloboditi resurse. U ovom primjeru jednostavno šaljemo rezultat upita u STDOUT. Razmotrimo netrivijalan slučaj upotrebe multi cURL. Zamislite blog sa puno postova koji sadrže veze ka vanjskim stranicama. Neki od ovih linkova možda neće raditi. Hajde da napišemo skriptu koja će pronaći sve neispravne veze i pokazati nam ih. Prvo, moramo povući sve vanjske veze iz baze podataka: // KONFIGURACIJA $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "site"); $max_connections = 10; $url_list = niz(); $working_urls = niz(); $dead_urls = niz(); $not_found_urls = niz(); $active = null; // povezivanje na MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Ne mogu se povezati: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Može not select db: " . mysql_error()); ) // uzmi sve postove sa linkovima u tekstu $q = "IZABIR post_content IZ wp_posts GDJE post_content KAO "%href=%" I post_status = "objavi" I post_type = "post " "; $r = mysql_query($q) ili die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // prikuplja sve linkove koristeći regularni izraz if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($ odgovara kao $url) ( // filtrirati nepotrebne domene $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) ( nastavi; ) // sastavljamo $url_list = $url; ) ) ) // uklonimo ponavljanja $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Nema URL za provjeru"); ) U ovom dijelu skripte jednostavno izvlačimo sve vanjske veze iz baze podataka. Provjerimo ih: $mh = curl_multi_init(); // 1. dodaj veze za ($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 "==Mrtvi URL-ovi==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URL-ova==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Radni URL-ovi==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. dodaje ručku sa datom URL funkcijom add_url_to_multi_handle($mh, $url_list) ( statički $index = 0; // ako još uvijek postoje veze if (isset($url_list[$index])) ( // sve je kao i obično $ ch = curl_init(); // postavi opcije curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // vrati umjesto da prikaže rezultat curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // dozvoli preusmjerava curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // dobijemo samo zaglavlja radi uštede vremena curl_setopt($ch, CURLOPT_NOBODY, 1); // dodaj u multi-handle curl_multi_add_handle($mh, $ch); $index++; ) ) Pogledajmo detaljnije kod (numeracija odgovara komentarima u kodu): Pokrenimo skriptu: Mrtvi URL-ovi== xample1234.com/ ==404 URL-ova== www.google.com/dsfasdfafd ==Radni URL-ovi== 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 codex. 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 Provjera je trajala oko 2 sekunde. Pokretanjem 10 niti istovremeno, performanse se povećavaju 10 puta u poređenju sa redovnim cURL zahtjevima. Da biste dobili sadržaj odgovora servera, koristite funkciju curl_multi_getcontent($ch)
, gdje je $ch deskriptor dobiven iz curl_multi_info_read()
. Ako HTTP zahtjev zahtijeva autentifikaciju, koristite sljedeći kod: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // šalje korisničko ime i lozinku curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // ako su preusmjeravanja dozvoljena curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL će poslati lozinku nakon preusmjeravanja curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); PHP ima svoju biblioteku za rad sa FTP-om, ali možete koristiti i cURL: // čitanje datoteke $file = fopen("/path/to/file", "r"); // url već sadrži potrebne podatke $url = "ftp://username: [email protected]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // opcije curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch);curl_close($ch); Zahtjevi se mogu podnijeti putem određenog proxyja: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // proxy adresa curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // ako je potrebna autorizacija curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch); Moguće je koristiti povratne pozive dok je zahtjev pokrenut, bez čekanja da se završi. Na primjer, dok se odgovor servera preuzima, možemo koristiti podatke koji smo već primili bez čekanja na potpuno preuzimanje. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec($ch); curl_close($ch); funkcija progress_function($ch,$str) ( echo $str; vrati strlen($str); ) Funkcija povratnog poziva mora vratiti dužinu niza da bi zahtjev ispravno funkcionirao. Svaki put kada se primi sljedeći dio odgovora servera, bit će pozvan povratni poziv. U ovom članku pogledali smo napredne karakteristike cURL-a u PHP-u. Sljedeći put kada budete trebali napraviti URL zahtjeve, koristite cURL. Često moramo da preuzimamo razne datoteke sa Interneta, na primjer, izvršne programske datoteke, datoteke skripta, izvorne arhive. Ali to ne mora uvijek biti urađeno preko pretraživača. U mnogim situacijama je mnogo lakše izvršiti sve radnje preko terminala. Jer na ovaj način možete automatizirati proces. S druge strane, webmasteri s vremena na vrijeme moraju testirati pristupačnost web stranice, provjeravati poslana i primljena zaglavlja i još mnogo toga. Da biste riješili takve probleme i probleme sličnog raspona, možete koristiti uslužni program curl. Omogućuje vam rješavanje mnogo šireg spektra problema, uključujući čak i simulaciju radnji korisnika na stranici. U ovom članku ćemo pogledati kako koristiti curl, šta je to i zašto je ovaj program potreban. U stvari, curl je više od samo uslužnog programa komandne linije za Linux ili Windows. Ovo je skup biblioteka koje implementiraju osnovne mogućnosti rada sa URL stranicama i prijenosa datoteka. Biblioteka podržava rad sa protokolima: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, kao i POP3, IMAP i SMTP. Odličan je za simulaciju radnji korisnika na stranicama i drugih operacija s URL-ovima. Podrška za curl biblioteku je dodana mnogim različitim programskim jezicima i platformama. Uslužni program curl je nezavisni omot za ovu biblioteku. Upravo na ovaj uslužni program ćemo se fokusirati u ovom članku. Prije nego što pređemo na opis načina na koji se može koristiti naredba curl linux, pogledajmo sam uslužni program i njegove glavne opcije koje će nam trebati. Sintaksa uslužnog programa je vrlo jednostavna: $ veza sa opcijama curl Pogledajmo sada glavne opcije: Ovo nikako nisu sve opcije za curl linux, ali navodi osnove koje ćete morati da koristite. Pokrili smo sve što se tiče teorije rada sa uslužnim programom curl, sada je vrijeme da pređemo na praksu i pogledamo primjere komande curl. Najčešći zadatak je ovo. Preuzimanje datoteke je vrlo jednostavno. Da biste to učinili, samo prenesite naziv datoteke ili html stranicu uslužnom programu u parametrima: curl https://raw.githubusercontent.com/curl/curl/master/README.md Ali ovdje vas čeka jedno iznenađenje: cijeli sadržaj datoteke će biti poslan na standardni izlaz. Za pisanje u bilo koji fajl koristite: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md A ako želite da se rezultirajuća datoteka nazove isto kao datoteka na serveru, koristite opciju -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 Ako je potrebno, možete preuzeti nekoliko datoteka jednom komandom: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Još jedna stvar koja može biti korisna za administratora je preuzimanje datoteke samo ako je promijenjena: curl -z 21-17.12. https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Možete ograničiti brzinu preuzimanja na potrebnu granicu kako ne biste preopteretili mrežu koristeći opciju -Y: curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Ovdje morate odrediti broj kilobajta u sekundi koji se može preuzeti. Također možete prekinuti vezu ako brzina nije dovoljna, koristite opciju -Y za ovo: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ Ili provjerimo je li datoteka poslana putem HTTP-a; za to postoji posebna usluga: curl -T ~/login.txt http://posttestserver.com/post.php U odgovoru će vam uslužni program reći gdje možete pronaći preuzetu datoteku. POST metodom možete slati ne samo datoteke, već i sve podatke. Podsjećam da se ova metoda koristi za slanje podataka različitih oblika. Da biste poslali takav zahtjev, koristite opciju -d. Za testiranje ćemo koristiti istu uslugu: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Ako niste zadovoljni ovom opcijom podnošenja, možete se pretvarati da šaljete obrazac. Postoji opcija za ovo -F: curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php Ovdje prosljeđujemo polje lozinke sa formom kao običan tekst, na isti način možete proslijediti nekoliko parametara. Kolačiće koriste web stranice za pohranu određenih informacija na strani korisnika. Ovo može biti potrebno, na primjer, za autentifikaciju. Možete slati i primati kolačiće koristeći curl. Za spremanje primljenih kolačića u datoteku, koristite opciju -c: curl -c cookie.txt http://posttestserver.com/post.php Zatim možete poslati curl kolačić natrag: curl -b cookie.txt http://posttestserver.com/post.php Sadržaj stranice nam nije uvijek potreban. Ponekad samo naslovi mogu biti zanimljivi. Za prikaz samo njih postoji opcija -I: curl -I https://site A -H opcija vam omogućava da pošaljete nekoliko ili više na server, na primjer, možete proslijediti zaglavlje If-Modified-Since tako da se stranica vrati samo ako je izmijenjena: Ako server zahtijeva jednu od uobičajenih vrsta provjere autentičnosti, kao što je HTTP Basic ili FTP, onda curl može vrlo lako riješiti ovaj zadatak. Da biste naveli detalje o autentifikaciji, jednostavno ih navedite odvojene dvotočkom u opciji -u: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt Provjera autentičnosti na HTTP serverima će se izvršiti na isti način. Ako trebate koristiti proxy server za preuzimanje datoteka, onda je i to vrlo jednostavno. Dovoljno je navesti adresu proxy servera u opciji -x: curl -x proxysever.test.com:3128 http://google.co.in U ovom članku pogledali smo kako koristiti curl, zašto je potreban ovaj uslužni program i njegove glavne mogućnosti. Uprkos njihovoj sličnosti sa njima, oni su veoma različiti. Naredba curl linux je više dizajnirana za analizu i simulaciju različitih radnji na serveru, dok je wget pogodniji za preuzimanje datoteka i indeksiranje stranica. Ovaj članak će govoriti o tako moćnom alatu kao što je cURL, kao i o biblioteci za PHP koja omogućava pristup ovom alatu - libcurl. čemu sve ovo? Za komunikaciju sa serverom koristeći protokole za prijenos podataka, na primjer, http ili ftp. Ostali protokoli nam nisu posebno zanimljivi, ako neko želi dublje proći u ovu temu, morat će iskopati resurse na engleskom jeziku, a ovaj članak će sadržavati osnove i primjere korištenja. Dakle, biblioteka libcurl nam pruža mogućnost da prenosimo podatke na server i primamo odgovore od njega. Šta nam ovo daje? Sposobnost oponašanja ponašanja korisnika ili ! Možete primati sadržaj stranica za naknadno raščlanjivanje, možete primati zaglavlja odgovora usluge i programski se prijavljivati na stranice, kreirati skripte za postavljanje poruka (na primjer, na Twitteru ili na forumima) ili informacija. Sve je ograničeno samo vašom maštom! Prva stvar koju treba da uradimo je da instaliramo biblioteku. Na svom lokalnom računaru koristim Denwer build, kao i velika većina webmastera početnika, kojima je članak namijenjen. Iskusni korisnici koji samostalno instaliraju kombinaciju php+apache+mysql moći će da instaliraju cURL, nije na meni da im objašnjavam kako se to radi;) A mi početnici koristimo gotova rješenja da to olakšamo. Stoga, instalirajte libcurl na sljedeći način: i uklonite tačku i zarez na početku pojmova: ;extension=php_curl.dll Spreman. Da biste provjerili funkcionalnost biblioteke, možete pozvati funkciju phpinfo() i tamo pronaći liniju: cURL podrška je omogućena. Čestitam na prvoj pobjedi. Da biste započeli rad s alatom, potrebno ga je inicijalizirati. To se radi na sljedeći način: $ch = curl_init(); Koristili smo funkciju inicijalizacije cURL sesije. U ovom slučaju, URL možete postaviti odmah, ovako: $ch = curl_init("https://site"); A to možete učiniti kasnije, u opcijama. Redoslijed kojim su opcije instalirane nije bitan. To radi druga funkcija: Curl_setopt (resource ch, string opcija, mješovita vrijednost) Već smo kreirali prvi parametar ove funkcije, odnosno resurs ch, odmah iznad, ali postoji puno parametara opcija i vrijednosti. Mislim da ne biste trebali sve kopirati i zalijepiti ovdje, već samo dajte link na detaljan opis funkcije, nadam se da se niko neće uvrijediti: curl_setopt. Navest ću primjer postavljanja opcija koristeći URL kao primjer: $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); Još par primjera opcija podešavanja: hajde da dobijemo zaglavlje odgovora servera, a da ne dobijemo samu stranicu: Curl_setopt($ch, CURLOPT_HEADER, 1); // čitanje zaglavlja curl_setopt($ch, CURLOPT_NOBODY, 1); // čitati SAMO zaglavlje bez tijela Dakle, inicijalizirali smo sesiju, postavili parametre koji su nam potrebni, sada izvršavamo rezultirajući zahtjev, zatvaramo sesiju i prikazujemo rezultat: $result = curl_exec($ch); curl_close($ch); echo $result; Kao rezultat, dobijamo naš prvi potpuno funkcionalan primjer korištenja biblioteke libcurl: $ch = curl_init(); $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // čitanje zaglavlja curl_setopt($ch, CURLOPT_NOBODY, 1); // čitamo SAMO zaglavlje bez tijela $result = curl_exec($ch); curl_close($ch); echo $result; Kako to funkcionira, nadam se, jasno je, jer smo svaki korak posmatrali posebno :) Kao rezultat toga, sa servera dobijamo HTTP zaglavlje odgovora, koje ćemo svakako analizirati u nastavku kako bismo bolje razumjeli sve faze interakcije između pretraživač i server: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Fabulous! Primili smo zaglavlje odgovora sa servera i testirali biblioteku u akciji. Koliko nam je ovo korisno? Jer sada možete otprilike zamisliti slijed radnji kada radite sa cURL: Na primjer, okrenuo sam se na ya.ru stranicu i pogledao generirani zahtjev pretraživača i odgovor primljen od servera. Evo ih: Vjerujem da je nakon što su neke opće točke već jasne i sve izgleda jasno, onda je vrijeme da pređete na praksu i usavršite svoje vještine koristeći primjere. Lično me uvijek svrbe ruke da probam sve u praksi :) Pošto je cURL tako dobar za parsere, hajde da razmotrimo funkciju dobijanja koda stranice po njegovoj adresi. U ovom slučaju, izlaz će biti niz s naslovom, sadržajem stranice, pa čak i kodovima grešaka ako nešto krene po zlu. Funkcija get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Verzija/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURN); // vraća web stranicu curl_setopt($ch, CURLOPT_HEADER, 0); // ne vraća zaglavlja curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // prati preusmjeravanja curl_setopt($ch, CURLOPT_ENCODING, ""); // obrađuje svi kodiranja curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // vremensko ograničenje veze curl_setopt($ch, CURLOPT_TIMEOUT, 120); // vremensko ograničenje odgovora $ch_setopt(CURLOPT_CONNECTTIMEOUT, 120); , 10); // zaustavljanje nakon 10. preusmjeravanja $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; vrati $header; ) Ulazni parametri: Koristimo funkciju, na primjer, ovako: $result = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["content "]; echo $page; ) Sve bi trebalo proći bez grešaka i dobićete kod stranice u varijabli $page. Ako pokušamo da dobijemo nepostojeću stranicu yaaaaaaaaaaaa.ru, dobićemo grešku: Nije moguće riješiti host: yaaaaaaaaaaaa.ru; Host nije pronađen Sve je obrađeno korektno i lijepo :) JavaScript je blokiran u vašem pretraživaču. Omogućite JavaScript da bi stranica funkcionisala! PHP podržava libcurl, biblioteku koju je kreirao Daniel Stenberg i koja vam omogućava da se povežete na različite tipove servera i protokola. Ove funkcije su uvedene u PHP 4.0.2. curl_init - inicijalizira CURL sesiju. resurs curl_init() Funkcija curl_init() inicijalizira novu sesiju i vraća CURL ručku za korištenje u funkcijama i. Ako je opcioni parametar url je dostavljen, onda će opcija CURLOPT_URL primiti vrijednost ovog parametra. Možete ga ručno instalirati pomoću . curl_setopt - postavlja opcije za CURL transfer/transfer. bool curl_setopt(resource ch, string opcija, mješovita vrijednost) Funkcija curl_setopt() postavlja opcije za CURL sesiju identificiranu parametrom ch. Parametar opcija je opcija koju želite postaviti, i vrijednost ovo je vrijednost opcije opcija . Parametar vrijednost mora biti dugačak za sljedeće opcije (određene parametrom opcija): Parametar vrijednost mora biti string za sljedeće vrijednosti parametara opcija : Sljedeće opcije očekuju deskriptor datoteke, koji se dobija pomoću funkcije fopen() : Parametar vrijednost long write_callback (resource ch, string data)( ... return strlen($data);) opcija : Parametar vrijednost treba biti funkcija sljedećeg oblika string read_callback (resurs ch, resurs fd, duga dužina)() za sljedeće vrijednosti parametara opcija : curl_exec - izvršava CURL sesiju. bool curl_exec(resource ch) Ovu funkciju treba pozvati nakon što ste inicijalizirali CURL sesiju i sve opcije za tu sesiju su već postavljene. Njegova svrha je jednostavno da izvrši unaprijed definiranu CURL sesiju (navedenu u parametru ch). curl_close - zatvara CURL sesiju. void curl_close(resource ch) Ova funkcija zatvara CURL sesiju i oslobađa sve resurse. CURL ručka ch također se briše. curl_errno - vraća cijeli broj koji sadrži posljednji broj greške. Ako trebate poslati višedimenzionalni niz i datoteku u POST zahtjevu, naići ćete na nerješivi problem. Ako prosledite višedimenzionalni niz u CURLOPT_POSTFIELDS, drugi nivo će biti prosleđen kao niz "Niz". Ako konvertujete koristeći http_build_query, nećete moći prenijeti datoteku. Ispod je funkcija za kodiranje dvodimenzionalnog niza sa učitavanjem datoteke za Curl, koja će raditi u obje starije verzije PHP-a 5.3, PHP 5.4 i PHP 5.6 /** pretvara višedimenzionalni niz u jednodimenzionalni niz koristeći složene indekse i zamjenjuje @ u prefiksu sa CurlFile za upotrebu u Curl * @param $inputArray * @param string $inputKey * @return niz $requestVars = array ("id" => array( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); dobijamo: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ funkcija convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray kao $key => $value ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $ključ; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? novi CurlFile(ltrim($value, "@")) : $value; ) ostalo ( $resultArray[$tmpKey ] = $value; ) ) return $resultArray; ) // provjerite $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "stranica"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Primjeri primjene korištenja Curl-a
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
?>
Bilješke
Zašto cURL?
cUrl Basics
// 1. inicijalizacija $ch = curl_init(); // 2. postaviti opcije, uključujući URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. izvršavanje zahtjeva i primanje odgovora $output = curl_exec($ch); // 4. čišćenje resursa curl_close($ch); Praćenje grešaka
Dobivanje informacija o zahtjevu
Praćenje preusmjeravanja, ovisno o pretraživaču
Slanje POST zahtjeva
Učitavanje fajlova
Multi cURL
Provjera vanjskih veza u WordPress-u
Ostale cURL karakteristike u PHP-u
HTTP autentifikacija
Upload preko FTP-a
Korištenje proxyja
Funkcije povratnog poziva
Zaključak
naredba curl
Kako koristiti curl?
Ograničenje brzine
Prijenos fajlova
Slanje POST podataka
Slanje i primanje kolačića
Prijenos i analiza zaglavlja
curl autentikacija
Korištenje proxyja
zaključci
Šta su zapravo cURL i libcurl? Opšte tačke
Instaliranje cURL-a na Denwer (Denver). Kako početi koristiti libcurl?
Opis cURL-a i prvih koraka
Struktura zaglavlja HTTP zahtjeva
Zahtjev
GET / HTTP/1.1 - Pokušavamo da dobijemo stranicu na /, odnosno glavnu stranicu koja se nalazi u korenu fascikle. Koristimo verziju protokola 1.1.
Korisnički agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Verzija/12.14— Predstavljamo se serveru, mi smo pretraživač Opera.
Host: ya.ru — Ime domene traženog resursa.
Prihvati: text/html, application/xml;q=0,9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0,1— Lista prihvatljivih formata resursa.
Prihvati-jezik: ru-RU,ru;q=0,9,en;q=0,8— Lista podržanih jezika.
Accept-Encoding: gzip, deflate— Podržane metode kodiranja.
Kolačić: yandexuid=HHHHH - Kolačići, ako je potrebno.
Veza: Keep-Alive - Molimo vas da ne prekidate vezu i ostanite u kontaktu.
Odgovori
HTTP/1.1 200 Ok - Dobili smo odgovor sa kodom 200, što znači da je sve u redu.
Server: nginx - Server se predstavio - ovo je nginx.
Datum: Sun, 10 Mar 2013 14:10:50 GMT— Trenutni datum i vrijeme na serveru.
Content-Type: text/html; charset=UTF-8— Tip sadržaja i kodiranje.
Veza: zatvori - server ne želi da održava stalnu vezu sa nama, pa ga odmah zatvara. Nova veza će biti uspostavljena za sljedeći zahtjev.
Kontrola predmemorije: bez predmemorije, bez trgovine, max-age=0, mora se ponovo potvrditi— Upravljanje keširanjem. U ovom slučaju je onemogućen.
Ističe: ned, 10. mart 2013. 14:10:50 GMT— Datum očekivanog isteka sjednice. U našem slučaju se poklapa sa vremenom otvaranja, pošto ga je server odmah zatvorio, odmah nakon obrade.
Zadnja izmjena: Sun, 10 Mar 2013 14:10:50 GMT— Vrijeme posljednje izmjene.
Content-Encoding: gzip — Metoda kodiranja informacija.
Kompletna lista svih parametara koji se mogu naći u zaglavlju HTTP zahtjeva može se naći na Wikipediji.
Sada imate grubu ideju o tome kako vaš pretraživač i web server međusobno komuniciraju. Ovo je vrlo korisno znati i razumjeti, jer ćemo pokušati emulirati radnje pretraživača koristeći libcurl biblioteku. Nastavi.Primjer rada sa bibliotekom
url — adresa stranice ili web lokacije.
Vrijednosti izlaznih parametara (niz sa tri elementa):
header['errno'] - ako je nešto pošlo po zlu, ovdje će biti kod greške.
header[‘errmsg’] – tekst greške će se pojaviti ovdje.
header['content'] - stvarna stranica\fajl\slika, itd.
Zatim možete raditi šta god želite sa kodom stranice, na primjer, raščlaniti ga pomoću regularnih izraza. Ali to je sve u narednim lekcijama, ali za sada se zaustavimo na ovome.Curl
libcurl trenutno podržava http, https, ftp, gopher, telnet, dict, file i ldap protokole.
libcurl takođe podržava HTTPS sertifikate, HTTP POST, HTTP PUT, FTP upload (ovo se takođe može uraditi sa ftp PHP ekstenzijom), HTTP otpremanje zasnovano na obrascima, proksije, kolačiće i autentifikaciju korisnika i lozinke.curl_init
Opis
curl_setopt
Opis
curl_exec
Opis
curl_close
Opis
curl_errno
Opis
Primjer 1: Inicijalizacija nove CURL sesije i preuzimanje web stranice.
Primjer 2: Upotreba PHP-ovog CURL modula za dobivanje example.com
Primjer 3: Provjera pristupačnosti URL-a pomoću PHP-ove CURL
Primer 4: Odvajanje zaglavlja od tela dobijenog korišćenjem PHP-ovog CURL-a
Primer 5: Određivanje URL-a preporuke pomoću PHP-ovog CURL-a
problem: curl_setopt($ch,FOLLOW_LOCATION,1); greška: problem sa open_basedir i safe_mode rešenje: funkcija koju je neko već razvio rešenje n 2: ista funkcija, modifikovana, odlično radi za mene..= $curl_max_loops) ( $curl_loops = 0; vrati FALSE; ) curl_setopt($ch, CURLOPT_HEADER, istina); curl_setopt($ch, CURLOPT_RETURNTRANSFER, istina); $data = curl_exec($ch); list($header, $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) ( //nije mogao obraditi url za preusmjeravanje na $curl_loops = 0; vrati $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; if (!$url["host"]) $url["host"] = $last_url[ "host"]; if (!$url["path"]) $url["path"] = $last_url["path"]; $new_url = $url["scheme"] . "://" . $. url["host"] . $url["path"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Preusmjeravanje na", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; vrati $data; ) ) ?>
samo koristite ovu funkciju bez de FOLLOW_LOCATION i trebalo bi da radi. problem je bio u tome što kada dođete do linije u koju vraćate podatke ako je http_code drugačiji od 301 ili 302, $data ima zastarjele informacije ili ih nema. tako da $debbbb radi posao. Primjer 6: Parsiranje kolačića iz zaglavlja pomoću CURL PHP-a
Ponekad ne možete koristiti CURLOPT_COOKIEJAR i CURLOPT_COOKIEFILE zbog php-settinga servera (Kažu da možete uzeti bilo koji fajl sa servera koristeći ove opcije). Evo rješenja 1)Nemojte koristiti CURLOPT_FOLLOWLOCATION 2)Koristite curl_setopt($ch, CURLOPT_HEADER, 1) 3) Uzmite iz zaglavlja kolačiće ovako: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $kolačići = implode(";", $rezultati); 4) Postavite ih koristeći curl_setopt($ch, CURLOPT_COOKIE, $cookies); Primjer 7: Parsiranje kolačića iz zaglavlja korištenjem CURL PHP-a
Kao što je Yevgen ranije spomenuo, ponekad ne možemo koristiti CURLOPT_COOKIEJAR i CURLOPT_COOKIEFILE. Ispod je funkcija povratnog poziva zaglavlja koju sam napisao još u januaru i koja vam omogućava da održavate kolačiće između cURL zahtjeva. Kolačići se dodaju u $ch tokom svih zahtjeva čak i tokom preusmjeravanja, tako da možete koristite ga zajedno sa CURLOPT_FOLLOWLOCATION Evo koda: function read_header($ch, $string) (globalna $location; #prati lokaciju/preusmjerava globalno $cookiearr; #pohrani kolačiće ovdje globalno $ch; # ^nadjača param funkcije $ch # ovo je u redu jer moramo # ažurirati globalni $ch sa # novim kolačićima $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #pratite zadnje preusmjeravanje $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #dobiti kolačić $cookiesstr = trim(substr( $string, 11, -1)); $cookie = explode(";", $cookiesstr); $cookie = explode("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #izvrši samo na kraju zaglavlja foreach ($cookiearr kao $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $kolačić); ) return $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Ovaj kod pretpostavlja da ćete ponovo koristiti $ch bez inicijalizacije svaki put (pozovite curl_init samo jednom, na početku). Ako trebate ponovo inicijalizirati $ch u bilo kojem trenutku u vašem kodu, možete pristupiti trenutno pohranjenim kolačićima u $cookiearr i uključiti ih u novi $ch. Napisao sam ovu funkciju prije nego što sam imao dovoljno iskustva s regularnim izrazima tako da ovdje nećete naći nikakve preg_match pozive. Koristio sam ovaj kod već duže vrijeme i bez ikakvih problema pristupam gmailu, yahoou, hotmailu, aol-u itd. gdje sam morao proći kroz prijavu i nekoliko stranica prije nego što dođem do onoga što sam tražio. Primjer 8: Postavljanje rukovaoca opterećenja zaglavlja koristeći CURL PHP
Koristeći cURL, morao sam da pozovem skriptu treće strane koja je vraćala binarne podatke kao prilog kako bih ponovo prenela preuzete podatke kao prilog. Problem je bio u tome što je skripta treće strane povremeno vraćala HTTP greške i želio sam izbjeći prosljeđivanje priloga nulte dužine u takvim slučajevima. Kombinacija korištenja povratnog poziva CURLOPT_FAILONERROR i CURLOPT_HEADERFUNCTION pomogla je da se uredno obrade HTTP greške skripte treće strane: funkcija curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) (zaglavlje($strHeader) ); header("Content-Disposition: attachment; filename="file-name.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) ( ispisati "Greška s kodom: " . $intReturnCode; ) Primer 9. Čuvanje stranice u fajlu i izračunavanje brzine prenosa koristeći CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); funkcija WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_HEADER, CURLOPT_ 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); echo " "; echo "Prosječna brzina preuzimanja == " . $sAverageSpeedDownload ."
"; curl_close($sh); FClose ($hFile); echo "( Pogledajte fajl ".$sTxtfile."" na istoj putanji hostinga." " do mesta gde je ova skripta PHP).
"; echo "Prosječna brzina upload == " . $sAverageSpeedUpload ."
"; eho"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Primjer 9. Prijem stranice putem SSL veze (https)
$ch=curl_init("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Onemogućite grešku "Problem sa SSL certifikatom, provjerite da li je CA certifikat u redu" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Onemogući grešku "SSL: naziv subjekta certifikata "hostname.ru" ne odgovara nazivu ciljnog hosta "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); Primjer 10: Korištenje sesija i kolačića u curl-u
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://site"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//sačuvajte primljene COOKIE u datoteku curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //šaljemo na server kolačiće koje su od njega primljene tokom autorizacije $out=curl_exec($curl); Primjer 11: Prijenos datoteke i višedimenzionalni niz u Curl-u. CURLOPT_POSTFIELDS + CurlFile