PHP CURL - funcții și exemple de utilizare. Utilizarea avansată a cURL în opțiunile liniei de comandă PHP Curl
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Setează un parametru pentru sesiunea CURL
Lista parametrilor
mânerul cURL obținut de la curl_init().
Parametru de setat CURLOPT_XXX.
Valoarea parametrului de opțiune.
bool:
Parametru | Note | |
---|---|---|
CURLOPT_AUTOREFERER | ADEVĂRAT pentru setarea automată pe teren Referitor:în cererile redirecționate prin antet Locație:. | |
CURLOPT_BINARYTRANSFER | ADEVĂRAT pentru a returna răspunsul brut atunci când se utilizează o constantă CURLOPT_RETURNTRANSFER. | Începând cu PHP 5.1.3, această opțiune nu mai este necesară: rezultatul brut este întotdeauna returnat atunci când se utilizează opțiunea CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | ADEVĂRAT pentru a instrui sesiunea curentă să înceapă o nouă „sesiune” de cookie-uri. Acest lucru va face ca libcurl să ignore orice cookie-uri „de sesiune” pe care ar fi trebuit să le încarce din sesiunea anterioară. În mod implicit, libcurl salvează și încarcă întotdeauna toate cookie-urile, indiferent dacă sunt „sesiuni” sau nu. Cookie-urile „de sesiune” sunt cookie-uri care nu expiră și trebuie să existe doar pentru „sesiunea” curentă. | |
CURLOPT_CERTINFO | ADEVĂRAT pentru a scoate în flux informații despre certificatul SSL STDERR cu conexiuni sigure. | Adăugat în cURL 7.19.1. Disponibil începând cu PHP 5.3.2. Necesită ca această opțiune să fie activată pentru o funcționare corectă CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | ADEVĂRAT spune bibliotecii să efectueze autentificarea proxy și configurarea conexiunii necesare, dar nu transmite date. Această opțiune este implementată pentru HTTP, SMTP și POP3. | Adăugat în 7.15.2. Disponibil de la PHP 5.5.0. |
CURLOPT_CRLF | ADEVĂRAT pentru a converti terminațiile de linie Unix în CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | ADEVĂRAT pentru a utiliza cache-ul DNS global. Această opțiune nu este sigură pentru fire și este activată implicit. | |
CURLOPT_FAILONERROR | ADEVĂRAT pentru un raport detaliat despre eșec dacă codul HTTP primit este mai mare sau egal cu 400. Comportamentul implicit returnează pagina normal, ignorând codul. | |
CURLOPT_FILETIME | ADEVĂRAT pentru a încerca să obțineți data modificării unui document de la distanță. Această valoare poate fi obținută folosind parametrul CURLINFO_FILETIME din funcție curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | ADEVĂRAT să urmeze orice titlu "Locație: " trimis de server în răspunsul său (rețineți că acest lucru se întâmplă recursiv, PHP va urma orice antet trimis "Locație: ", cu excepția cazului în care este setată o constantă CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | ADEVĂRAT pentru a forța închiderea unei conexiuni după finalizarea procesării acesteia, astfel încât să nu poată fi reutilizată. | |
CURLOPT_FRESH_CONNECT | ADEVĂRAT pentru a forța utilizarea unei noi conexiuni în locul uneia stocate în cache. | |
CURLOPT_FTP_USE_EPRT | ADEVĂRAT pentru a utiliza EPRT (și LPRT) pentru încărcări FTP active. Utilizare FALS pentru a dezactiva EPRT și LPRT și utilizați numai PORT. | |
CURLOPT_FTP_USE_EPSV | ADEVĂRAT pentru testarea inițială a comenzii EPSV în timpul transferurilor FTP. Dacă comanda eșuează, va reveni la PASV. Instalați în FALS pentru a dezactiva EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | ADEVĂRAT pentru a crea directoare lipsă dacă o operațiune FTP întâlnește o cale inexistentă. | |
CURLOPT_FTPAPPEND | ADEVĂRAT pentru a scrie un fișier la distanță până la sfârșit, în loc să îl suprascrieți peste un fișier existent. | |
CURLOPT_TCP_NODELAY | Specifică permanent dacă opțiunea TCP_NODELAY ar trebui să fie setată sau ștearsă (1 = setat, 0 = șters). În mod implicit, opțiunea este ștearsă. | Disponibil din PHP 5.2.1 pentru versiunile construite cu libcurl 7.11.2 sau o versiune ulterioară. |
CURLOPT_FTPASCII | Poreclă CURLOPT_TRANSFERTEXT. Folosește asta în schimb. | |
CURLOPT_FTPLISTONLY | ADEVĂRAT pentru a returna doar o listă de nume din directorul FTP. | |
CURLOPT_HEADER | ADEVĂRAT pentru a include antete în ieșire. | |
CURLINFO_HEADER_OUT | ADEVĂRAT pentru a urmări șirul de interogare de mâner. | Disponibil începând cu PHP 5.1.3. Prefix CURLINFO_ folosit în mod specific. |
CURLOPT_HTTPGET | ADEVĂRAT pentru a reseta metoda de solicitare HTTP la metoda GET. Deoarece GET este implicit, acest parametru este necesar doar dacă metoda de solicitare a fost modificată anterior. | |
CURLOPT_HTTPPROXYTUNNEL | ADEVĂRAT pentru a tunel prin proxy-ul HTTP specificat. | |
CURLOPT_MUTE | ADEVĂRAT pentru a dezactiva complet mesajele cu funcția cURL. | Eliminat în cURL 7.15.5 (opțiunea CURLOPT_RETURNTRANSFER poate fi utilizată) |
CURLOPT_NETRC | ADEVĂRAT pentru a citi fișierul ~/.netrc pentru login și parola pentru site-ul la distanță cu care se stabilește conexiunea. | |
CURLOPT_NOBODY | ADEVĂRAT pentru a exclude corpul răspunsului din ieșire. Metoda de solicitare este setată la HEAD. Schimbând această setare în FALS nu îl schimbă înapoi în GET. | |
CURLOPT_NOPROGRESS | ADEVĂRAT pentru a dezactiva indicatorul de progres la transferurile cURL.
|
|
CURLOPT_NOSIGNAL | ADEVĂRAT pentru a ignora orice funcție cURL care trimite semnale către procesul PHP. Această opțiune este activată implicit în SAPI-urile cu mai multe fire pentru a permite parametrilor de expirare să funcționeze corect. | |
CURLOPT_POST | ADEVĂRAT pentru a utiliza HTTP POST obișnuit. Această metodă POST folosește metoda normală , folosit în mod obișnuit în formularele HTML. | |
CURLOPT_PUT | ADEVĂRAT pentru a descărca un fișier folosind metoda HTTP PUT. Fișierul utilizat trebuie setat folosind opțiunile CURLOPT_INFILEȘi CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | ADEVĂRAT pentru a returna rezultatul transferului ca șir din curl_exec()în loc de ieșire directă către browser. | |
CURLOPT_SAFE_UPLOAD | ADEVĂRAT pentru a dezactiva suportul pentru prefix @ pentru fișierele descărcate în CURLOPT_POSTFIELDS, ceea ce înseamnă că valorile trecute cu @ pot fi transmise în siguranță ca câmpuri. În loc de un prefix, puteți folosi opțiunea CURLFile d. | Adăugat în PHP 5.5.0 cu valoarea implicită FALS. În PHP 5.6.0 a devenit egal cu implicit ADEVĂRAT. |
CURLOPT_SSL_VERIFYPEER | FALS pentru a opri cURL să verifice certificatul gazdă. Certificatele alternative de verificat pot fi specificate folosind parametrul CURLOPT_CAINFO sau directorul cu certificate specificate de parametru CURLOPT_CAPATH. | Implicit este ADEVĂRAT din versiunea cURL 7.10. Distribuția implicită este instalată începând cu versiunea cURL 7.10. |
CURLOPT_TRANSFERTEXT | ADEVĂRAT pentru a utiliza modul ASCII pentru transferurile FTP. Când utilizați LDAP, datele sunt returnate în text simplu în loc de HTML. Pe sistemele Windows firul STDOUT nu se setează în modul binar. | |
CURLOPT_UNRESTRICTED_AUTH | ADEVĂRAT pentru a continua trimiterea numelui de autentificare și a parolei în timpul redirecționărilor (când utilizați CURLOPT_FOLLOWLOCATION), chiar dacă numele de gazdă se schimbă. | |
CURLOPT_UPLOAD | ADEVĂRAT pentru a se pregăti pentru încărcarea fișierului pe server. | |
CURLOPT_VERBOSE | ADEVĂRAT pentru a afișa informații suplimentare. Scrie rezultate într-un flux STDERR, sau fișierul specificat de parametru CURLOPT_STDERR. |
Pentru următoarele valori ale parametrilor de opțiune, parametrul de valoare trebuie să fie de tip întreg:
Parametru | Setați valoarea valorii | Note |
---|---|---|
CURLOPT_BUFFERSIZE | Dimensiunea buffer-ului utilizat pentru fiecare citire. Cu toate acestea, nu există nicio garanție că această solicitare va fi finalizată. | Adăugat în cURL 7.10. |
CURLOPT_CLOSEPOLICY | Una dintre constante CURLCLOSEPOLICY_*.
|
Eliminat în PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Numărul de secunde de așteptat când încercați să vă conectați. Folosiți 0 pentru a aștepta la nesfârșit. | |
CURLOPT_CONNECTTIMEOUT_MS | Numărul de milisecunde de așteptat când încercați să vă conectați. Folosiți 0 pentru a aștepta la nesfârșit. Dacă libcurl este compilat folosind soluția standard de nume a sistemului, atunci conexiunea va folosi totuși o secundă întreagă de așteptare ca timeout, cu un timeout minim permis de 1 secundă. | Adăugat în versiunea cURL 7.16.2. Disponibil începând cu PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Numărul de secunde în care înregistrările DNS sunt stocate în memorie. În mod implicit, acest parametru este 120 (2 minute). | |
CURLOPT_FTPSSLAUTH | Metoda de autentificare FTP (în modul activ): CURLFTPAUTH_SSL(SSL este verificat mai întâi), CURLFTPAUTH_TLS(TLS a verificat mai întâi) sau CURLFTPAUTH_DEFAULT(cURL decide singur). | Adăugat în versiunea cURL 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (în mod implicit, CURL alege ce versiune să folosească), CURL_HTTP_VERSION_1_0 (forță HTTP/1.0) sau CURL_HTTP_VERSION_1_1 (forță HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Puteți utiliza operatorul pe biți | (sau) să combine mai multe metode împreună. În acest caz, cURL va sonda serverul pentru metodele de autorizare acceptate și o va selecta pe cea mai bună. CURLAUTH_ANY este un alias CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE este un alias CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Dimensiunea așteptată a fișierului, în octeți, la încărcarea unui fișier pe un server la distanță. Vă rugăm să rețineți că utilizarea acestei opțiuni nu va opri trimiterea de date suplimentare peste această valoare, deoarece datele trimise depind de rezultat CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Pragul superior pentru rata de transfer de date, în octeți pe secundă. Verificarea are loc în cadrul CURLOPT_LOW_SPEED_TIME secunde, după care PHP consideră transferul prea lent și îl anulează. | |
CURLOPT_LOW_SPEED_TIME | Numărul maxim de secunde în care rata de transfer nu trebuie să depășească CURLOPT_LOW_SPEED_LIMIT, în caz contrar PHP va marca transferul ca fiind prea lent și îl va opri. | |
CURLOPT_MAXCONNECTS | Numărul maxim de conexiuni persistente. Când limita este atinsă, parametrul este utilizat pentru a determina ce conexiune să închidă. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Numărul maxim de redirecționări acceptate. Utilizați această opțiune împreună cu opțiunea CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Port de conectare alternativ. | |
CURLOPT_POSTREDIR | O mască de biți care conține 1 (301 Mutat permanent), 2 (302 Găsit) și 4 (303 Vezi altele) pentru a specifica dacă metoda HTTP POST trebuie procesată atunci când opțiunea este activată CURLOPT_FOLLOWLOCATION dacă a avut loc tipul specificat de redirecționare. | Adăugat în cURL 7.19.1. Disponibil începând cu PHP 5.3.2. |
CURLOPT_PROTOCOLE |
Masca de biți a valorilor CURLPROTO_*. Această mască limitează protocoalele utilizate de libcurl. Acest lucru vă permite să aveți libcurl să funcționeze cu un număr mare de protocoale și să limitați operarea anumitor transferuri la doar un subset al acestora. În mod implicit, libcurl utilizează toate protocoalele acceptate. Vezi și parametrul CURLOPT_REDIR_PROTOCOLE. Valori corecte ale protocolului: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAPS , CURLPROTO_DICT_RTPURL, CURLPROTO_DICT_RTPURL, CURLPROTO_RTPURL |
|
CURLOPT_PROXYAUTH | Metode de autorizare HTTP utilizate la conectarea la un server proxy. Utilizați aceleași măști de biți care au fost descrise pentru parametru CURLOPT_HTTPAUTH. În prezent, numai CURLAUTH_BASIC și CURLAUTH_NTLM sunt acceptate pentru autorizarea proxy. | Adăugat în versiunea cURL 7.10.7. |
CURLOPT_PROXYPORT | Numărul portului serverului proxy la care se face conexiunea. Acest număr poate fi setat și folosind parametrul CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Fie CURLPROXY_HTTP (implicit), fie CURLPROXY_SOCKS5 . | Adăugat în cURL 7.10. |
CURLOPT_REDIR_PROTOCOLE | Masca de biți a valorilor CURLPROTO_*. Această mască de biți limitează protocoalele utilizate de libcurl la redirecționare (cu parametrul activat CURLOPT_FOLLOWLOCATION). Acest lucru vă permite să limitați setul de protocoale utilizate la redirecționare pentru unele transmisii. În mod implicit, libcurl acceptă toate protocoalele, cu excepția FILE și SCP. În versiunile anterioare 7.19.4, redirecționarea a fost folosită pentru toate protocoalele fără excepție. Vezi și descrierea parametrilor CURLOPT_PROTOCOLE pentru o listă de constante cu valori de protocol. | Adăugat în versiunea cURL 7.19.4. |
CURLOPT_RESUME_FROM | Decalaj de pornire a transmisiei, în octeți. | |
CURLOPT_SSL_VERIFYHOST | Utilizați 1 pentru a verifica existența unui nume comun în certificatul SSL. Utilizați 2 pentru a verifica dacă numele comun există și, de asemenea, se potrivește cu gazda specificată. Într-un mediu de luptă, valoarea acestui parametru ar trebui să fie 2 (setat implicit). | Suportul pentru valoarea 1 a fost eliminat în cURL 7.28.1 |
CURLOPT_SSLVERSION | Una dintre constante 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) sau CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Metoda de interpretare a parametrilor CURLOPT_TIMEVALUE. Utilizați CURL_TIMECOND_IFMODSINCE pentru a returna pagina numai dacă aceasta s-a modificat de la ora specificată în parametru CURLOPT_TIMEVALUE. Dacă pagina nu a fost modificată, titlul va fi returnat „304 Nemodificat”, implicând că parametrul CURLOPT_HEADER instalat în ADEVĂRAT. Utilizați CURL_TIMECOND_IFUNMODSINCE pentru efectul opus. Valoarea prestabilită este CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | Numărul maxim de secunde permis pentru executarea funcțiilor cURL. | |
CURLOPT_TIMEOUT_MS | Numărul maxim de milisecunde permis pentru executarea funcțiilor cURL. Dacă libcurl este construit utilizând soluția normală de rezolvare a numelor de sistem, atunci această durată de conexiune va folosi în continuare intervale de timp pentru a doua rotunjire, cu un timeout minim permis de o secundă. | Adăugat în versiunea cURL 7.16.2. Disponibil începând cu PHP 5.2.3. |
CURLOPT_TIMEVALUE | Numărul de secunde de la 1 ianuarie 1970. Acest timp va fi folosit de parametru CURLOPT_TIMECONDITION. În mod implicit, este utilizat parametrul CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Dacă viteza de descărcare depășește această valoare (specificată în octeți pe secundă) în medie pe parcursul întregului transfer, descărcarea va fi întreruptă pentru a menține viteza medie mai mică sau egală cu acest parametru. În mod implicit, viteza nu este limitată. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Dacă încărcarea pe server depășește această valoare (specificată în octeți pe secundă) în medie pe parcursul întregului transfer, încărcarea va fi întreruptă pentru a menține o viteză medie mai mică sau egală cu acest parametru. În mod implicit, viteza nu este limitată. | Adăugat în versiunea cURL 7.15.5. Disponibil începând cu PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | O mască de biți constând din una sau mai multe constante: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Instalare CURLSSH_AUTH_ANY pentru ca libcurl să aleagă unul dintre ele în mod independent. | Adăugat în cURL 7.16.1. |
CURLOPT_IPRESOLVE | Permite unei aplicații să selecteze tipul de adresă IP cu care este determinat numele de gazdă. Acest lucru este necesar dacă utilizați un nume de gazdă care este derivat din mai multe versiuni ale adresei IP. Valorile posibile ar putea fi CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, iar implicit CURL_IPRESOLVE_WHATEVER. | Adăugat în cURL 7.10.8. |
Pentru următoarele valori ale parametrilor de opțiune, parametrul de valoare trebuie să fie de tip şir:
Parametru | Setați valoarea valorii | Note |
---|---|---|
CURLOPT_CAINFO | Numele unui fișier care conține unul sau mai multe certificate față de care vor fi verificate nodurile. Acest parametru are sens numai atunci când este utilizat împreună cu CURLOPT_SSL_VERIFYPEER. | Necesită o cale absolută. |
CURLOPT_CAPATH | Un director care conține mai multe certificate CA. Utilizați această opțiune împreună cu CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Conținutul antetului „Cookie:”, folosit în cererea HTTP. Vă rugăm să rețineți că mai multe cookie-uri sunt separate printr-un punct și virgulă urmat de un spațiu (de exemplu, " fruct=mar; culoare=roșu") | |
CURLOPT_COOKIEFILE | Numele fișierului care conține cookie-urile. Acest fișier trebuie să fie în format Netscape sau pur și simplu antete HTTP scrise în fișier. Dacă un șir gol este transmis ca nume de fișier, cookie-urile nu vor fi salvate, dar procesarea lor va fi totuși activată. | |
CURLOPT_COOKIEJAR | Numele fișierului în care vor fi salvate toate modulele cookie interne ale transferului curent după ce mânerul este închis, de exemplu după apelarea curl_close. | |
CURLOPT_CUSTOMREQUEST | Metoda de solicitare personalizată folosită în schimb "OBȚINE" sau "CAP" la efectuarea unei cereri HTTP. Acest lucru este util pentru interogări "ȘTERGE" sau alte solicitări HTTP mai rare. Sensurile corecte ar fi cuvinte ca "OBȚINE", "POST", "CONECTAȚI"și așa mai departe; acestea. Nu introduceți întreaga linie de solicitare HTTP aici. De exemplu, o indicație „GET /index.html HTTP/1.0\r\n\r\n” va fi greșit.
|
|
CURLOPT_EGDSOCKET | Ca CURLOPT_RANDOM_FILE, cu excepția faptului că numele fișierului este setat la socket-ul Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Conținutul antetului „Accept-Codificare:”. Acest lucru permite decodificarea cererii. Codificările acceptate sunt "identitate", "dezumfla"Și "gzip". Dacă este trecut un șir gol, "" , este trimis un antet care conține toate tipurile de codificare acceptate. | Adăugat în cURL 7.10. |
CURLOPT_FTPPORT | Valoarea care va fi utilizată pentru a determina adresa IP pentru comanda FTP „PORT”. Comanda „PORT” spune serverului la ce adresă IP ar trebui să se conecteze. Aceasta poate fi o adresă IP, un nume de gazdă, un nume de interfață de rețea (sub Unix) sau pur și simplu „-” pentru a utiliza adresa IP implicită a sistemului. | |
CURLOPT_INTERFACE | Numele interfeței de rețea de utilizat. Poate fi un nume de interfață, o adresă IP sau un nume de gazdă. | |
CURLOPT_KEYPASSWD | Este necesară o parolă pentru a utiliza cheia privată CURLOPT_SSLKEY sau CURLOPT_SSH_PRIVATE_KEYFILE. | Adăugat în cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Nivel de securitate KRB4 (Kerberos 4). Oricare dintre următoarele valori (în ordinea de la cel mai slab la cel mai puternic) este corectă: "clar", "sigur", "confidenţial", "privat".. Dacă șirul specificat diferă de valorile date, valoarea va fi folosită "privat". Setarea acestei opțiuni la NUL va dezactiva complet securitatea KRB4. În acest moment, securitatea KRB4 funcționează doar cu tranzacții FTP. | |
CURLOPT_POSTFIELDS | Toate datele transmise într-o solicitare HTTP POST. Pentru a transfera un fișier, specificați înainte numele fișierului @ , și, de asemenea, utilizați calea completă către fișier. Tipul de fișier poate fi specificat și folosind formatul " ;tip=tip mime" după numele fișierului. Acest parametru poate fi transmis ca șir codificat în url, cum ar fi " para1=val1¶2=val2&...„, și sub forma unei matrice, ale cărei chei vor fi numele câmpurilor, iar valorile vor fi conținutul lor. Dacă valoarea este o matrice, antetul Tipul de conținut va fi setat la multipart/form-data. Începând de la PHP 5.2.0, la transferul fișierelor cu prefix @ , valoarea trebuie să fie o matrice. De la PHP 5.5.0, prefix @ este depreciat și fișierele pot fi trimise folosind CURLFile. Prefix @ poate fi dezactivat pentru a permite valori care încep cu @ prin setarea opțiunii CURLOPT_SAFE_UPLOADîn sens ADEVĂRAT. | |
CURLOPT_PROXY | Proxy HTTP prin care vor fi direcționate cererile. | |
CURLOPT_PROXYUSERPWD | Login și parola scrise în formular ":" , folosit la conectarea printr-un proxy. | |
CURLOPT_RANDOM_FILE | Numele fișierului folosit pentru a inițializa generatorul de numere aleatorii pentru SSL. | |
CURLOPT_RANGE | Gama de date de descărcat, în format "X Y", și fie X, fie Y pot fi omise. Protocolul HTTP suportă și transmiterea mai multor intervale separate prin virgule, acestea fiind specificate în format "X-Y,N-M". | |
CURLOPT_REFERER | Conținutul antetului „Referitor:”, care va fi folosit în cererea HTTP. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Un șir care conține 32 de cifre hexazecimale. Șirul trebuie să fie o sumă de control MD5 a cheii publice a computerului la distanță, iar libcurl va reseta conexiunea la gazda la distanță până când suma de control se potrivește cu cheia publică. Această opțiune este doar pentru transferul de date folosind SCP și SFTP. | Adăugat în cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Numele fișierului pentru cheia publică. Dacă nu este specificat, libcurl folosește implicit fișierul $HOME/.ssh/id_dsa.pub dacă variabila de mediu HOME este setată și fișierul „id_dsa.pub” în directorul curent dacă variabila de mediu HOME nu este setată. | Adăugat în cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Numele fișierului pentru cheia dvs. privată. Dacă nu este specificat, libcurl este implicit la fișierul $HOME/.ssh/id_dsa dacă variabila de mediu HOME este setată și fișierul „id_dsa” în directorul curent dacă variabila de mediu HOME nu este setată. Dacă fișierul este protejat cu parolă, setați parola folosind CURLOPT_KEYPASSWD. | Adăugat în cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Lista de cifruri utilizate în transferurile SSL. De exemplu, RC4-SHAȘi TLSv1 sunt liste de cifrare valide. | |
CURLOPT_SSLCERT | Numele unui fișier cu un certificat PEM formatat corect. | |
CURLOPT_SSLCERTPASSWD | Este necesară parola pentru a utiliza certificatul CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Format de certificat. Formate acceptate "PEM"(Mod implicit), „DER”Și "ENG". | Adăugat în versiunea cURL 7.9.3. |
CURLOPT_SSLENGINE | ID-ul motorului de criptare pentru cheia privată SSL specificată în parametru CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Identificatorul mecanismului de criptare utilizat pentru operațiunile de criptare asimetrică. | |
CURLOPT_SSLKEY | Numele fișierului cheii private SSL. | |
CURLOPT_SSLKEYPASSWD | Parola secretă necesară pentru a utiliza cheia privată SSL specificată de parametru CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Tipul de cheie privată SSL specificată în parametru CURLOPT_SSLKEY. Sunt acceptate următoarele tipuri de chei: "PEM"(Mod implicit), „DER”Și "ENG". | |
CURLOPT_URL | URL descărcabil. Acest parametru poate fi setat și la inițializarea unei sesiuni folosind curl_init(). | |
CURLOPT_USERAGENT | Conținutul antetului "Agent utilizator: ", trimis într-o solicitare HTTP. | |
CURLOPT_USERPWD | Login și parola utilizate în timpul conexiunii, specificate în format ":" . |
Pentru următoarele valori ale parametrilor de opțiune, parametrul de valoare trebuie să fie o matrice:
Parametru | Setați valoarea valorii | Note |
---|---|---|
CURLOPT_HTTP200ALIASES | O serie de răspunsuri HTTP 200 care vor fi tratate mai degrabă drept răspunsuri corecte decât eronate. | Adăugat în versiunea cURL 7.10.3. |
CURLOPT_HTTPHEADER | O matrice de anteturi HTTP setate, în formatul matrice ("Content-type: text/plain", "Content-length: 100") | |
CURLOPT_POSTQUOTE | O serie de comenzi FTP executate pe server după finalizarea unei cereri FTP. | |
CURLOPT_QUOTE | O serie de comenzi FTP executate pe server înainte de a face o solicitare FTP. |
Pentru următoarele valori ale parametrilor opțiunii, parametrul valoare trebuie să fie un handle de flux (returnat, de exemplu, de funcția fopen()):
Parametru | Setați valoarea valorii |
---|---|
CURLOPT_FILE | Fișierul în care va fi scris rezultatul transferului. Flux de ieșire implicit STDOUT(fereastra browserului). |
CURLOPT_INFILE | Fișierul din care trebuie citite datele atunci când sunt încărcate pe server. |
CURLOPT_STDERR | Fișier alternativ de ieșire de eroare utilizat în locul fluxului de erori STDERR. |
CURLOPT_WRITEHEADER | Fișierul în care vor fi scrise anteturile operației curente. |
Pentru următoarele valori ale parametrilor de opțiune, parametrul de valoare trebuie să fie un nume de funcție sau o închidere validă:
Parametru | Setați valoarea valorii |
---|---|
CURLOPT_HEADERFUNCTION | Funcția de apel invers ia doi parametri. Primul parametru este mânerul cURL, al doilea parametru este un șir care conține anteturile care urmează să fie scrise. Anteturile trebuie scrise folosind această funcție de apel invers. Ar trebui să returneze numărul de octeți scrisi. |
CURLOPT_PASSWDFUNCTION | Funcția de apel invers ia trei parametri. Primul parametru este mânerul cURL, al doilea parametru este șirul prompt al parolei, iar al treilea parametru este lungimea maximă a parolei. Ar trebui să returneze un șir care să conțină parola. |
CURLOPT_PROGRESSFUNCTION |
Funcția de apel invers ia cinci parametri. Primul este descriptorul cURL, al doilea este numărul total de octeți care se preconizează a fi descărcați de pe server, al treilea este numărul de octeți deja descărcați, al patrulea este numărul total de octeți care urmează să fie trimiși către server și al cincilea este numărul de octeți deja trimiși.
Puteți returna o valoare diferită de zero pentru a anula transferul. În acest caz, va fi afișată o eroare CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Funcția de apel invers ia trei parametri. Primul parametru este mânerul cURL, al doilea parametru este resursa fluxului transmis către cURL prin opțiunea CURLOPT_INFILE, iar al treilea parametru este cantitatea maximă permisă de date de citit. Funcția de apel invers trebuie să returneze un șir de lungime nu mai mare decât cantitatea de date solicitată, de obicei prin citirea din resursa de streaming transmisă. Ar trebui să returneze un șir gol pentru a semnala sfârșitul fișierului EOF. |
CURLOPT_WRITEFUNCTION | Funcția de apel invers ia doi parametri. Primul parametru este mânerul cURL, iar al doilea parametru este șirul care conține datele de scris. Datele trebuie salvate folosind această funcție. Trebuie să returneze numărul exact de octeți scriși, altfel descărcarea va fi anulată cu o eroare. |
Alte semnificații:
Valori returnate
Se intoarce ADEVĂRAT la finalizarea cu succes sau FALSîn cazul unei erori.
Lista modificărilor
Versiune | Descriere |
---|---|
5.6.0 | Opțiune CURL_SAFE_UPLOAD acum are o valoare implicită de ADEVĂRAT. |
5.6.0 | Opțiune eliminată CURLOPT_CLOSEPOLICYși semnificațiile asociate acesteia. |
5.5.0 | Resursa cURL este adăugată ca prim argument la funcția de apel invers CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Opțiune adăugată CURLOPT_SHARE. |
5.3.0 | Opțiune adăugată CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Opțiuni adăugate CURLOPT_PROTOCOLEȘi CURLOPT_REDIR_PROTOCOLE. |
5.1.0 | Opțiuni adăugate CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTHȘi CURLOPT_TIMECONDITION. |
5.0.0 | Opțiuni adăugate CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPEȘi CURLOPT_HTTP200ALIASES. |
Exemple
Exemplul #1 Inițializarea unei sesiuni CURL și încărcarea unei pagini web
// creează o nouă resursă cURL /* http://localhost/upload.php: $ch = curl_init(); $date = array("name" => "Foo" , "file" => "@/home/user/test.png" ); Curl_setopt($ch, CURLOPT_URL, „http://localhost/upload.php”); Curl_exec($ch); Rezultatul rulării acestui exemplu: Matrice ( => Foo) Matrice ( => Matrice ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) cometariu: Transmiterea unei matrice către CURLOPT_POSTFIELDS codifică datele ca multipart/form-data, în timp ce trecerea unui șir codificat în URL va codifica datele ca application/x-www-form-urlencoded. cURL este un instrument care vă permite să interacționați cu diverse servere și acceptă multe protocoale: HTTP, FTP, TELNET etc. cURL este inițial un utilitar de linie de comandă. Dar, din fericire pentru noi, PHP acceptă lucrul cu biblioteca cURL. În acest articol ne vom uita la exemple non-triviale de lucru cu cURL. De fapt, există multe alte modalități de a trimite o solicitare către un alt server pentru, de exemplu, a prelua conținutul unei pagini. Mulți oameni, mai ales din lene, folosesc funcții PHP simple în loc de cURL: $content = file_get_contents("http://www.example.com"); // sau $linii = fisier("http://www.example.com"); // sau readfile ("http://www.example.com"); Cu toate acestea, ele nu permit o gestionare eficientă a erorilor. Există, de asemenea, o serie de sarcini pe care nu le pot face deloc - de exemplu, lucrul cu cookie-uri, autorizarea, postarea solicitărilor, descărcarea fișierelor. cUrl este un instrument puternic care acceptă mai multe protocoale și oferă informații complete de solicitare. Înainte de a trece la exemple complexe, să ne uităm la structura de bază a unei cereri cURL în PHP. Pentru a efectua o solicitare cURL în PHP, trebuie să parcurgeți 4 pași principali: În mare parte, ne vom uita la pasul #2 din acest articol, deoarece acolo se întâmplă magia. Lista opțiunilor cURL este foarte mare, așa că nu vom lua în considerare toate opțiunile astăzi, ci le vom folosi pe cele care sunt utile pentru rezolvarea unor probleme specifice. Dacă este necesar, puteți adăuga următoarele linii pentru a urmări erorile: // ... $ieșire = curl_exec($ch); if ($ieșire === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ... Vă rugăm să rețineți că folosim „===” în loc de „==” deoarece Este necesar să se facă distincția între un răspuns de server gol și valoarea booleană FALSE, care este returnată în cazul unei erori. Un alt pas opțional este obținerea de informații despre cererea cURL după ce aceasta a fost executată. // ... curl_exec($ch); $info = curl_getinfo($ch); ecou „Luat” . $info["total_time"] . „secunde pentru url”. $info["url"]; // ... Ca rezultat, veți primi o matrice cu următoarele informații: În acest exemplu, vom scrie un script care va detecta redirecționările pe baza diferitelor setări ale browserului. De exemplu, unele site-uri redirecționează vizitatorii de pe dispozitive mobile către vizitatori din alte țări. Vom folosi opțiunea CURLOPT_HTTPHEADER pentru a ne seta propriile anteturi, inclusiv User-Agent și Language, și pentru a vedea unde ne redirecționează site-urile. // URL-uri $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // browsere $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" => array ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU ca Mac OS X; ro) AppleWebKit/420+ (KHTML, cum ar fi Gecko) Versiunea/3.0 Mobile/1A537a Safari/419.3", "limba" => "en"), "franceză" => matrice ("user_agent" = > "Mozilla/4.0 (compatibil; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "limba" => "fr,fr-FR;q=0.5"); foreach ($urls ca $url) ( echo "URL: $url\n"; foreach ($browsers ca $test_name => $browser) ( $ch = curl_init(); // setați adresa curl_setopt($ch, CURLOPT_URL) , $url); // indică browserul și limba folosită curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["language" ]) ")); // nu avem nevoie de conținutul paginii curl_setopt($ch, CURLOPT_NOBODY, 1); // avem nevoie doar de anteturi curl_setopt($ch, CURLOPT_HEADER, 1); // returnăm rezultatul în schimb a ieșirii sale curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // definiți redirecționări în antetele HTTP? if (preg_match("!Locație: (.*)!") , $ieșire, $potriviri)) ( echo „$nume_test: redirecționează către $potriviri\n”; ) else ( echo „$nume_test: fără redirecționare\n”; ) ) echo „\n\n”; ) Într-o buclă, verificăm browserele pentru fiecare URL. Mai întâi setăm opțiunile pentru cererea noastră: URL și browser și limba de testat. Deoarece Am setat o opțiune specială; rezultatul solicitării va conține doar anteturi HTTP. Folosind o expresie regulată simplă, putem verifica dacă răspunsul conține șirul „Locație:”. Rezultatul execuției scriptului: URL: http://www.cnn.com standard: redirecționează către http://edition.cnn.com/ iphone: redirecționează către http://edition.cnn.com/ Franceză: redirecționează către http://edition.cnn .com/ URL: http://www.mozilla.com standard: redirecționează către https://www.mozilla.org/firefox/ iphone: redirecționează către https://www.mozilla.org/firefox/ franceză: redirecționează către https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: redirecționează către https://www.facebook.com/ iphone: redirecționează către http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Franceză: fără redirecționare La efectuarea cererilor GET, datele pot fi transmise în șirul de interogare. De exemplu, atunci când căutați pe Google, interogarea dvs. este tradusă într-o adresă URL: http://www.google.com/search?q=google Pentru a obține rezultatul acestei interogări, nici măcar nu aveți nevoie de cURL, puteți fi leneș și puteți utiliza „file_get_contents()”. Dar unele formulare HTML folosesc metoda POST. În acest caz, datele sunt trimise în corpul mesajului de solicitare, mai degrabă decât în URL-ul în sine. Să scriem un script care va trimite solicitări POST. Mai întâi, să creăm un fișier PHP simplu care va accepta aceste solicitări și va returna datele trimise acestuia. Să-i spunem post_output.php : $url = "http://localhost/post_output.php"; $post_data = matrice ("foo" => "bar", "query" => "FooBar", "action" => "Trimite"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // face o cerere POST curl_setopt($ch, CURLOPT_POST, 1); // adaugă date curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $ieșire = curl_exec($ch); curl_close($ch); echo $ieșire; Acest script va scoate: Array ( => bar => FooBar => Trimite) Acest script a trimis o solicitare POST către fișierul post_output.php. care a scos conținutul matricei $_POST și am primit acest răspuns folosind cURL. La fel ca în exemplul anterior, să creăm un fișier care va accepta cereri, upload_output.php : Print_r($_FILES); Și scriptul în sine care descarcă fișierele: $url = "http://localhost/upload_output.php"; $post_data = matrice ("foo" => "bar", // fișier de încărcat "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); $ieșire = curl_exec($ch); curl_close($ch); echo $ieșire; Dacă doriți să încărcați un fișier, tot ce trebuie să faceți este să treceți calea către acesta, la fel ca un parametru de solicitare POST normal, prefixat cu „@”. Rezultatul scenariului: Array ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Una dintre caracteristicile avansate ale cURL în PHP este capacitatea de a executa mai multe solicitări simultan și asincron. În condiții normale, scriptul se oprește și așteaptă finalizarea cererii. Și dacă trebuie să executați o mulțime de interogări, poate dura mult timp, deoarece... vei executa secvenţial. Această limitare poate fi ocolită: // creează handlere $ch1 = curl_init(); $ch2 = curl_init(); // setați opțiunile 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); //creează mânerul cURL multiplu $mh = curl_multi_init(); // adaugă handlere curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // execută cereri do ( curl_multi_exec($mh, $running); ) while ($running > 0); // eliberează resurse curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Ideea este că puteți crea mai multe mânere cURL, să le combinați sub un singur mâner și să le executați asincron. În primul rând, totul este la fel ca cu o solicitare cURL obișnuită - este creat un descriptor ( curl_init()
), parametrii sunt setați ( curl_setopt()
). În continuare, este creat un multi-descriptor ( curl_multi_init()
) și se adaugă descriptorii obișnuiți creați anterior ( curl_multi_add_handle()
). În loc să apelăm curl_exec() în mod normal, vom apela curl_multi_exec()
această funcție ne informează despre numărul de conexiuni active folosind al doilea parametru - $running. Prin urmare, bucla rulează până când $running devine egal cu 0. Și, desigur, după terminarea lucrării, este necesar să eliberați resurse. În acest exemplu, pur și simplu trimitem rezultatul interogărilor către STDOUT. Să luăm în considerare un caz non-trivial de utilizare a mai multor cURL. Imaginați-vă un blog cu o mulțime de postări care conțin link-uri către site-uri externe. Este posibil ca unele dintre aceste link-uri să nu funcționeze. Să scriem un script care va găsi toate linkurile rupte și ni le va arăta. În primul rând, trebuie să extragem toate linkurile externe din baza de date: // CONFIG $db_host = "localhost"; $db_user = „rădăcină”; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "site"); $max_connections = 10; $url_list = matrice(); $working_urls = array(); $dead_urls = array(); $not_found_urls = array(); $activ = nul; // se conectează la MySQL dacă (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Nu s-a putut conecta: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Poate nu selectează db: " . mysql_error()); ) // preia toate postările cu link-uri în text $q = "SELECTează post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post " "; $r = mysql_query($q) sau die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // colectează toate linkurile folosind expresia regulată if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $match )) ( foreach ($se potrivește ca $url) ( // filtrează domeniile inutile $tmp = parse_url($url); if (isset($tmp["gazdă"]) && in_array($tmp["gazdă"], $ excluded_domains)) ( continua; ) // aduna $url_list = $url; ) ) ) // elimina repetitiile $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Fără URL de verificat"); ) În această parte a scriptului, pur și simplu scoatem toate linkurile externe din baza de date. Să le verificăm: $mh = curl_multi_init(); // 1. adăugați linkuri pentru ($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 "==Adrese URL moarte==\n"; echo implode("\n", $dead_urls) . „\n\n”; echo „==404 URL-uri==\n”; echo implode ("\n", $nu_found_urls) . „\n\n”; echo "==Adrese URL de lucru==\n"; echo implode("\n", $working_urls); ecou „\n\n”; // 9. adaugă un handle cu funcția URL dată add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // dacă mai există linkuri dacă (isset($url_list[$index])) ( // totul este ca de obicei $ ch = curl_init(); // setați opțiunile curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // returnează mai degrabă decât afișa rezultatul curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // permite redirecționează curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // obține doar antete pentru a economisi timp curl_setopt($ch, CURLOPT_NOBODY, 1); // adaugă la multi-mâner curl_multi_add_handle($mh, $ch); $index++; ) ) Să ne uităm la cod mai detaliat (numerotarea corespunde comentariilor din cod): Să rulăm scriptul: Adrese URL moarte== xample1234.com/ ==404 URL-uri== www.google.com/dsfasdfafd ==Adrese URL de lucru== 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 Verificarea a durat aproximativ 2 secunde. Prin rularea a 10 fire simultan, performanța crește de 10 ori în comparație cu solicitările cURL obișnuite. Pentru a obține conținutul răspunsului serverului, utilizați funcția curl_multi_getcontent($ch)
, unde $ch este un descriptor obținut din curl_multi_info_read()
. Dacă solicitarea HTTP necesită autentificare, utilizați următorul cod: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // trimite numele de utilizator și parola curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // dacă sunt permise redirecționări curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL va trimite parola după redirecționări curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $ieșire = curl_exec($ch); curl_close($ch); PHP are propria sa bibliotecă pentru lucrul cu FTP, dar puteți folosi și cURL: // citește fișierul $fișier = fopen("/cale/la/fișier", "r"); // url conține deja datele necesare $url = "ftp://nume utilizator: [email protected]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // opțiuni curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, dimensiunea fișierelor("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch); Solicitările pot fi făcute printr-un proxy specific: $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"); // dacă este necesară autorizarea curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $ieșire = curl_exec($ch); curl_close($ch); Este posibil să utilizați apeluri inverse în timp ce cererea rulează, fără a aștepta finalizarea acesteia. De exemplu, în timp ce răspunsul serverului este descărcat, putem folosi datele deja primite fără a aștepta descărcarea completă. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"funcție_progres"); curl_exec($ch); curl_close($ch); function progress_function($ch,$str) ( echo $str; return strlen($str); ) Funcția de apel invers trebuie să returneze lungimea șirului pentru ca cererea să funcționeze corect. De fiecare dată când se primește următoarea parte a răspunsului serverului, va fi apelat înapoi. În acest articol, ne-am uitat la caracteristicile avansate ale cURL în PHP. Data viitoare când trebuie să faceți solicitări URL, utilizați cURL. De multe ori trebuie să descărcam diverse fișiere de pe Internet, de exemplu, fișiere de program executabile, fișiere script, arhive sursă. Dar acest lucru nu trebuie făcut întotdeauna prin intermediul browserului. În multe situații este mult mai ușor să efectuați toate acțiunile prin intermediul terminalului. Pentru că astfel poți automatiza procesul. Pe de altă parte, webmasterii din când în când trebuie să testeze accesibilitatea site-ului web, să verifice anteturile trimise și primite și multe altele. Pentru a rezolva astfel de probleme și probleme dintr-o gamă similară, puteți utiliza utilitarul curl. Vă permite să rezolvați o gamă mult mai largă de probleme, inclusiv simularea acțiunilor utilizatorului pe site. În acest articol ne vom uita la cum să folosiți curl, ce este și de ce este necesar acest program. De fapt, curl este mai mult decât un utilitar de linie de comandă pentru Linux sau Windows. Acesta este un set de biblioteci care implementează capabilitățile de bază de lucru cu pagini URL și transfer de fișiere. Biblioteca acceptă lucrul cu protocoale: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, precum și POP3, IMAP și SMTP. Este excelent pentru a simula acțiunile utilizatorului pe pagini și alte operațiuni cu adrese URL. Suportul pentru biblioteca curl a fost adăugat la multe limbaje și platforme de programare diferite. Utilitarul curl este un înveliș independent pentru această bibliotecă. Este acest utilitar pe care ne vom concentra în acest articol. Înainte de a trece la o descriere a modului în care poate fi utilizată comanda curl linux, să ne uităm la utilitarul în sine și la opțiunile sale principale de care vom avea nevoie. Sintaxa utilitarului este foarte simplă: link pentru opțiuni curl $ Acum să ne uităm la opțiunile principale: Acestea nu sunt în niciun caz toate opțiunile pentru curl linux, dar listează elementele de bază pe care va trebui să le utilizați. Am acoperit tot ce ține de teoria lucrului cu utilitarul curl, acum este timpul să trecem la practică și să privim exemple ale comenzii curl. Cea mai comună sarcină este aceasta. Descărcarea fișierului este foarte simplă. Pentru a face acest lucru, trebuie doar să transmiteți numele fișierului sau pagina html utilitarului în parametri: curl https://raw.githubusercontent.com/curl/curl/master/README.md Dar aici vă așteaptă o surpriză: întregul conținut al fișierului va fi trimis la ieșire standard. Pentru a-l scrie în orice fișier, utilizați: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md Și dacă doriți ca fișierul rezultat să fie numit la fel ca fișierul de pe server, utilizați opțiunea -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 Dacă este necesar, puteți descărca mai multe fișiere cu o singură comandă: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Un alt lucru care poate fi util pentru un administrator este să descarce un fișier numai dacă acesta a fost modificat: curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Puteți limita viteza de descărcare la limita necesară pentru a nu supraîncărca rețeaua folosind opțiunea -Y: curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Aici trebuie să specificați numărul de kiloocteți pe secundă care pot fi descărcați. De asemenea, puteți închide conexiunea dacă viteza nu este suficientă, utilizați opțiunea -Y pentru a face acest lucru: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ Sau să verificăm dacă fișierul este trimis prin HTTP; există un serviciu special pentru asta: curl -T ~/login.txt http://posttestserver.com/post.php În răspuns, utilitarul vă va spune unde puteți găsi fișierul descărcat. Puteți trimite nu numai fișiere, ci și orice date folosind metoda POST. Permiteți-mi să vă reamintesc că această metodă este folosită pentru a trimite date de diferite forme. Pentru a trimite o astfel de solicitare, utilizați opțiunea -d. Pentru testare vom folosi același serviciu: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Dacă nu sunteți mulțumit de această opțiune de trimitere, puteți pretinde că trimiteți formularul. Există o opțiune pentru aceasta -F: curl -F "parolă=@pass;type=text/plain" http://posttestserver.com/post.php Aici trecem câmpul de parolă cu formularul ca text simplu, la fel poți trece mai mulți parametri. Cookie-urile sunt folosite de site-uri web pentru a stoca anumite informații din partea utilizatorului. Acest lucru poate fi necesar, de exemplu, pentru autentificare. Puteți trimite și primi cookie-uri folosind curl. Pentru a salva cookie-urile primite într-un fișier, utilizați opțiunea -c: curl -c cookie.txt http://posttestserver.com/post.php Apoi puteți trimite cookie-ul curl înapoi: curl -b cookie.txt http://posttestserver.com/post.php Nu întotdeauna avem nevoie de conținutul paginii. Uneori doar titlurile pot fi interesante. Pentru a le afișa numai acestea există opțiunea -I: curl -I https://site Și opțiunea -H vă permite să trimiteți mai multe sau mai multe către server, de exemplu, puteți trece antetul If-Modified-Since, astfel încât pagina să fie returnată numai dacă a fost modificată: Dacă serverul necesită unul dintre tipurile comune de autentificare, cum ar fi HTTP Basic sau FTP, atunci curl poate gestiona această sarcină foarte ușor. Pentru a specifica detaliile de autentificare, pur și simplu le specificați separate prin două puncte în opțiunea -u: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt Autentificarea pe serverele HTTP va fi efectuată în același mod. Dacă trebuie să utilizați un server proxy pentru a descărca fișiere, atunci și acest lucru este foarte simplu. Este suficient să specificați adresa serverului proxy în opțiunea -x: curl -x proxysever.test.com:3128 http://google.co.in În acest articol, am analizat cum să folosiți curl, de ce este necesar acest utilitar și principalele sale capacități. În ciuda asemănării lor cu, ele sunt foarte diferite. Comanda curl linux este concepută mai mult pentru analiza și simularea diferitelor acțiuni pe server, în timp ce wget este mai potrivit pentru descărcarea fișierelor și accesarea cu crawlere a site-urilor. Acest articol va vorbi despre un instrument atât de puternic precum cURL, precum și despre biblioteca pentru PHP care oferă acces la acest instrument - libcurl. Pentru ce sunt toate acestea? Pentru a comunica cu serverul utilizând protocoale de transfer de date, de exemplu, http sau ftp. Restul protocoalelor nu sunt deosebit de interesante pentru noi; dacă cineva dorește să aprofundeze acest subiect, va trebui să dezgroape resurse în limba engleză, iar acest articol va conține elementele de bază și exemple de utilizare. Deci, biblioteca libcurl ne oferă capacitatea de a transmite date către server și de a primi răspunsuri de la acesta. Ce ne oferă asta? Abilitatea de a emula comportamentul utilizatorului sau ! Puteți primi conținutul paginilor pentru o analiză ulterioară, puteți primi anteturi de răspuns ale serviciului și puteți să vă conectați programatic pe site-uri, să creați scripturi pentru postarea de mesaje (de exemplu, pe Twitter sau pe forumuri) sau informații. Totul este limitat doar de imaginația ta! Primul lucru pe care trebuie să-l facem este să instalăm biblioteca. Pe computerul meu local folosesc versiunea Denwer, ca marea majoritate a webmasterilor începători, cărora le este destinat articolul. Utilizatorii experimentați care instalează în mod independent combinația php+apache+mysql vor putea instala cURL, nu este pentru mine să le explic cum se face acest lucru;) Iar noi, începătorii, folosim soluții gata făcute pentru a le ușura. Prin urmare, instalați libcurl după cum urmează: și eliminați punctul și virgulă de la începutul termenilor: ;extension=php_curl.dll Gata. Pentru a verifica funcționalitatea bibliotecii, puteți apela funcția phpinfo() și găsiți linia acolo: suportul cURL activat. Felicitări pentru prima ta victorie. Pentru a începe lucrul cu instrumentul, acesta trebuie să fie inițializat. Acest lucru se face după cum urmează: $ch = curl_init(); Am folosit funcția de inițializare a sesiunii cURL. În acest caz, puteți seta adresa URL imediat, astfel: $ch = curl_init("https://site-ul"); Și poți face asta mai târziu, în opțiuni. Ordinea în care sunt instalate opțiunile nu contează. Aceasta se realizează printr-o altă funcție: Curl_setopt (ch resursă, opțiune șir, valoare mixtă) Am creat deja primul parametru al acestei funcții, adică resursa ch, chiar mai sus, dar există o mulțime de parametri de opțiune și valoare. Cred că nu ar trebui să le copiați-lipiți pe toate aici, ci doar să dați un link către o descriere detaliată a funcției, sper că nimeni nu va fi jignit: curl_setopt. Voi da un exemplu de setare a opțiunilor folosind o adresă URL ca exemplu: $url = "https://site-ul"; curl_setopt($ch, CURLOPT_URL,$url); Încă câteva exemple de opțiuni de setare: să obținem antetul de răspuns al serverului, fără a obține pagina în sine: Curl_setopt($ch, CURLOPT_HEADER, 1); // citește antetul curl_setopt($ch, CURLOPT_NOBODY, 1); // citește DOAR antetul fără corp Deci, am initializat sesiunea, am setat parametrii de care avem nevoie, acum executam cererea rezultata, inchidem sesiunea si afisam rezultatul: $rezultat = curl_exec($ch); curl_close($ch); echo $rezultat; Ca rezultat, obținem primul nostru exemplu complet funcțional de utilizare a bibliotecii libcurl: $ch = curl_init(); $url = "https://site-ul"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // citește antetul curl_setopt($ch, CURLOPT_NOBODY, 1); // citeste DOAR antetul fara corpul $rezultat = curl_exec($ch); curl_close($ch); echo $rezultat; Cum funcționează, sper, este clar, pentru că ne-am uitat la fiecare pas separat :) Drept urmare, primim de la server un antet de răspuns HTTP, pe care cu siguranță îl vom analiza mai jos pentru a înțelege mai bine toate etapele de interacțiune dintre browserul si serverul: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Fabulos! Am primit antetul de răspuns de la server și am testat biblioteca în acțiune. Cum ne este util acest lucru? Pentru că acum vă puteți imagina aproximativ secvența de acțiuni atunci când lucrați cu cURL: De exemplu, am apelat la pagina ya.ru și m-am uitat la cererea generată de browser și răspunsul primit de la server. Aici sunt ei: Cred că, după ce unele puncte generale sunt deja clare și totul pare să fie clar, atunci este timpul să treceți la exersare și să vă perfecționați abilitățile folosind exemplul. Personal, mâinile mele sunt mereu mâncărime să încerc totul în practică :) Deoarece cURL este atât de bun pentru analizatori, să luăm în considerare funcția de obținere a codului paginii după adresa sa. În acest caz, rezultatul va fi o matrice cu titlul, conținutul paginii și chiar coduri de eroare dacă ceva nu merge bine. Funcția get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // returnează pagina web curl_setopt($ch, CURLOPT_HEADER, 0); // nu returnează antetele curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // urmează redirecționările curl_setopt($ch, CURLOPT_ENCODING, ""); // procesează toate codificările curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // expirare conexiune curl_setopt($ch, CURLOPT_TIMEOUT, 120); // timp de răspuns curl_MAXSIROPT($ch, CURLOPT_TIMEOUT, 120); , 10); // opriți după a 10-a redirecționare $conținut = 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["conținut"] = $conținut; returnează $header; ) Parametrii de intrare: Folosim funcția, de exemplu, astfel: $rezultat = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $pagina = $result["conținut "]; eco $pagina; ) Totul ar trebui să meargă fără erori și veți primi codul paginii în variabila $page. Dacă încercăm să obținem pagina inexistentă yaaaaaaaaaaaa.ru, vom primi eroarea: Nu s-a putut rezolva gazda: yaaaaaaaaaaaa.ru; Gazda de negasit Totul este procesat corect și frumos :) JavaScript este blocat în browserul dvs. Vă rugăm să activați JavaScript pentru ca site-ul să funcționeze! PHP acceptă libcurl, o bibliotecă creată de Daniel Stenberg care vă permite să vă conectați la diferite tipuri de servere și protocoale. Aceste funcții au fost introduse în PHP 4.0.2. curl_init - inițializează o sesiune CURL. resursă curl_init() Funcţie curl_init() inițializează o nouă sesiune și returnează un handle CURL pentru a fi utilizat în funcțiile și. Dacă parametrul opțional url este furnizat, atunci opțiunea CURLOPT_URL va primi valoarea acestui parametru. Îl puteți instala manual folosind . curl_setopt - setează opțiuni pentru transferul/transferul CURL. bool curl_setopt(resursă ch, opțiune șir, valoare mixtă) Funcţie curl_setopt() setează opțiuni pentru sesiunea CURL identificată de parametru cap. Parametru opțiune este opțiunea pe care doriți să o setați și valoare aceasta este valoarea opțiunii opțiune . Parametru valoare trebuie să fie lung pentru următoarele opțiuni (specificate de parametru opțiune): Parametru valoare trebuie să fie un șir pentru următoarele valori ale parametrilor opțiune : Următoarele opțiuni așteaptă un descriptor de fișier, care este obținut folosind funcția fopen() : Parametru valoare lung write_callback (resursa ch, șir de date)( ... returnează strlen($date);) opțiune : Parametru valoare ar trebui să fie o funcție de următoarea formă șir de caractere read_callback (resursa ch, resursa fd, lungime lungă)() pentru următoarele valori ale parametrilor opțiune : curl_exec - execută o sesiune CURL. bool curl_exec(resursa ch) Această funcție ar trebui apelată după ce ați inițializat o sesiune CURL și toate opțiunile pentru acea sesiune au fost deja setate. Scopul său este pur și simplu de a executa o sesiune CURL predefinită (specificată în parametrul cap). curl_close - închide sesiunea CURL. vid curl_close(resursa ch) Această funcție închide sesiunea CURL și eliberează toate resursele. Mânerul CURL cap este de asemenea șters. curl_errno - returnează un număr întreg care conține ultimul număr de eroare. Dacă trebuie să trimiteți o matrice multidimensională și un fișier într-o solicitare POST, veți întâlni o problemă insolubilă. Dacă transmiteți o matrice multidimensională către CURLOPT_POSTFIELDS, al doilea nivel va fi transmis ca șirul „Matrice”. Dacă convertiți folosind http_build_query, nu veți putea transfera fișierul. Mai jos este o funcție pentru codificarea unei matrice bidimensionale cu încărcare de fișiere pentru Curl, care va funcționa în ambele versiuni mai vechi de PHP 5.3, PHP 5.4 și PHP 5.6 /** convertește o matrice multidimensională într-o matrice unidimensională folosind indecși complecși și înlocuiește @ din prefix cu CurlFile pentru utilizare în Curl * @param $inputArray * @param șir $inputKey * @return array $requestVars = array ("id" => array( 1, 2,"id" => 1234), "name" => "jurnal", "logfile" => "@/tmp/test.log"); obținem: ["id"] => int(1) ["id"] => int(2) ["id"] => int(1234) ["nume"] => string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ function convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray ca $key => $valoare ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $cheie; if (este_matrice($valoare)) ( $resultArray+=convertToStringArray($valoare, $tmpKey); ) elseif ($valoare) = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? CurlFile nou(ltrim($valoare, "@")) : $valoare; ) else ( $resultArray[$tmpKey ] = $valoare; ) ) returnează $resultArray; ) // verifica $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile" " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, „site”); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Exemple de aplicare de utilizare a Curl
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $date);
?>
Note
De ce cURL?
Noțiuni de bază pentru curl
// 1. initializare $ch = curl_init(); // 2. setați opțiuni, inclusiv URL curl_setopt($ch, CURLOPT_URL, „http://www.google.com”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. executarea cererii și primirea răspunsului $output = curl_exec($ch); // 4. resurse de curățare curl_close($ch); Urmărirea erorilor
Obținerea de informații despre o solicitare
Urmărirea redirecționării, în funcție de browser
Trimiterea cererilor POST
Încărcarea fișierelor
Multi cURL
Verificarea linkurilor externe în WordPress
Alte caracteristici cURL în PHP
Autentificare HTTP
Încărcați prin FTP
Folosind un proxy
Funcții de apel invers
Concluzie
comanda curl
Cum se folosește curl?
Limită de viteză
Transferarea fișierelor
Se trimite date POST
Trimiterea și primirea cookie-urilor
Transmiterea și analiza antetului
autentificare curl
Folosind un proxy
concluzii
Ce sunt exact cURL și libcurl? Puncte generale
Instalarea cURL pe Denwer (Denver). Cum să începeți să utilizați libcurl?
Descrierea cURL și primii pași
Structura antetului cererii HTTP
Cerere
GET / HTTP/1.1 - Încercăm să obținem pagina la /, adică pagina principală situată în rădăcina folderului. Folosim versiunea de protocol 1.1.
Agent de utilizator: Opera/9.80 (Windows NT 6.1; WOW64) Versiunea Presto/2.12.388/12.14— Ne prezentăm pe server, suntem browserul Opera.
Gazdă: ya.ru — Numele de domeniu al resursei solicitate.
Accept: 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 formatelor de resurse acceptabile.
Accept-Limba: ru-RU,ru;q=0.9,en;q=0.8— Lista limbilor acceptate.
Acceptare-Codificare: gzip, deflate— Metode de codificare acceptate.
Cookie: yandexuid=ХХХХХ - Cookie-uri, dacă este necesar.
Conexiune: Keep-Alive - Vă rugăm să nu întrerupeți conexiunea și să rămâneți în legătură.
Răspuns
HTTP/1.1 200 Ok - Primim un răspuns cu codul 200, ceea ce înseamnă că totul este OK.
Server: nginx - Serverul s-a prezentat - acesta este nginx.
Data: duminica, 10 martie 2013 14:10:50 GMT— Data și ora curente pe server.
Tip de conținut: text/html; set de caractere=UTF-8— Tipul de conținut și codificare.
Conexiune: închide - Serverul nu dorește să mențină o conexiune permanentă cu noi, așa că o închide imediat. O nouă conexiune va fi stabilită pentru următoarea solicitare.
Cache-Control: fără cache, fără magazin, vârsta maximă=0, trebuie revalidat- Gestionarea stocării în cache. În acest caz este dezactivat.
Expiră: Duminică, 10 Mar 2013 14:10:50 GMT— Data estimată a expirării sesiunii. În cazul nostru, coincide cu ora de deschidere, deoarece serverul l-a închis imediat, imediat după procesare.
Ultima modificare: duminică, 10 martie 2013 14:10:50 GMT— Ora ultimei modificări.
Codificarea conținutului: gzip — Metodă de codificare a informațiilor.
O listă completă a tuturor parametrilor care pot fi găsiți în antetul solicitării HTTP poate fi găsită pe Wikipedia.
Acum aveți o idee aproximativă despre modul în care browserul și serverul dvs. web comunică între ele. Acest lucru este foarte util de știut și înțeles, deoarece vom încerca să emulăm acțiunile browserului folosind biblioteca libcurl. Daţi-i drumul.Exemplu de lucru cu biblioteca
url — adresa paginii sau a site-ului.
Valorile parametrilor de ieșire (matrice cu trei elemente):
header['errno'] - dacă ceva a mers prost, aici va apărea un cod de eroare.
header[‘errmsg’] – textul de eroare va apărea aici.
header['conținut'] - pagina actuală\fișier\imagine etc.
Apoi puteți face orice doriți cu codul paginii, de exemplu, să îl analizați cu expresii regulate. Dar asta e tot în lecțiile următoare, dar deocamdată să ne oprim la asta.Răsuci
libcurl acceptă în prezent protocoalele http, https, ftp, gopher, telnet, dict, fișier și ldap.
libcurl acceptă, de asemenea, certificate HTTPS, HTTP POST, HTTP PUT, încărcare FTP (acest lucru se poate face și cu extensia ftp PHP), încărcare bazată pe formular HTTP, proxy, cookie-uri și autentificare utilizator+parolă.curl_init
Descriere
curl_setopt
Descriere
curl_exec
Descriere
curl_close
Descriere
curl_errno
Descriere
Exemplul 1: Inițializarea unei noi sesiuni CURL și preluarea unei pagini web.
Exemplul 2: Folosind modulul CURL al PHP pentru a obține example.com
Exemplul 3: Verificarea accesibilității URL folosind CURL-ul PHP
Exemplul 4: Separarea antetului de corpul obținut folosind CURL-ul PHP
Exemplul 5: Determinarea unei adrese URL de referință folosind CURL-ul PHP
problema: curl_setopt($ch,FOLLOW_LOCATION,1); eroarea: probleme cu open_basedir și safe_mode soluția: o funcție deja dezvoltată de cineva soluția n 2: aceeași funcție, modificată, funcționează grozav pentru mine..= $curl_max_loops) ( $curl_loops = 0; returnează FALSE; ) curl_setopt($ch, CURLOPT_HEADER, adevărat); curl_setopt($ch, CURLOPT_RETURNTRANSFER, adevărat); $date = curl_exec($ch); list($header, $data) = explode("\n\n", $date, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); dacă ($http_code == 301 || $http_code == 302) ( $potriviri = ; preg_match("/Locație:(.*?)\n/", $header, $potriviri); $url = @parse_url(trim (array_pop($potriviri))); dacă (!$url) ( //nu a putut procesa adresa URL pentru a redirecționa către $curl_loops = 0; returnează $date; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; dacă (!$url[„schemă”]) $url[„schemă”] = $last_url[„schemă”]; dacă (!$url[„gazdă”]) $url[„gazdă”] = $ultima_url[ "gazdă"]; dacă (!$url["cale"]) $url["cale"] = $last_url["cale"]; $new_url = $url["schemă"] . "://" . $ url[„gazdă”] . $url[„cale”] . ($url[„interogare”]?”?”.$url[„interogare”]:””); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Redirecționare către", $new_url); return curl_redir_exec($ch); ) else ($curl_loops=0; return $date; ) ) ?>
Folosiți doar această funcție fără FOLLOW_LOCATION și ar trebui să funcționeze. problema a fost că atunci când ajungeți la linia în care returnați datele dacă http_code a fost diferit de 301 oe 302, $data are informații învechite sau nici una. deci $debbbb face treaba. Exemplul 6: Analizarea unui cookie din antet folosind CURL PHP
Uneori nu puteți folosi CURLOPT_COOKIEJAR și CURLOPT_COOKIEFILE din cauza setărilor php ale serverului (se spune că puteți prelua orice fișier de pe server folosind aceste opțiuni). Iată soluția 1) Nu utilizați CURLOPT_FOLLOWLOCATION 2) Folosiți curl_setopt($ch, CURLOPT_HEADER, 1) 3)Luați cookie-uri din antet astfel: preg_match_all("|Set-Cookie: (.*);|U", $conținut, $rezultate); $cookies = implode(";", $rezultate); 4)Setați-le folosind curl_setopt($ch, CURLOPT_COOKIE, $cookies); Exemplul 7: Analizarea unui cookie din antet folosind CURL PHP
După cum a menționat Yevgen mai devreme, uneori, nu putem folosi CURLOPT_COOKIEJAR și CURLOPT_COOKIEFILE. Mai jos este o funcție de apel invers pentru antet pe care am scris-o în ianuarie, care vă permite să păstrați cookie-uri între solicitările cURL. Cookie-urile sunt adăugate la $ch în timpul tuturor solicitărilor, chiar și în timpul redirecționării, astfel încât să puteți folosește-l împreună cu CURLOPT_FOLLOWLOCATION.Iată codul: function read_header($ch, $string) ( global $locație; #ține evidența locației/redirecționează global $cookiearr; #stocare cookie-uri aici global $ch; # ^ suprascrie parametrul funcției $ch # este în regulă, deoarece trebuie să # actualizăm $ch global cu # cookie-uri noi $length = strlen($șir); if(!strncmp($șir, "Locație:", 9)) ( #ține evidența ultima redirecționare $locație = trim(substr($șir, 9, -1)); ) if(!strncmp($șir, "Set-Cookie:", 11)) ( #obțineți cookie-ul $cookiestr = trim(substr( $șir, 11, -1)); $cookie = explode(";", $cookiestr); $cookie = explode("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execută numai la sfârșitul antetului foreach ($cookiearr ca $key=>$value) ( $cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) returnează $lungime; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Acest cod presupune că veți reutiliza $ch fără a-l inițializa de fiecare dată (apelați curl_init o singură dată, la început). Dacă trebuie să inițializați $ch din nou în orice moment al codului dvs., puteți accesa cookie-urile stocate în prezent în $cookiearr și le puteți include în noul $ch. Am scris această funcție înainte de a avea suficientă experiență cu expresiile regulate, astfel încât să nu găsiți niciun apel preg_match aici. Am folosit acest cod de ceva timp și fără probleme la accesarea gmail, yahoo, hotmail, aol etc. unde a trebuit treceți prin autentificare și câteva pagini înainte de a ajunge la ceea ce căutam. Exemplul 8: Configurarea unui handler de încărcare antet folosind CURL PHP
Folosind cURL, trebuia să apelez un script terță parte care returna date binare ca atașament pentru a transmite din nou datele preluate ca atașament. Problema a fost că scriptul terță parte a returnat ocazional erori HTTP și am vrut să evit să transmit atașamente de lungime zero în astfel de cazuri. Combinația de utilizare a apelului CURLOPT_FAILONERROR și CURLOPT_HEADERFUNCTION a ajutat la procesarea corectă a erorilor HTTP de script-ul terță parte: function curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader))) ( header($strHeader) ); header("Conținut-Dispoziție: atașament; nume fișier="nume-fișier.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) ( printează „Eroare cu codul: " . $intReturnCode; ) Exemplul 9. Salvarea unei pagini într-un fișier și calcularea ratei de transfer folosind CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); funcția 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 "Viteza medie de descărcare == " . $sAverageSpeedDownload . "
"; curl_close($sh); FCclose ($hFile); echo "( Vedeți fișierul "".$sTxtfile."" în aceeași cale a găzduirii." " până unde acest script PHP).
"; echo "Încărcare cu viteză medie == " . $sAverageSpeedUpload ."
"; ecou"
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo"
";
}
Exemplul 9. Primirea unei pagini printr-o conexiune SSL (https)
$ch=curl_init("https://site-ul"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Dezactivează eroarea „Problemă cu certificatul SSL, verifică dacă certificatul CA este OK” curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Dezactivează eroarea „SSL: numele subiectului certificatului „hostname.ru” nu se potrivește cu numele gazdei țintă „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); Exemplul 10: Utilizarea sesiunilor și cookie-urilor în curl
$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);//salvați cookie-urile primite într-un fișier curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //trimite către server COOKIE-urile primite de la acesta în timpul autorizării $out=curl_exec($curl); Exemplul 11: Încărcarea fișierului și matricea multidimensională în Curl. CURLOPT_POSTFIELDS + CurlFile