PHP CURL - funksjoner og eksempler på bruk. Avansert bruk av cURL i PHP Curl kommandolinjealternativer

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

curl_setopt — Angir en parameter for CURL-sesjonen

Liste over parametere

cURL-håndtak hentet fra curl_init().

Parameter som skal stilles inn CURLOPT_XXX.

Verdien av opsjonsparameteren.

bool:

Parameter Notater
CURLOPT_AUTOREFERER EKTE for automatisk feltinnstilling Henviser: i forespørsler omdirigert etter overskrift Plassering:.
CURLOPT_BINARYTRANSFER EKTE for å returnere råresponsen når du bruker en konstant CURLOPT_RETURNTRANSFER. Fra og med PHP 5.1.3 er dette alternativet ikke lenger nødvendig: rå utgang returneres alltid når du bruker alternativet CURLOPT_RETURNTRANSFER.
CURLOPT_COOKIESESSION EKTE for å instruere gjeldende økt om å starte en ny "økt" med informasjonskapsler. Dette vil føre til at libcurl ignorerer alle "session"-informasjonskapsler den skulle ha lastet fra forrige økt. Som standard lagrer og laster libcurl alltid alle informasjonskapsler, uavhengig av om de er "session" eller ikke. «Session»-informasjonskapsler er informasjonskapsler som ikke utløper og kun må eksistere for den nåværende «økten».
CURLOPT_CERTINFO EKTE for å sende ut SSL-sertifikatinformasjon for å streame STDERR med sikre tilkoblinger. Lagt til i cURL 7.19.1. Tilgjengelig fra og med PHP 5.3.2. Krever at dette alternativet er aktivert for korrekt drift CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY EKTE ber biblioteket utføre nødvendig proxy-autentisering og tilkoblingsoppsett, men overfører ikke data. Dette alternativet er implementert for HTTP, SMTP og POP3. Lagt til i 7.15.2. Tilgjengelig fra PHP 5.5.0.
CURLOPT_CRLF EKTE for å konvertere Unix-linjeavslutninger til CRLF.
CURLOPT_DNS_USE_GLOBAL_CACHE EKTE for å bruke den globale DNS-bufferen. Dette alternativet er ikke trådsikkert og er aktivert som standard.
CURLOPT_FAILONERROR EKTE for en detaljert rapport om feil hvis den mottatte HTTP-koden er større enn eller lik 400. Standardoppførselen returnerer siden som normalt, og ignorerer koden.
CURLOPT_FILETIME EKTE for å prøve å finne endringsdatoen for et eksternt dokument. Denne verdien kan oppnås ved å bruke parameteren CURLINFO_FILETIME fra funksjonen curl_getinfo().
CURLOPT_FOLLOWLOCATION EKTEå følge en hvilken som helst overskrift "Plassering: " sendt av serveren i sitt svar (merk at dette skjer rekursivt, PHP vil følge alle overskrifter som sendes "Plassering: ", bortsett fra når en konstant er satt CURLOPT_MAXREDIRS).
CURLOPT_FORBID_REUSE EKTEå tvinge en tilkobling til å bli stengt etter at behandlingen er fullført, slik at den ikke kan gjenbrukes.
CURLOPT_FRESH_CONNECT EKTEå tvinge frem bruken av en ny tilkobling i stedet for en bufret.
CURLOPT_FTP_USE_EPRT EKTEå bruke EPRT (og LPRT) for aktive FTP-opplastinger. Bruk FALSK for å deaktivere EPRT og LPRT og kun bruke PORT.
CURLOPT_FTP_USE_EPSV EKTE for innledende testing av EPSV-kommandoen under FTP-overføringer. Hvis kommandoen mislykkes, vil den falle tilbake til PASV. Installer i FALSK for å deaktivere EPSV.
CURLOPT_FTP_CREATE_MISSING_DIRS EKTEå opprette manglende kataloger hvis en FTP-operasjon støter på en ikke-eksisterende bane.
CURLOPT_FTPAPPEND EKTEå skrive en ekstern fil til slutten, i stedet for å overskrive den over en eksisterende fil.
CURLOPT_TCP_NODELAY Spesifiserer permanent om TCP_NODELAY-alternativet skal settes eller slettes (1 = satt, 0 = slettet). Som standard er alternativet fjernet. Tilgjengelig fra PHP 5.2.1 for versjoner bygget med libcurl 7.11.2 eller nyere.
CURLOPT_FTPASCII Kallenavn CURLOPT_TRANSFERTEXT. Bruk denne i stedet.
KUN CURLOPT_FTPLIST EKTE for å returnere bare en liste over navn fra FTP-katalogen.
CURLOPT_HEADER EKTEå inkludere overskrifter i utdataene.
CURLINFO_HEADER_OUT EKTE for å spore håndtaksspørringsstrengen. Tilgjengelig fra PHP 5.1.3. Prefiks CURLINFO_ brukt spesifikt.
CURLOPT_HTTPGET EKTE for å tilbakestille HTTP-forespørselsmetoden til GET-metoden. Siden GET er standard, er denne parameteren bare nødvendig hvis forespørselsmetoden tidligere har blitt endret.
CURLOPT_HTTPPROXYTUNNEL EKTEå tunnelere gjennom den angitte HTTP-proxyen.
CURLOPT_MUTE EKTE for å deaktivere cURL-funksjonsmeldinger fullstendig. Fjernet i cURL 7.15.5 (alternativet CURLOPT_RETURNTRANSFER kan brukes)
CURLOPT_NETRC EKTE for å lese ~/.netrc-filen for pålogging og passord for det eksterne nettstedet som forbindelsen opprettes med.
CURLOPT_NOBODY EKTE for å ekskludere svarlegemet fra utdata. Forespørselsmetoden er satt til HEAD. Endre denne innstillingen til FALSK endrer den ikke tilbake til GET.
CURLOPT_NOPROGRESS

EKTE for å deaktivere fremdriftsindikatoren på cURL-overføringer.

Kommentar:

PHP setter denne parameteren automatisk til EKTE, endre den kun for feilsøkingsformål.

CURLOPT_NOSIGNAL EKTEå ignorere enhver cURL-funksjon som sender signaler til PHP-prosessen. Dette alternativet er aktivert som standard i flertrådede SAPI-er for å la timeout-parametere fungere riktig.
CURLOPT_POST EKTEå bruke vanlig HTTP POST. Denne POST-metoden bruker normalen , ofte brukt i HTML-skjemaer.
CURLOPT_PUT EKTE for å laste ned en fil ved hjelp av HTTP PUT-metoden. Filen som brukes må angis ved hjelp av alternativene CURLOPT_INFILE Og CURLOPT_INFILESIZE.
CURLOPT_RETURNTRANSFER EKTE for å returnere resultatet av overføringen som en streng fra curl_exec() i stedet for direkte utgang til nettleseren.
CURLOPT_SAFE_UPLOAD EKTE for å deaktivere prefiksstøtte @ for nedlastede filer i CURLOPT_POSTFIELDS, som betyr at verdiene gikk med @ kan overføres sikkert som felt. I stedet for et prefiks kan du bruke alternativet CURLFile d. Lagt til i PHP 5.5.0 med standardverdi FALSK. I PHP 5.6.0 ble det lik som standard EKTE.
CURLOPT_SSL_VERIFYPEER FALSK for å stoppe cURL fra å sjekke vertssertifikatet. Alternative sertifikater som skal verifiseres kan spesifiseres ved hjelp av parameteren CURLOPT_CAINFO eller katalogen med sertifikater spesifisert av parameteren CURLOPT_CAPATH. Standard er EKTE siden cURL versjon 7.10. Standarddistribusjonen er installert fra og med cURL versjon 7.10.
CURLOPT_TRANSFERTEXT EKTE for å bruke ASCII-modus for FTP-overføringer. Når du bruker LDAP, returneres dataene i ren tekst i stedet for HTML. På Windows-systemer tråden STDOUT settes ikke til binær modus.
CURLOPT_UNRESTRICTED_AUTH EKTE for å fortsette å sende innlogging og passord under omdirigeringer (når du bruker CURLOPT_FOLLOWLOCATION), selv om vertsnavnet endres.
CURLOPT_UPLOAD EKTE for å forberede opplasting av filen til serveren.
CURLOPT_VERBOSE EKTE for å vise tilleggsinformasjon. Skriver utdata til en strøm STDERR, eller filen spesifisert av parameteren CURLOPT_STDERR.

For følgende alternativparameterverdier må verdiparameteren være av typen heltall:

Parameter Sett verdiverdi Notater
CURLOPT_BUFFERSIZE Størrelsen på bufferen som brukes for hver lesning. Det er imidlertid ingen garanti for at denne forespørselen vil bli fullført. Lagt til i cURL 7.10.
CURLOPT_CLOSEPOLICY En av konstantene CURLCLOSEPOLICY_*.

Kommentar:

Dette alternativet er avviklet siden det aldri ble implementert i cURL og ikke fungerte.

Fjernet i PHP 5.6.0.
CURLOPT_CONNECTTIMEOUT Antall sekunder å vente når du prøver å koble til. Bruk 0 for å vente på ubestemt tid.
CURLOPT_CONNECTTIMEOUT_MS Antall millisekunder å vente når du forsøker å koble til. Bruk 0 for å vente på ubestemt tid. Hvis libcurl er kompilert ved hjelp av systemets standard navneløser, vil tilkoblingen fortsatt bruke et helt sekunds venting som en timeout, med et minimum tillatt tidsavbrudd på 1 sekund. Lagt til i cURL versjon 7.16.2. Tilgjengelig fra og med PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT Antall sekunder som DNS-registreringer er lagret i minnet. Som standard er denne parameteren 120 (2 minutter).
CURLOPT_FTPSSLAUTH FTP-autentiseringsmetode (i aktiv modus): CURLFTPAUTH_SSL(SSL sjekkes først), CURLFTPAUTH_TLS(TLS sjekket først) eller CURLFTPAUTH_DEFAULT(cURL bestemmer selv). Lagt til i cURL versjon 7.12.2.
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (som standard velger CURL hvilken versjon som skal brukes), CURL_HTTP_VERSION_1_0 (force HTTP/1.0) eller CURL_HTTP_VERSION_1_1 (force HTTP/1.1).
CURLOPT_HTTPAUTH

Du kan bruke den bitvise operatoren | (eller) å kombinere flere metoder sammen. I dette tilfellet vil cURL spørre serveren for støttede autorisasjonsmetoder og velge den beste.

CURLAUTH_ANY er et alias CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE er et alias CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE Den forventede filstørrelsen, i byte, når du laster opp en fil til en ekstern server. Vær oppmerksom på at bruk av dette alternativet vil ikke stoppe at ytterligere data sendes utover denne verdien, da dataene som sendes avhenger av resultatet CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT Øvre terskel for dataoverføringshastighet, i byte per sekund. Verifikasjonen skjer innen CURLOPT_LOW_SPEED_TIME sekunder, hvoretter PHP anser overføringen for treg og avbryter den.
CURLOPT_LOW_SPEED_TIME Maksimalt antall sekunder som overføringshastigheten ikke må overstige CURLOPT_LOW_SPEED_LIMIT, ellers vil PHP markere overføringen som for treg og stoppe den.
CURLOPT_MAXCONNECTS Maksimalt antall vedvarende tilkoblinger. Når grensen er nådd, brukes parameteren til å bestemme hvilken forbindelse som skal lukkes. CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS Maksimalt antall aksepterte viderekoblinger. Bruk dette alternativet sammen med alternativet CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Alternativ tilkoblingsport.
CURLOPT_POSTREDIR En bitmaske som inneholder 1 (301 flyttet permanent), 2 (302 funnet) og 4 (303 Se annet) for å spesifisere om HTTP POST-metoden skal behandles når alternativet er aktivert CURLOPT_FOLLOWLOCATION hvis den angitte typen omdirigering skjedde. Lagt til i cURL 7.19.1. Tilgjengelig siden PHP 5.3.2.
CURLOPT_PROTOCOLS

Bitmaske av verdier CURLPROTO_*. Denne masken begrenser protokollene som brukes av libcurl. Dette lar deg få libcurl til å fungere med et stort antall protokoller, og begrense driften av visse overføringer til bare en undergruppe av dem. Som standard bruker libcurl alle støttede protokoller. Se også parameter CURLOPT_REDIR_PROTOCOLS.

Korrekte protokollverdier: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLTORLPS_PROTO_CULPPRO , CURLPROTO_CULPUR ROTO_TFTP, CURLPROTO_ALL

CURLOPT_PROXYAUTH HTTP-godkjenningsmetoder som brukes når du kobler til en proxy-server. Bruk de samme bitmaskene som ble beskrevet for parameteren CURLOPT_HTTPAUTH. For øyeblikket er det bare CURLAUTH_BASIC og CURLAUTH_NTLM som støttes for proxy-autorisasjon. Lagt til i cURL versjon 7.10.7.
CURLOPT_PROXYPORT Portnummeret til proxy-serveren som tilkoblingen er gjort til. Dette tallet kan også stilles inn ved hjelp av parameteren CURLOPT_PROXY.
CURLOPT_PROXYTYPE Enten CURLPROXY_HTTP (standard) eller CURLPROXY_SOCKS5 . Lagt til i cURL 7.10.
CURLOPT_REDIR_PROTOCOLS Bitmaske av verdier CURLPROTO_*. Denne bitmasken begrenser protokollene som brukes av libcurl ved omdirigering (med parameteren aktivert CURLOPT_FOLLOWLOCATION). Dette lar deg begrense settet med protokoller som brukes ved omdirigering for enkelte overføringer. Som standard støtter libcurl alle protokoller unntatt FILE og SCP. I versjoner før 7.19.4 ble omdirigering brukt for alle protokoller uten unntak. Se også parameterbeskrivelse CURLOPT_PROTOCOLS for en liste over konstanter med protokollverdier. Lagt til i cURL versjon 7.19.4.
CURLOPT_RESUME_FROM Sendingsstartforskyvning, i byte.
CURLOPT_SSL_VERIFYHOST Bruk 1 for å sjekke om det finnes et vanlig navn i SSL-sertifikatet. Bruk 2 for å sjekke at det vanlige navnet eksisterer og også samsvarer med den angitte verten. I et kampmiljø bør verdien av denne parameteren være 2 (angitt som standard). Støtte for verdi 1 er fjernet i cURL 7.28.1
CURLOPT_SSLVERSION En av konstantene 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) eller CURL_SSLVERSION_TLSv1_2 (6).
CURLOPT_TIMECONDITION Metode for tolkning av parametere CURLOPT_TIMEVALUE. Bruk CURL_TIMECOND_IFMODSINCE for å returnere siden bare hvis den har endret seg siden tiden angitt i parameteren CURLOPT_TIMEVALUE. Hvis siden ikke er endret, vil tittelen bli returnert "304 ikke endret", som antyder at parameteren CURLOPT_HEADER installert i EKTE. Bruk CURL_TIMECOND_IFUNMODSINCE for den motsatte effekten. Standard er CURL_TIMECOND_IFMODSINCE.
CURLOPT_TIMEOUT Maksimalt antall sekunder tillatt for å utføre cURL-funksjoner.
CURLOPT_TIMEOUT_MS Maksimalt antall millisekunder tillatt for å utføre cURL-funksjoner. Hvis libcurl er bygget ved hjelp av den vanlige systemnavn-resolveren, vil dette tilkoblingsspennet fortsatt bruke andre avrundingstidsavbrudd, med en minimumstidsavbrudd tillatt på ett sekund. Lagt til i cURL versjon 7.16.2. Tilgjengelig fra og med PHP 5.2.3.
CURLOPT_TIMEVALUE Antall sekunder siden 1. januar 1970. Denne tiden vil bli brukt av parameteren CURLOPT_TIMECONDITION. Som standard brukes parameteren CURL_TIMECOND_IFMODSINCE.
CURLOPT_MAX_RECV_SPEED_LARGE Hvis nedlastingshastigheten overskrider denne verdien (angitt i byte per sekund) i gjennomsnitt over hele overføringen, vil nedlastingen settes på pause for å opprettholde gjennomsnittshastigheten mindre enn eller lik denne parameteren. Som standard er hastigheten ikke begrenset.
CURLOPT_MAX_SEND_SPEED_LARGE Hvis opplastingen til serveren overskrider denne verdien (angitt i byte per sekund) i gjennomsnitt gjennom hele overføringen, vil opplastingen settes på pause for å opprettholde en gjennomsnittshastighet som er mindre enn eller lik denne parameteren. Som standard er hastigheten ikke begrenset. Lagt til i cURL 7.15.5. Tilgjengelig fra PHP 5.4.0.
CURLOPT_SSH_AUTH_TYPES En bitmaske som består av en eller flere konstanter: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Installere CURLSSH_AUTH_ANY for at libcurl skal velge en av dem uavhengig. Lagt til i cURL 7.16.1.
CURLOPT_IPRESOLVE Lar en app velge typen IP-adresse som vertsnavnet bestemmes med. Dette er nødvendig hvis du bruker et vertsnavn som er avledet fra mer enn én versjon av IP-adressen. Mulige verdier kan være CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, og som standard CURL_IPRESOLVE_WHATEVER. Lagt til i cURL 7.10.8.

For følgende alternativparameterverdier må verdiparameteren være av typen streng:

Parameter Sett verdiverdi Notater
CURLOPT_CAINFO Navnet på en fil som inneholder ett eller flere sertifikater som noder vil bli kontrollert mot. Denne parameteren gir bare mening når den brukes sammen med CURLOPT_SSL_VERIFYPEER. Krever en absolutt vei.
CURLOPT_CAPATH En katalog som inneholder flere CA-sertifikater. Bruk dette alternativet sammen med CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Overskriftsinnhold "Kjeks:", brukt i HTTP-forespørselen. Vær oppmerksom på at flere informasjonskapsler er atskilt med et semikolon etterfulgt av et mellomrom (for eksempel " frukt=eple; farge=rød")
CURLOPT_COOKIEFILE Navnet på filen som inneholder informasjonskapslene. Denne filen må være i Netscape-format eller bare HTTP-hoder skrevet til filen. Hvis en tom streng sendes som filnavn, lagres ikke informasjonskapsler, men behandlingen vil fortsatt være aktivert.
CURLOPT_COOKIEJAR Navnet på filen der alle interne informasjonskapsler for gjeldende overføring vil bli lagret etter at håndtaket er lukket, for eksempel etter å ha kalt curl_close.
CURLOPT_CUSTOMREQUEST

Egendefinert forespørselsmetode brukes i stedet "FÅ" eller "HODE" når du gjør en HTTP-forespørsel. Dette er nyttig for spørsmål "SLETT" eller andre, mer sjeldne HTTP-forespørsler. Korrekte betydninger vil være ord som "FÅ", "POST", "KOBLE" og så videre; de. Ikke skriv inn hele HTTP-forespørselslinjen her. For eksempel en indikasjon "GET /index.html HTTP/1.0\r\n\r\n" vil være feil.

Kommentar:

Ikke bruk denne funksjonen før du er sikker på at serveren støtter denne typen forespørsel.

CURLOPT_EGDSOCKET Som CURLOPT_RANDOM_FILE, bortsett fra at filnavnet er satt til Entropy Gathering Daemon-kontakten.
CURLOPT_ENCODING Overskriftsinnhold "Godta-koding: ". Dette gjør at forespørselen kan dekodes. Støttede kodinger er "identitet", "tømme luft" Og "gzip". Hvis en tom streng passeres, "" , sendes en overskrift som inneholder alle støttede kodingstyper. Lagt til i cURL 7.10.
CURLOPT_FTPPORT Verdien som skal brukes til å bestemme IP-adressen for FTP "PORT"-kommandoen. "PORT"-kommandoen forteller serveren hvilken IP-adresse den skal koble til. Dette kan være en IP-adresse, vertsnavn, nettverksgrensesnittnavn (under Unix), eller ganske enkelt "-" for å bruke standard systemets IP-adresse.
CURLOPT_INTERFACE Navnet på nettverksgrensesnittet som skal brukes. Kan være et grensesnittnavn, en IP-adresse eller et vertsnavn.
CURLOPT_KEYPASSWD Passord kreves for å bruke den private nøkkelen CURLOPT_SSLKEY eller CURLOPT_SSH_PRIVATE_KEYFILE. Lagt til i cURL 7.16.1.
CURLOPT_KRB4LEVEL Sikkerhetsnivå KRB4 (Kerberos 4). Enhver av følgende verdier (i rekkefølge fra svakeste til sterkeste) er korrekte: "klar", "sikker", "konfidensiell", "privat".. Hvis den angitte strengen er forskjellig fra de gitte verdiene, vil verdien bli brukt "privat". Setter dette alternativet til NULL vil deaktivere KRB4-sikkerhet fullstendig. For øyeblikket fungerer KRB4-sikkerhet kun med FTP-transaksjoner.
CURLOPT_POSTFIELDS Alle data overføres i en HTTP POST-forespørsel. For å overføre en fil, spesifiser før filnavnet @ , og bruk også hele banen til filen. Filtypen kan også spesifiseres ved å bruke formatet " ;type=mimetype" etter filnavnet. Denne parameteren kan sendes som en url-kodet streng, som " para1=val1¶2=val2&...", og i form av en matrise, hvis nøkler vil være navnene på feltene, og verdiene vil være deres innhold. Hvis verdien er en matrise, vil overskriften Innholdstype vil bli satt til multipart/form-data. Fra PHP 5.2.0, når du overfører filer med prefikset @ , må verdien være en matrise. Siden PHP 5.5.0, prefiks @ er utdatert og filer kan sendes vha CURLFile. Prefiks @ kan deaktiveres for å tillate verdier som starter med @ ved å angi alternativet CURLOPT_SAFE_UPLOAD i betydning EKTE.
CURLOPT_PROXY HTTP-proxy som forespørsler vil bli rutet gjennom.
CURLOPT_PROXYUSERPWD Logg inn og passord skrevet i skjemaet ":" , brukes når du kobler til via en proxy.
CURLOPT_RANDOM_FILE Navnet på filen som brukes til å initialisere tilfeldig tallgenerator for SSL.
CURLOPT_RANGE Dataområde som skal lastes ned, i format "X-Y", og enten X eller Y kan utelates. HTTP-protokollen støtter også overføring av flere områder atskilt med kommaer, de er spesifisert i formatet "X-Y,N-M".
CURLOPT_REFERER Overskriftsinnhold "Henviser:", som vil bli brukt i HTTP-forespørselen.
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 En streng som inneholder 32 heksadesimale sifre. Strengen må være en MD5-sjekksum av den eksterne datamaskinens offentlige nøkkel, og libcurl vil tilbakestille tilkoblingen til den eksterne verten til kontrollsummen samsvarer med den offentlige nøkkelen. Dette alternativet er kun for overføring av data ved hjelp av SCP og SFTP. Lagt til i cURL 7.17.1.
CURLOPT_SSH_PUBLIC_KEYFILE Filnavnet for din offentlige nøkkel. Hvis ikke spesifisert, bruker libcurl som standard filen $HOME/.ssh/id_dsa.pub hvis HOME-miljøvariabelen er satt og filen "id_dsa.pub" i gjeldende katalog hvis HOME-miljøvariabelen ikke er angitt. Lagt til i cURL 7.16.1.
CURLOPT_SSH_PRIVATE_KEYFILE Filnavnet for din private nøkkel. Hvis ikke spesifisert, vil libcurl som standard bruke $HOME/.ssh/id_dsa-filen hvis HOME-miljøvariabelen er satt og "id_dsa"-filen i gjeldende katalog hvis HOME-miljøvariabelen ikke er angitt. Hvis filen er passordbeskyttet, angi passordet med CURLOPT_KEYPASSWD. Lagt til i cURL 7.16.1.
CURLOPT_SSL_CIPHER_LIST Liste over chiffer brukt i SSL-overføringer. For eksempel, RC4-SHA Og TLSv1 er gyldige chifferlister.
CURLOPT_SSLCERT Navnet på en fil med et riktig formatert PEM-sertifikat.
CURLOPT_SSLCERTPASSWD Passord kreves for å bruke sertifikatet CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Sertifikatformat. Formater støttes "PEM"(misligholde), "DER" Og "ENG". Lagt til i cURL versjon 7.9.3.
CURLOPT_SSLENGINE Krypteringsmotor-ID-en for den private SSL-nøkkelen som er angitt i parameteren CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Identifikatoren til krypteringsmekanismen som brukes for asymmetriske krypteringsoperasjoner.
CURLOPT_SSLKEY Navnet på SSL-privatnøkkelfilen.
CURLOPT_SSLKEYPASSWD

Det hemmelige passordet som kreves for å bruke den private SSL-nøkkelen spesifisert av parameteren CURLOPT_SSLKEY.

Kommentar:

Siden denne parameteren inneholder et verdifullt passord, husk å oppbevare dette PHP-skriptet på et trygt sted.

CURLOPT_SSLKEYTYPE Typen privat SSL-nøkkel som er angitt i parameteren CURLOPT_SSLKEY. Følgende nøkkeltyper støttes: "PEM"(misligholde), "DER" Og "ENG".
CURLOPT_URL Nedlastbar URL. Denne parameteren kan også stilles inn når du initialiserer en økt med curl_init().
CURLOPT_USERAGENT Overskriftsinnhold "Bruker agent: ", sendt i en HTTP-forespørsel.
CURLOPT_USERPWD Pålogging og passord brukt under tilkobling, spesifisert i formatet ":" .

For følgende alternativparameterverdier må verdiparameteren være en matrise:

Parameter Sett verdiverdi Notater
CURLOPT_HTTP200ALIASES En rekke HTTP 200-svar som vil bli behandlet som korrekte svar i stedet for feilaktige. Lagt til i cURL versjon 7.10.3.
CURLOPT_HTTPHEADER En rekke angitte HTTP-overskrifter, i formatmatrisen ("Innholdstype: tekst/vanlig", "Innholdslengde: 100")
CURLOPT_POSTQUOTE En rekke FTP-kommandoer som utføres på serveren etter at en FTP-forespørsel er fullført.
CURLOPT_QUOTE En rekke FTP-kommandoer utført på serveren før en FTP-forespørsel.

For følgende alternativparameterverdier må verdiparameteren være et strømhåndtak (returnert for eksempel av funksjonen fopen()):

Parameter Sett verdiverdi
CURLOPT_FILE Filen der overføringsresultatet vil bli skrevet. Standard utdatastrøm STDOUT(nettleservindu).
CURLOPT_INFILE Filen som data skal leses fra når den lastes opp til serveren.
CURLOPT_STDERR Alternativ feilutdatafil brukt i stedet for feilstrømmen STDERR.
CURLOPT_WRITEHEADER Filen der overskriftene til gjeldende operasjon vil bli skrevet.

For følgende alternativparameterverdier må verdiparameteren være et gyldig funksjonsnavn eller lukking:

Parameter Sett verdiverdi
CURLOPT_HEADERFUNCTION Tilbakeringingsfunksjonen tar to parametere. Den første parameteren er cURL-håndtaket, den andre parameteren er en streng som inneholder overskriftene som skal skrives. Overskrifter må skrives med denne tilbakeringingsfunksjonen. Skal returnere antall byte skrevet.
CURLOPT_PASSWDFUNCTION Tilbakeringingsfunksjonen tar tre parametere. Den første parameteren er cURL-håndtaket, den andre parameteren er passordpromptstrengen, og den tredje parameteren er maksimal passordlengde. Skal returnere en streng som inneholder passordet.
CURLOPT_PROGRESSFUNCTION

Tilbakeringingsfunksjonen tar fem parametere. Den første er cURL-beskrivelsen, den andre er det totale antallet byte som forventes å bli lastet ned fra serveren, den tredje er antall byte som allerede er lastet ned, den fjerde er det totale antallet byte som forventes å bli sendt til serveren, og den femte er antall byte som allerede er sendt.

Kommentar:

Tilbakeringingsfunksjonen kalles bare hvis alternativet CURLOPT_NOPROGRESS satt til verdi FALSK.

Du kan returnere en verdi som ikke er null for å avbryte overføringen. I dette tilfellet vil en feil vises CURLE_ABORTED_BY_CALLBACK.

CURLOPT_READFUNCTION Tilbakeringingsfunksjonen tar tre parametere. Den første parameteren er cURL-håndtaket, den andre parameteren er strømressursen som sendes til cURL via alternativet CURLOPT_INFILE, og den tredje parameteren er den maksimalt tillatte mengden data som skal leses. Tilbakeringingsfunksjonen må returnere en streng med lengde som ikke er større enn den forespurte datamengden, vanligvis ved å lese fra den beståtte streamingressursen. Skal returnere en tom streng for å signalisere slutten av filen EOF.
CURLOPT_WRITEFUNCTION Tilbakeringingsfunksjonen tar to parametere. Den første parameteren er cURL-håndtaket, og den andre parameteren er strengen som inneholder dataene som skal skrives. Data må lagres med denne funksjonen. Den må returnere det nøyaktige antallet byte skrevet, ellers vil nedlastingen bli avbrutt med en feil.

Andre betydninger:

Returverdier

Returnerer EKTE ved vellykket gjennomføring eller FALSK i tilfelle feil.

Liste over endringer

Versjon Beskrivelse
5.6.0 Alternativ CURL_SAFE_UPLOAD har nå en standardverdi på EKTE.
5.6.0 Fjernet alternativ CURLOPT_CLOSEPOLICY og tilhørende betydninger.
5.5.0 cURL-ressursen legges til som det første argumentet til tilbakeringingsfunksjonen CURLOPT_PROGRESSFUNCTION.
5.5.0 Lagt til alternativ CURLOPT_DEL.
5.3.0 Lagt til alternativ CURLOPT_PROGRESSFUNCTION.
5.2.10 Lagt til alternativer CURLOPT_PROTOCOLS Og CURLOPT_REDIR_PROTOCOLS.
5.1.0 Lagt til alternativer CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH Og CURLOPT_TIMECONDITION.
5.0.0 Lagt til alternativer CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE Og CURLOPT_HTTP200ALIASES.

Eksempler

Eksempel #1 Initialisering av en CURL-økt og lasting av en nettside

// opprett en ny cURL-ressurs
$ch = curl_init();

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

$ch = curl_init();

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

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

Curl_exec($ch);
?>

Resultatet av å kjøre dette eksemplet:

Array ( => Foo) Array ( => Array ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279))

Notater

Kommentar:

Sender en matrise til CURLOPT_POSTFIELDS koder dataene som multipart/form-data, mens å sende en URL-kodet streng vil kode dataene som application/x-www-form-urlencoded.

cURL er et verktøy som lar deg samhandle med ulike servere og støtter mange protokoller: HTTP, FTP, TELNET, etc. cURL er opprinnelig et kommandolinjeverktøy. Men heldigvis for oss støtter PHP arbeid med cURL-biblioteket. I denne artikkelen skal vi se på ikke-trivielle eksempler på arbeid med cURL.

Hvorfor cURL?

Faktisk er det mange andre måter å sende en forespørsel til en annen server for for eksempel å hente innholdet på en side. Mange mennesker, for det meste av latskap, bruker enkle PHP-funksjoner i stedet for cURL:

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

De tillater imidlertid ikke effektiv feilhåndtering. Det er også en rekke oppgaver som de ikke kan gjøre i det hele tatt – for eksempel arbeid med informasjonskapsler, autorisasjon, postforespørsler, nedlasting av filer.

cUrl er et kraftig verktøy som støtter flere protokoller og gir fullstendig forespørselsinformasjon.

Grunnleggende om cUrl

Før vi går videre til komplekse eksempler, la oss se på den grunnleggende strukturen til en cURL-forespørsel i PHP. For å utføre en cURL-forespørsel i PHP, må du ta 4 hovedtrinn:

  1. Initialisering.
  2. Innstillingsalternativer.
  3. Utfører forespørselen.
  4. Renholdsressurser.
// 1. initialisering $ch = curl_init(); // 2. angi alternativer, inkludert URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. utfører forespørselen og mottar svaret $output = curl_exec($ch); // 4. renseressurser curl_close($ch);

Vi vil for det meste se på trinn #2 i denne artikkelen siden det er der magien skjer. Listen over cURL-alternativer er veldig stor, så vi vil ikke vurdere alle alternativene i dag, men vil bruke de som er nyttige for å løse spesifikke problemer.

Feilsporing

Om nødvendig kan du legge til følgende linjer for å spore feil:

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

Vær oppmerksom på at vi bruker "===" i stedet for "==" fordi Det er nødvendig å skille mellom et tomt serversvar og den boolske verdien FALSE, som returneres i tilfelle feil.

Få informasjon om en forespørsel

Et annet valgfritt trinn er å få informasjon om cURL-forespørselen etter at den er utført.

// ... curl_exec($ch); $info = curl_getinfo($ch); ekko "Tok". $info["total_time"] . "sekunder for url". $info["url"]; // ...

Som et resultat vil du motta en matrise med følgende informasjon:

  • "url"
  • "innholdstype"
  • "http_code"
  • "header_size"
  • "request_size"
  • "filtid"
  • "ssl_verify_result"
  • "redirect_count"
  • "Total tid"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "størrelse_opplasting"
  • "størrelse_nedlasting"
  • "hastighet_nedlasting"
  • "speed_upload"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"

Omdirigeringssporing, avhengig av nettleseren

I dette eksemplet vil vi skrive et skript som vil oppdage omdirigeringer basert på forskjellige nettleserinnstillinger. Noen nettsteder omdirigerer for eksempel besøkende fra mobile enheter til besøkende fra andre land.

Vi bruker alternativet CURLOPT_HTTPHEADER for å angi våre egne overskrifter, inkludert brukeragent og språk, og se hvor nettsteder omdirigerer oss.

// URLer $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // nettlesere $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 som Mac OS X; no) AppleWebKit/420+ (KHTML, som Gecko) Versjon/3.0 Mobile/1A537a Safari/419.3", "language" => "en"), "french" => array ("user_agent" = > "Mozilla/4.0 (kompatibel; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls som $url) ( echo "URL: $url\n"; foreach ($browsers som $test_name => $browser) ( $ch = curl_init(); // angi adressen curl_setopt($ch, CURLOPT_URL , $url); // angi nettleseren og språket som brukes curl_setopt($ch, CURLOPT_HTTPHEADER, array("Bruker-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["språk" ]) ")); // vi trenger ikke innholdet på siden curl_setopt($ch, CURLOPT_NOBODY, 1); // vi trenger bare overskrifter curl_setopt($ch, CURLOPT_HEADER, 1); // returner resultatet i stedet av utgangen curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // definere omdirigeringer i HTTP-overskrifter? if (preg_match("!Plassering: (.*)!" , $output, $matches)) ( echo "$test_name: omdirigerer til $matches\n"; ) else ( echo "$test_name: no redirection\n"; ) ) echo "\n\n"; )

I en løkke sjekker vi nettlesere for hver URL. Først angir vi alternativene for forespørselen vår: URL og nettleser og språk som skal testes.

Fordi Vi har satt et spesielt alternativ; resultatet av forespørselen vil kun inneholde HTTP-hoder. Ved å bruke et enkelt regulært uttrykk kan vi sjekke om svaret inneholder strengen "Location:".

Resultat av skriptkjøring:

URL: http://www.cnn.com standard: omdirigerer til http://edition.cnn.com/ iphone: omdirigerer til http://edition.cnn.com/ Fransk: omdirigerer til http://edition.cnn .com/ URL: http://www.mozilla.com standard: omdirigerer til https://www.mozilla.org/firefox/ iphone: omdirigerer til https://www.mozilla.org/firefox/ fransk: omdirigerer til https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: omdirigerer til https://www.facebook.com/ iphone: omdirigerer til http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Fransk: ingen omdirigering

Sender POST-forespørsler

Når du utfører GET-forespørsler, kan data sendes i spørringsstrengen. For eksempel, når du søker på Google, blir søket ditt oversatt til en URL:

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

For å få resultatet av denne spørringen trenger du ikke engang cURL, du kan være lat og bruke "file_get_contents()".

Men noen HTML-skjemaer bruker POST-metoden. I dette tilfellet sendes dataene i brødteksten i forespørselsmeldingen i stedet for i selve URL-en.

La oss skrive et skript som sender POST-forespørsler. Først, la oss lage en enkel PHP-fil som vil godta disse forespørslene og returnere dataene som er sendt til den. La oss kalle det post_output.php :

$url = "http://localhost/post_output.php"; $post_data = array ("foo" => "bar", "query" => "FooBar", "action" => "Send inn"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // lag en POST-forespørsel curl_setopt($ch, CURLOPT_POST, 1); // legg til data curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); ekko $utgang;

Dette skriptet vil gi ut:

Array ( => bar => FooBar => Send inn)

Dette skriptet sendte en POST-forespørsel til post_output.php-filen. som ga ut innholdet i $_POST-matrisen, og vi mottok dette svaret ved å bruke cURL.

Laster opp filer

Akkurat som i forrige eksempel, la oss lage en fil som godtar forespørsler, upload_output.php :

Print_r($_FILES);

Og selve skriptet som laster ned filene:

$url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // fil for å laste opp "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); ekko $utgang;

Hvis du vil laste opp en fil, er alt du trenger å gjøre å sende stien til den, akkurat som en vanlig POST-forespørselsparameter, prefikset med "@". Resultatet av manuset:

Array ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941))

Multi curL

En av de avanserte funksjonene til cURL i PHP er muligheten til å utføre flere forespørsler samtidig og asynkront.

Under normale forhold stopper skriptet og venter på at forespørselen skal fullføres. Og hvis du trenger å utføre mange spørringer, kan det ta mye tid, fordi... du vil utføre sekvensielt. Denne begrensningen kan omgås:

// opprette behandlere $ch1 = curl_init(); $ch2 = curl_init(); // sett alternativer 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); //opprett det multiple cURL-håndtaket $mh = curl_multi_init(); // legg til behandlere curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $løper = null; // execute requests do ( curl_multi_exec($mh, $running); ) while ($running > 0); // frigjør ressurser curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

Tanken er at du kan lage flere cURL-håndtak, kombinere dem under ett multihåndtak og kjøre dem asynkront.

For det første er alt det samme som med en vanlig cURL-forespørsel - en deskriptor opprettes ( curl_init() ), parametere er satt ( curl_setopt() ). Deretter opprettes en multi-descriptor ( curl_multi_init() ) og de tidligere opprettede vanlige beskrivelsene legges til ( curl_multi_add_handle() ). I stedet for å kalle curl_exec() normalt, ringer vi curl_multi_exec() denne funksjonen informerer oss om antall aktive tilkoblinger ved å bruke den andre parameteren - $running. Derfor løper løkken til $running blir lik 0. Og, selvfølgelig, etter endt arbeid er det nødvendig å frigjøre ressurser.

I dette eksemplet sender vi ganske enkelt ut resultatet av spørringene til STDOUT. La oss vurdere et ikke-trivielt tilfelle av bruk av multi cURL.

Sjekke eksterne lenker i WordPress

Se for deg en blogg med mange innlegg som inneholder lenker til eksterne nettsteder. Noen av disse koblingene fungerer kanskje ikke.

La oss skrive et skript som vil finne alle ødelagte lenker og vise dem til oss.

Først må vi trekke alle eksterne lenker fra databasen:

// CONFIG $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "site"); $max_connections = 10; $url_list = array(); $working_urls = array(); $dead_urls = array(); $not_found_urls = array(); $active = null; // koble til MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Kunne ikke koble til: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Kunne ikke velg db: " . mysql_error()); ) // ta alle innlegg med lenker i teksten $q = "SELECT post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post " "; $r = mysql_query($q) eller die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // samle alle lenker ved hjelp av regulære uttrykk if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($matches som $url) ( // filtrere ut unødvendige domener $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ ekskluderte_domener)) (fortsett; ) // sette sammen $url_list = $url; ) ) ) // fjern repetisjoner $url_list = array_values(array_unique($url_list)); if (!$url_list) (die("Ingen URL å sjekke"); )

I denne delen av skriptet trekker vi rett og slett ut alle eksterne lenker fra databasen. La oss sjekke dem:

$mh = curl_multi_init(); // 1. legg til lenker for ($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 "==Døde URL-er==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URLer==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Fungerende URLer==\n"; echo implode("\n", $working_urls); ekko "\n\n"; // 9. legger til et håndtak med den gitte URL-funksjonen add_url_to_multi_handle($mh, $url_list) ( statisk $index = 0; // hvis det fortsatt er lenker if (isset($url_list[$index])) ( // alt er som vanlig $ ch = curl_init(); // set options curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // returner i stedet for å vise resultatet curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // tillat omdirigerer curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // få bare overskrifter for å spare tid curl_setopt($ch, CURLOPT_NOBODY, 1); // legg til i multi-håndtak curl_multi_add_handle($mh, $ch); $index++; ) )

La oss se på koden mer detaljert (nummereringen tilsvarer kommentarene i koden):

  1. Vi legger til et innledende antall deskriptorer for ikke å overbelaste systemet med tråder. Tallet styres av $max_connections-variabelen.
  2. $curRunning-variabelen lagrer antall løpende tråder, $running lagrer den forrige verdien; hvis de blir ulik, har en av trådene fullført arbeidet.
  3. Vi mottar informasjon om den fullførte forespørselen.
  4. Hvis det ikke er noe svar fra serveren, fungerer ikke koblingen.
  5. Serverresponsen er 404.
  6. Ellers fungerer linken.
  7. Forespørselen er fullført, vi frigjør ressurser.
  8. La oss legge til en ny URL til multi-deskriptoren.
  9. Funksjon add_url_to_multi_handle() legger til et nytt håndtak med den gitte URL-en til multi-deskriptoren.

La oss kjøre skriptet:

Dead URLs== xample1234.com/ ==404 URLs== www.google.com/dsfasdfafd ==Working URLs== 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

Kontrollen tok omtrent 2 sekunder. Ved å kjøre 10 tråder samtidig, øker ytelsen 10 ganger sammenlignet med vanlige cURL-forespørsler. For å få innholdet i serversvaret, bruk funksjonen curl_multi_getcontent($ch) , hvor $ch er en beskrivelse hentet fra curl_multi_info_read() .

Andre cURL-funksjoner i PHP

HTTP-autentisering

Hvis HTTP-forespørselen krever autentisering, bruk følgende kode:

$url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // send brukernavn og passord curl_setopt($ch, CURLOPT_USERPWD, "mitt brukernavn:mittpassord"); // hvis omdirigeringer er tillatt curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL vil sende passordet etter omdirigeringer curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);

Last opp via FTP

PHP har sitt eget bibliotek for arbeid med FTP, men du kan også bruke cURL:

// les filen $file = fopen("/bane/til/fil", "r"); // url inneholder allerede de nødvendige dataene $url = "ftp://brukernavn: [e-postbeskyttet]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // options curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filstørrelse("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch);

Ved hjelp av en proxy

Forespørsler kan gjøres gjennom en spesifikk proxy:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // proxy-adresse curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // hvis autorisasjon kreves curl_setopt($ch, CURLOPT_PROXYUSERPWD,"bruker:pass"); $output = curl_exec($ch); curl_close($ch);

Tilbakeringingsfunksjoner

Det er mulig å bruke tilbakeringinger mens forespørselen kjører, uten å vente på at den skal fullføres. For eksempel, mens serversvaret lastes ned, kan vi bruke dataene som allerede er mottatt uten å vente på fullstendig nedlasting.

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

Tilbakeringingsfunksjonen må returnere lengden på strengen for at forespørselen skal fungere riktig.

Hver gang neste del av serversvaret mottas, vil en tilbakeringing bli kalt.

Konklusjon

I denne artikkelen så vi på de avanserte funksjonene til cURL i PHP. Neste gang du må sende URL-forespørsler, bruk cURL.

Vi må ofte laste ned ulike filer fra Internett, for eksempel kjørbare programfiler, skriptfiler, kildearkiver. Men dette trenger ikke alltid å gjøres gjennom nettleseren. I mange situasjoner er det mye lettere å utføre alle handlinger gjennom terminalen. For på denne måten kan du automatisere prosessen. På den annen side må webansvarlige fra tid til annen teste nettsidens tilgjengelighet, sjekke sendte og mottatte overskrifter og mye mer.

For å løse slike problemer og problemer i et lignende område, kan du bruke krølleverktøyet. Det lar deg løse et mye bredere spekter av problemer, inkludert simulering av brukerhandlinger på nettstedet. I denne artikkelen vil vi se på hvordan du bruker curl, hva det er og hvorfor dette programmet er nødvendig.

Faktisk er curl mer enn bare et kommandolinjeverktøy for Linux eller Windows. Dette er et sett med biblioteker som implementerer de grunnleggende egenskapene til å jobbe med URL-sider og overføre filer. Biblioteket støtter arbeid med protokoller: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, samt POP3, IMAP og SMTP. Den er flott for å simulere brukerhandlinger på sider og andre operasjoner med URL-er.

Støtte for curl-biblioteket er lagt til mange forskjellige programmeringsspråk og plattformer. Curl-verktøyet er en uavhengig innpakning for dette biblioteket. Det er dette verktøyet vi vil fokusere på i denne artikkelen.

curl kommando

Før vi går videre til en beskrivelse av hvordan curl linux-kommandoen kan brukes, la oss se på selve verktøyet og dets hovedalternativer som vi trenger. Syntaksen til verktøyet er veldig enkel:

$ curl alternativer link

La oss nå se på hovedalternativene:

  • -# - Vis en enkel fremdriftslinje under lasting;
  • -0 - bruk http 1.0-protokollen;
  • -1 - bruk tlsv1-krypteringsprotokollen;
  • -2 - bruk sslv2;
  • -3 - bruk sslv3;
  • -4 - bruk ipv4;
  • -6 - bruk ipv6;
  • -EN- angi din USER_AGENT;
  • -b- lagre informasjonskapsel til en fil;
  • -c- send informasjonskapsel til serveren fra en fil;
  • -C- fortsett å laste ned filen fra bruddpunktet eller spesifisert offset;
  • -m- maksimal ventetid for svar fra serveren;
  • -d- send data ved å bruke POST-metoden;
  • -D- lagre overskrifter returnert av serveren til en fil;
  • -e- angi Referer-uri-feltet, som indikerer hvilket nettsted brukeren kom fra;
  • -E- bruk et eksternt SSL-sertifikat;
  • -f- ikke vis feilmeldinger;
  • -F- sende data i form av et skjema;
  • -G- hvis dette alternativet er aktivert, vil alle data spesifisert i -d-alternativet bli overført ved hjelp av GET-metoden;
  • -H- overføre overskrifter til serveren;
  • -JEG- motta bare HTTP-overskriften og ignorer hele sidens innhold;
  • -j- lese og sende informasjonskapsler fra en fil;
  • -J- fjern overskriften fra forespørselen;
  • -L- godta og behandle omdirigeringer;
  • -s- maksimalt antall omdirigeringer ved å bruke Location;
  • -o- ut sideinnhold til en fil;
  • -O- lagre innhold til en fil med navnet på siden eller filen på serveren;
  • -s- bruk en proxy;
  • --proto- angi protokollen som skal brukes;
  • -R- lagre den siste endringstiden for en ekstern fil;
  • -s- Vis et minimum av informasjon om feil;
  • -S- vise feilmeldinger;
  • -T- Last opp filen til serveren;
  • -v- den mest detaljerte utgangen;
  • -y- minimum nedlastingshastighet;
  • -Y- maksimal nedlastingshastighet;
  • -z- last ned filen bare hvis den ble endret senere enn det angitte tidspunktet;
  • -V- vise versjonen.

Dette er på ingen måte alle alternativene for curl linux, men det viser det grunnleggende du må bruke.

Hvordan bruke curl?

Vi har dekket alt relatert til teorien om å jobbe med curl-verktøyet, nå er det på tide å gå videre til praksis og se på eksempler på curl-kommandoen.

Den vanligste oppgaven er dette. Det er veldig enkelt å laste ned filen. For å gjøre dette, send bare filnavnet eller html-siden til verktøyet i parameterne:

krøll https://raw.githubusercontent.com/curl/curl/master/README.md

Men her venter en overraskelse på deg: hele innholdet i filen vil bli sendt til standardutdata. For å skrive den til en hvilken som helst fil bruk:

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

Og hvis du vil at den resulterende filen skal hete det samme som filen på serveren, bruk -O-alternativet:

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

krøll -# -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Om nødvendig kan du laste ned flere filer med én kommando:

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

En annen ting som kan være nyttig for en administrator er å bare laste ned en fil hvis den er endret:

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

Fartsgrense

Du kan begrense nedlastingshastigheten til den nødvendige grensen for ikke å overbelaste nettverket ved å bruke -Y-alternativet:

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

Her må du spesifisere antall kilobyte per sekund som kan lastes ned. Du kan også avslutte forbindelsen hvis hastigheten ikke er nok, bruk -Y-alternativet for å gjøre dette:

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

Overføring av filer

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

Eller la oss sjekke at filen sendes via HTTP; det er en spesiell tjeneste for dette:

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

I svaret vil verktøyet fortelle deg hvor du kan finne den nedlastede filen.

Sender POST-data

Du kan sende ikke bare filer, men også alle data ved å bruke POST-metoden. La meg minne deg på at denne metoden brukes til å sende data i ulike former. For å sende en slik forespørsel, bruk alternativet -d. For testing vil vi bruke samme tjeneste:

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

Hvis du ikke er fornøyd med dette innsendingsalternativet, kan du late som om du sender inn skjemaet. Det er et alternativ for denne -F:

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

Her sender vi passordfeltet med skjemaet som ren tekst, på samme måte kan du sende flere parametere.

Sende og motta informasjonskapsler

Informasjonskapsler brukes av nettsteder for å lagre visse opplysninger på brukerens side. Dette kan være nødvendig for eksempel for autentisering. Du kan sende og motta informasjonskapsler ved å bruke curl. For å lagre de mottatte informasjonskapslene til en fil, bruk alternativet -c:

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

Du kan deretter sende krøll-cookien tilbake:

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

Header overføring og analyse

Vi trenger ikke alltid innholdet på siden. Noen ganger kan bare overskriftene være interessante. For å vise bare dem er det -I-alternativet:

curl -I https://site

Og alternativet -H lar deg sende flere eller flere til serveren, for eksempel kan du sende overskriften If-Modified-Since slik at siden returneres bare hvis den har blitt endret:

krøll-autentisering

Hvis serveren krever en av de vanlige typene autentisering, for eksempel HTTP Basic eller FTP, kan curl håndtere denne oppgaven veldig enkelt. For å spesifisere autentiseringsdetaljer, spesifiser dem ganske enkelt atskilt med et kolon i -u-alternativet:

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

Autentisering på HTTP-servere vil bli utført på samme måte.

Ved hjelp av en proxy

Hvis du trenger å bruke en proxy-server for å laste ned filer, så er det også veldig enkelt. Det er nok å spesifisere proxy-serveradressen i -x-alternativet:

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

konklusjoner

I denne artikkelen så vi på hvordan du bruker curl, hvorfor dette verktøyet er nødvendig og dets hovedfunksjoner. Til tross for deres likhet med, er de veldig forskjellige. Curl linux-kommandoen er designet mer for å analysere og simulere ulike handlinger på serveren, mens wget er mer egnet for å laste ned filer og gjennomsøke nettsteder.

Denne artikkelen vil snakke om et så kraftig verktøy som cURL, samt biblioteket for PHP som gir tilgang til dette verktøyet - libcurl. Hva er alt dette for noe? For å kommunisere med serveren ved hjelp av dataoverføringsprotokoller, for eksempel http eller ftp. Resten av protokollene er ikke spesielt interessante for oss; hvis noen ønsker å gå dypere inn i dette emnet, må de grave opp engelskspråklige ressurser, og denne artikkelen vil inneholde grunnleggende og eksempler på bruk.

Hva er egentlig cURL og libcurl? Generelle punkter

Så libcurl-biblioteket gir oss muligheten til å overføre data til serveren og motta svar fra den. Hva gir dette oss? Evnen til å etterligne brukeratferd eller ! Du kan motta innholdet på sidene for påfølgende parsing, du kan motta tjenestesvarshoder og programmere logge på nettsteder, lage skript for å legge ut meldinger (for eksempel på Twitter eller på fora) eller informasjon. Alt begrenses kun av fantasien din!

Installerer cURL på Denwer (Denver). Hvordan begynne å bruke libcurl?

Det første vi må gjøre er å installere biblioteket. På min lokale datamaskin bruker jeg Denwer-bygget, som det store flertallet av nybegynnere webmastere, som artikkelen er ment for. Erfarne brukere som uavhengig installerer php+apache+mysql-kombinasjonen vil kunne installere cURL, det er ikke for meg å forklare dem hvordan dette gjøres;) Og vi, nybegynnere, bruker ferdige løsninger for å gjøre det enklere. Installer derfor libcurl som følger:

  • Last ned den ferdige utvidelsespakken "PHP5: tilleggsmoduler".
  • Følgelig installerer vi det. Ikke noe komplisert, enig :)
  • Åpne filen i Notepad (jeg anbefaler alltid Notepad++): X:/webservers/usr/local/php5/php.ini //hvor X er stasjonen der webserveren er installert

    og fjern semikolon i begynnelsen av begrepene:

    ;extension=php_curl.dll

  • Vi starter Denver-serveren på nytt.

Klar. For å sjekke funksjonaliteten til biblioteket kan du kalle opp phpinfo()-funksjonen og finne linjen der: cURL support enabled. Gratulerer med din første seier.

Beskrivelse av cURL og første trinn

For å begynne å jobbe med verktøyet, må det initialiseres. Dette gjøres som følger:

$ch = curl_init();

Vi brukte funksjonen for initialisering av cURL-økten. I dette tilfellet kan du angi nettadressen med en gang, slik:

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

Og du kan gjøre dette senere, i alternativene. Rekkefølgen alternativene er installert i spiller ingen rolle. Dette gjøres av en annen funksjon:

Curl_setopt (ressurs ch, strengalternativ, blandet verdi)

Vi har allerede opprettet den første parameteren til denne funksjonen, det vil si ressurs ch, like ovenfor, men det er mange alternativer og verdiparametere. Jeg tror at du ikke bør kopiere og lime inn alle her, men bare gi en lenke til en detaljert beskrivelse av funksjonen, jeg håper ingen vil bli fornærmet: curl_setopt.

Jeg vil gi et eksempel på innstillingsalternativer ved å bruke en URL som eksempel:

$url = "https://nettsted"; curl_setopt($ch, CURLOPT_URL,$url);

Et par flere eksempler på innstillingsalternativer: la oss få serverens svarhode, uten å få selve siden:

Curl_setopt($ch, CURLOPT_HEADER, 1); // les overskriften curl_setopt($ch, CURLOPT_NOBODY, 1); // les KUN overskriften uten brødteksten

Så vi har initialisert økten, satt parameterne vi trenger, nå utfører vi den resulterende forespørselen, lukker økten og viser resultatet:

$result = curl_exec($ch); curl_close($ch); ekko $resultat;

Som et resultat får vi vårt første fullt fungerende eksempel på bruk av libcurl-biblioteket:

$ch = curl_init(); $url = "https://nettsted"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // les overskriften curl_setopt($ch, CURLOPT_NOBODY, 1); // les KUN overskriften uten brødteksten $result = curl_exec($ch); curl_close($ch); ekko $resultat;

Hvordan det fungerer, håper jeg, er klart, fordi vi så på hvert trinn separat :) Som et resultat mottar vi en HTTP-svar-header fra serveren, som vi definitivt vil analysere nedenfor for å bedre forstå alle stadier av interaksjon mellom nettleseren og serveren:

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

Fabelaktig! Vi mottok svarhodet fra serveren og testet biblioteket i aksjon. Hvordan er dette nyttig for oss? For nå kan du omtrent forestille deg handlingssekvensen når du arbeider med cURL:

  • Initialiser økten (curl_init)
  • Angi alternativene vi trenger (curl_setopt)
  • Utfør den mottatte forespørselen (curl_exec)
  • Avslutt økten (curl_close)

HTTP-forespørselshodestruktur

For eksempel vendte jeg meg til ya.ru-siden og så på den genererte nettleserforespørselen og svaret mottatt fra serveren. Her er de:
Be om
GET / HTTP/1.1 - Vi prøver å få siden på /, det vil si hovedsiden som ligger i roten til mappen. Vi bruker protokollversjon 1.1.
Brukeragent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Versjon/12.14— Vi presenterer oss for serveren, vi er Opera-nettleseren.
Vert: ya.ru — Domenenavnet til den forespurte ressursen.
Godta: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1— Liste over akseptable ressursformater.
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8— Liste over støttede språk.
Godta-koding: gzip, deflate— Støttede kodingsmetoder.
Cookie: yandexuid=ХХХХХ - Informasjonskapsler, om nødvendig.
Tilkobling: Keep-Alive - Vennligst ikke bryt forbindelsen og hold kontakten.
Svar
HTTP/1.1 200 Ok - Vi mottar et svar med kode 200, som betyr at alt er OK.
Server: nginx - Serveren introduserte seg selv - dette er nginx.
Dato: søn 10. mars 2013 14:10:50 GMT— Gjeldende dato og klokkeslett på serveren.
Innholdstype: tekst/html; charset=UTF-8— Innholdstype og koding.
Tilkobling: lukk - Serveren ønsker ikke å opprettholde en permanent forbindelse med oss, så den stenger den umiddelbart. En ny tilkobling opprettes for neste forespørsel.
Cache-Control: no-cache,no-store,max-age=0,must-revalidate— Cachinghåndtering. I dette tilfellet er den deaktivert.
Utløper: Søn, 10. mars 2013 14:10:50 GMT— Dato for forventet utløp av økten. I vårt tilfelle faller det sammen med åpningstiden, siden serveren umiddelbart lukket den, umiddelbart etter behandling.
Sist endret: søn, 10. mars 2013 14:10:50 GMT— Tidspunkt for siste endring.
Innholdskoding: gzip — Metode for koding av informasjon.
En fullstendig liste over alle parametere som kan finnes i HTTP-forespørselshodet finner du på Wikipedia.
Nå har du en grov ide om hvordan nettleseren og nettserveren din kommuniserer med hverandre. Dette er veldig nyttig å vite og forstå, fordi vi vil prøve å etterligne nettleserhandlinger ved å bruke libcurl-biblioteket. Gå videre.

Eksempel på arbeid med biblioteket

Jeg tror at etter at noen generelle punkter allerede er klare og alt ser ut til å være klart, så er det på tide å gå videre for å øve og finpusse ferdighetene dine ved å bruke eksempel. Personlig klør hendene mine alltid etter å prøve alt i praksis :)

Siden cURL er så bra for parsere, la oss vurdere funksjonen for å få sidekoden etter adressen. I dette tilfellet vil utdata være en matrise med tittel, sideinnhold og til og med feilkoder hvis noe går galt.

Funksjon 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); // returnerer nettsiden curl_setopt($ch, CURLOPT_HEADER, 0); // returnerer ikke overskrifter curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // følger omdirigeringer curl_setopt($ch, CURLOPT_ENCODING, ""); // prosesser alle kodinger curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // tidsavbrudd for tilkobling curl_setopt($ch, CURLOPT_TIMEOUT, 120); // tidsavbrudd for respons curl_setopt($PT_MAX, CURLOPT_SETOPT) , 10); // stopp etter den 10. viderekoblingen $content = curl_exec($ch); $err = curl_errno($ch); $errmsg = curl_error($ch); $header = curl_getinfo($ch); curl_close( $ ch); $header["errno"] = $err; $header["errmsg"] = $errmsg; $header["content"] = $content; return $header;)

Inndataparametere:
url — side eller nettstedsadresse.
Utdataparameterverdier (matrise med tre elementer):
header['errno'] - hvis noe gikk galt, vil det være en feilkode her.
header['errmsg'] – feilteksten vises her.
header['innhold'] - selve siden\filen\bilde osv.

Vi bruker funksjonen for eksempel slik:

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

Alt skal gå uten feil og du vil motta sidekoden i $page-variabelen. Hvis vi prøver å få tak i den ikke-eksisterende siden yaaaaaaaaaaaa.ru, får vi feilen:

Kunne ikke løse vert: yaaaaaaaaaaaa.ru; Finner ikke vert

Alt er behandlet korrekt og vakkert :)
Deretter kan du gjøre hva du vil med sidekoden, for eksempel analysere den med regulære uttrykk. Men det er alt i de neste leksjonene, men la oss nå stoppe ved dette.

JavaScript er blokkert i nettleseren din. Aktiver JavaScript for at nettstedet skal fungere!

Krøll

PHP støtter libcurl, et bibliotek laget av Daniel Stenberg som lar deg koble til forskjellige typer servere og protokoller.
libcurl støtter for øyeblikket http, https, ftp, gopher, telnet, dict, fil og ldap-protokoller.
libcurl støtter også HTTPS-sertifikater, HTTP POST, HTTP PUT, FTP-opplasting (dette kan også gjøres med ftp PHP-utvidelsen), HTTP-skjemabasert opplasting, proxyer, informasjonskapsler og bruker+passordautentisering.

Disse funksjonene ble introdusert i PHP 4.0.2.

curl_init

curl_init - initialiserer en CURL-økt.

Beskrivelse

ressurs curl_init()

Funksjon curl_init() initialiserer en ny økt og returnerer et CURL-håndtak for bruk i , og-funksjonene. Hvis den valgfrie parameteren url er gitt, vil alternativet CURLOPT_URL motta verdien av denne parameteren. Du kan installere den manuelt ved å bruke .

curl_setopt

curl_setopt - setter alternativer for CURL-overføring/overføring.

Beskrivelse

bool curl_setopt(ressurs ch, strengalternativ, blandet verdi)

Funksjon curl_setopt() setter alternativer for CURL-sesjonen identifisert av parameteren kap. Parameter alternativ er alternativet du vil angi, og verdi dette er opsjonsverdien alternativ .

Parameter verdi må være lang for følgende alternativer (spesifisert av parameter alternativ):

  • CURLOPT_INFILESIZE: Hvis du laster opp en fil til et eksternt nettsted, bør dette alternativet brukes til å fortelle PHP hva den forventede infilstørrelsen vil være.
  • CURLOPT_VERBOSE: Sett dette alternativet til en verdi som ikke er null hvis du vil at CURL skal rapportere alle handlinger.
  • CURLOPT_HEADER: Sett dette alternativet til en verdi som ikke er null hvis du vil at overskriften skal inkluderes i utdataene.
  • CURLOPT_NOPROGRESS: Sett dette alternativet til en verdi som ikke er null hvis du ikke vil at PHP skal vise en fremdriftsindikator for CURL-overføring. (PHP setter automatisk dette alternativet til en verdi som ikke er null; du trenger bare å endre den når du feilsøker.)
  • CURLOPT_NOBODY: Sett dette alternativet til en verdi som ikke er null hvis du ikke vil at kroppen skal inkluderes i utdataene.
  • CURLOPT_FAILONERROR: Sett dette alternativet til en verdi som ikke er null hvis du vil at PHP skal avsluttes stille hvis den returnerte HTTP-koden er større enn 300. Som standard returneres siden normalt med koden ignorert.
  • CURLOPT_UPLOAD: Sett dette alternativet til en verdi som ikke er null hvis du vil at PHP skal forberede filen for opplasting.
  • CURLOPT_POST: Sett dette alternativet til en verdi som ikke er null hvis du vil at PHP skal utføre vanlig HTTP POST. Denne POST er i normal form application/x-www-form-urlencoded, som oftest brukes av HTML-skjemaer.
  • KUN CURLOPT_FTPLIST: Sett dette alternativet til en verdi som ikke er null, og PHP vil vise FTP-katalognavn.
  • CURLOPT_FTPAPPEND: Sett dette alternativet til en verdi som ikke er null, og PHP vil legge til den eksterne filen i stedet for å overskrive den.
  • CURLOPT_NETRC: Sett dette alternativet til en verdi som ikke er null, og PHP vil skanne ~./netrc-filen din for å finne brukernavnet og passordet ditt for den eksterne siden du kobler til.
  • CURLOPT_FOLLOWLOCATION: Sett dette alternativet til en verdi som ikke er null for å følge enhver "Location: "-header som serveren sender som en del av en HTTP-header (merk at dette er rekursjon, PHP vil følge alle "Location: " -headers" som sendes. )
  • CURLOPT_PUT: Sett dette alternativet til en verdi som ikke er null til HTTP PUT filen. Filen for PUT må settes med CURLOPT_INFILE og CURLOPT_INFILESIZE.
  • CURLOPT_MUTE: Sett dette alternativet til en verdi som ikke er null, og PHP vil fungere skjult med hensyn til CURL-funksjoner.
  • CURLOPT_TIMEOUT: Send a long som en parameter som inneholder den maksimale tiden i sekunder som du lar CURL-funksjoner kjøre.
  • CURLOPT_CONNECTTIMEOUT: Send a long som en parameter som inneholder den maksimale tiden, i sekunder, som du lar vente når du prøver å koble til. Bruk 0 for å vente evig.
  • CURLOPT_LOW_SPEED_LIMIT: Send en lang som en parameter som inneholder overføringshastigheten, i byte per sekund, under hvilken overføringen må kjøres under kjøring CURLOPT_LOW_SPEED_TIME, i sekunder, for at PHP skal vurdere den for treg og avbryte den.
  • CURLOPT_LOW_SPEED_TIME: Send en lang som en parameter som inneholder tiden i sekunder under som overføringen må kjøres mens du kjører CURLOPT_LOW_SPEED_LIMIT for at PHP skal anse den for treg og avbryte den.
  • CURLOPT_RESUME_FROM: Passer lenge som en parameter som inneholder byteforskyvningen der overføringen skal starte.
  • CURLOPT_SSLVERSION: Send en lang som en parameter som inneholder SSL-versjonen som skal brukes (2 eller 3). Som standard prøver PHP å bestemme dette selv, selv om du i noen tilfeller må stille inn dette manuelt.
  • CURLOPT_SSL_VERIFYHOST: Pass lenge hvis CURL skal sjekke fellesnavnet på peer-sertifikatet i et SSL-håndtrykk. En verdi på 1 indikerer at vi bør sjekke om det finnes et felles /fellesnavn, en verdi på 2 indikerer at vi bør sørge for at det samsvarer med det angitte vertsnavnet.
  • CURLOPT_TIMECONDITION: Send a long som en parameter som bestemmer hvordan CURLOPT_TIMEVALUE behandles. Du kan sette denne parameteren til TIMECOND_IFMODSINCE eller TIMECOND_ISUNMODSINCE. Dette fungerer kun for HTTP.
  • CURLOPT_TIMEVALUE: Send en lang som en parameter, som er tiden i sekunder siden 1. januar 1970. Denne tiden brukes som spesifisert av alternativet CURLOPT_TIMEVALUE, ellers vil standard TIMECOND_IFMODSINCE bli brukt.
  • CURLOPT_RETURNTRANSFER: Send en verdi som ikke er null hvis du vil at CURL skal returnere den mottatte informasjonen direkte i stedet for å skrive den ut direkte.

Parameter verdi må være en streng for følgende parameterverdier alternativ :

Følgende alternativer forventer en filbeskrivelse, som er hentet ved hjelp av funksjonen fopen() :

  • CURLOPT_FILE: Filen der utdataene fra overføringen din skal plasseres, er som standard STDOUT.
  • CURLOPT_INFILE: Filen som overføringsinndataene kommer fra.
  • CURLOPT_WRITEHEADER: Fil for opptak av header-delen av utdata.
  • CURLOPT_STDERR: Fil for å registrere feil, i stedet for stderr.

Parameter verdi long write_callback (ressurs ch, strengdata)( ... return strlen($data);) alternativ :

  • CURLOPT_WRITEFUNCTION: .
  • CURLOPT_HEADERFUNCTION: .

Parameter verdi skal være en funksjon av følgende form streng read_callback (ressurs ch, ressurs fd, lang lengde)() for følgende parameterverdier alternativ :

  • CURLOPT_READFUNCTION: .

curl_exec

curl_exec - utfører en CURL-økt.

Beskrivelse

bool curl_exec(ressurs ch)

Denne funksjonen skal kalles opp etter at du har initialisert en CURL-sesjon og alle alternativer for den økten allerede er satt. Hensikten er ganske enkelt å utføre en forhåndsdefinert CURL-sesjon (spesifisert i parameteren kap).

curl_close

curl_close - lukker CURL-økten.

Beskrivelse

tomrom curl_close(ressurs ch)

Denne funksjonen lukker CURL-sesjonen og frigjør alle ressurser. CURL håndtak kap er også slettet.

curl_errno

curl_errno - returnerer et heltall som inneholder det siste feilnummeret.

Beskrivelse

Eksempel 1: Initialisere en ny CURL-økt og hente en nettside.
Eksempel 2: Bruk av PHPs CURL-modul for å få example.com
Eksempel 3: Sjekke URL-tilgjengelighet ved å bruke PHPs CURL
Eksempel 4: Separering av overskriften fra hovedteksten oppnådd ved bruk av PHPs CURL
Eksempel 5: Bestemme en henvisnings-URL ved å bruke PHPs CURL
problemet: curl_setopt($ch,FOLLOW_LOCATION,1); feilen: problemer med open_basedir og safe_mode løsningen: en funksjon som allerede er utviklet av noen løsningen n 2: samme funksjon, modifisert, fungerer utmerket for meg..= $curl_max_loops) ( $curl_loops = 0; return FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, sant); $data = curl_exec($ch); list($header, $data) = eksplodere("\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))); hvis (!$url) ( //kunne ikke behandle url for å omdirigere til $curl_loops = 0; return $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["schema"]) $url["scheme"] = $last_url["skjema"]; if (!$url["host"]) $url["host"] = $last_url[ "host"]; if (!$url["path"]) $url["path"] = $last_url["path"]; $new_url = $url["skjema"] . "://" . $ url["host"] . $url["path"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Omdirigerer til", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
bare bruk denne funksjonen uten de FOLLOW_LOCATION og bør fungere. problemet var at når du kommer til linjen der du returnerer dataene hvis http_code var annerledes enn 301 oe 302, har $data foreldet informasjon eller ingen. så $debbbb gjør jobben.
Eksempel 6: Parsing av en informasjonskapsel fra overskriften ved hjelp av CURL PHP
Noen ganger kan du ikke bruke CURLOPT_COOKIEJAR og CURLOPT_COOKIEFILE på grunn av serverens php-innstillinger (De sier at du kan hente filer fra serveren ved å bruke disse alternativene). Her er løsningen 1)Ikke bruk CURLOPT_FOLLOWLOCATION 2)Bruk curl_setopt($ch, CURLOPT_HEADER, 1) 3) Ta fra overskriften cookies slik: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $resultater); 4)Sett dem med curl_setopt($ch, CURLOPT_COOKIE, $cookies);
Eksempel 7: Parsing av en informasjonskapsel fra overskriften ved hjelp av CURL PHP
Som Yevgen nevnte tidligere kan vi noen ganger ikke bruke CURLOPT_COOKIEJAR og CURLOPT_COOKIEFILE. Nedenfor er en header-tilbakeringingsfunksjon jeg skrev tilbake i januar som lar deg vedlikeholde informasjonskapsler mellom cURL-forespørsler. Informasjonskapsler legges til $ch under alle forespørsler selv under omdirigering, slik at du kan bruk den sammen med CURLOPT_FOLLOWLOCATION. Her er koden: funksjon read_header($ch, $string) ( global $location; #hold oversikt over plassering/omdirigeringer global $cookiearr; #lagre informasjonskapsler her global $ch; # ^overstyrer funksjonen param $ch # dette er greit fordi vi må # oppdatere den globale $ch med # nye informasjonskapsler $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #hold styr på siste omdirigering $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #hent informasjonskapselen $cookiestr = trim(substr( $streng, 11, -1)); $cookie = explode(";", $cookiestr); $cookie = explode("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute bare på slutten av header foreach ($cookiearr som $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) returner $lengde; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Denne koden forutsetter at du vil gjenbruke $ch uten å initialisere den hver gang (kall curl_init bare én gang, i begynnelsen). Hvis du trenger å initialisere $ch på nytt når som helst i koden din, kan du få tilgang til de lagrede informasjonskapslene i $cookiearr og inkludere dem i den nye $ch. Jeg skrev denne funksjonen før jeg hadde nok erfaring med regulære uttrykk slik at du ikke finner noen preg_match-kall her. Jeg har brukt denne koden en god stund og uten problemer med å få tilgang til gmail, yahoo, hotmail, aol osv. hvor jeg måtte gå gjennom pålogging og noen få sider før du kommer til det jeg lette etter.
Eksempel 8: Sette opp en header load handler med CURL PHP
Ved å bruke cURL måtte jeg ringe et tredjepartsskript som returnerte binære data som vedlegg for å videresende hentede data igjen som vedlegg. Problemet var at tredjepartsskriptet av og til returnerte HTTP-feil, og jeg ønsket å unngå å sende videre vedlegg med null lengde i slike tilfeller. Kombinasjon av bruk av CURLOPT_FAILONERROR og CURLOPT_HEADERFUNCTION tilbakeringing bidro til å behandle tredjepartsskriptets HTTP-feil pent: function curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) ( header($strHeader) ); header("Innholdsdisposisjon: vedlegg; filnavn="filnavn.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) ( skriv ut "Feil med kode: " . $intReturnCode; )
Eksempel 9. Lagre en side til en fil og beregne overføringshastigheten ved hjelp av CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); funksjon 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); ekko "
"; echo "Average speed download == " . $sAverageSpeedDownload . " 
"; echo "Average Speed ​​​​upload == " . $sAverageSpeedUpload ."
"; ekko "
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
"; curl_close($sh); FClukk ($hFile); ekko "( Se filen "".$sTxtfile."" i samme bane til hosting." " til hvor dette skriptet PHP).
"; }
Eksempel 9. Motta en side via en SSL-tilkobling (https)
$ch=curl_init("https://nettsted"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Deaktiver feilen "SSL-sertifikatproblem, bekreft at CA-sertifikatet er OK" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Deaktiver feilen "SSL: sertifikatemnets navn "vertsnavn.ru" samsvarer ikke med målvertsnavnet "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);
Eksempel 10: Bruk av økter og informasjonskapsler i curl
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://nettsted"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//lagre mottatte COOKIES til en fil curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //send til serveren COOKIE-ene mottok fra den under autorisasjonen $out=curl_exec($curl);
Eksempel 11: Filopplasting og flerdimensjonal array i Curl. CURLOPT_POSTFIELDS + CurlFile

Hvis du trenger å sende en flerdimensjonal matrise og en fil i en POST-forespørsel, vil du støte på et uløselig problem. Hvis du sender en flerdimensjonal matrise til CURLOPT_POSTFIELDS, vil det andre nivået bli sendt som strengen "Array". Hvis du konverterer ved hjelp av http_build_query, vil du ikke kunne overføre filen.

Nedenfor er en funksjon for koding av en todimensjonal matrise med fillasting for Curl, som vil fungere i både eldre versjoner av PHP 5.3, PHP 5.4 og PHP 5.6

/** konverterer en flerdimensjonal matrise til en endimensjonal matrise ved hjelp av komplekse indekser og erstatter @ i prefikset med CurlFile for bruk i Curl * @param $inputArray * @param string $inputKey * @return array $requestVars = array ("id" => array( 1, 2,"id"=>1234), "navn" => "logg", "loggfil" => "@/tmp/test.log"); vi får: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["navn"]=> streng(3) "logg" [ "logfile"]=> string(13) "/tmp/test.log" ) */ funksjon convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray som $key => $value ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value) = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? new CurlFile(ltrim($value, "@")): $value; ) else ( $resultArray[$tmpKey ] = $verdi; ) ) returner $resultArray; ) // sjekk $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "logg", "logfile" " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "side"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Applikasjonseksempler på bruk av Curl