PHP CURL - λειτουργίες και παραδείγματα χρήσης. Προηγμένη χρήση του cURL στις επιλογές γραμμής εντολών PHP Curl
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Ορίζει μια παράμετρο για την περίοδο λειτουργίας CURL
Λίστα παραμέτρων
cURL λαβή που λαμβάνεται από curl_init().
Παράμετρος που θα ρυθμιστεί CURLOPT_XXX.
Η τιμή της παραμέτρου επιλογής.
bool:
Παράμετρος | Σημειώσεις | |
---|---|---|
CURLOPT_AUTOREFERER | ΑΛΗΘΗΣγια αυτόματη ρύθμιση πεδίου Αναφέρων:σε αιτήματα που ανακατευθύνονται κατά κεφαλίδα Τοποθεσία:. | |
CURLOPT_BINARYTRANSFER | ΑΛΗΘΗΣγια να επιστρέψετε την πρωτογενή απόκριση όταν χρησιμοποιείτε μια σταθερά CURLOPT_RETURNTRANSFER. | Από την PHP 5.1.3 αυτή η επιλογή δεν απαιτείται πλέον: η ακατέργαστη έξοδος επιστρέφεται πάντα όταν χρησιμοποιείται η επιλογή CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | ΑΛΗΘΗΣγια να δώσει εντολή στην τρέχουσα συνεδρία να ξεκινήσει μια νέα "συνεδρία" cookies. Αυτό θα αναγκάσει το libcurl να αγνοήσει τυχόν cookies "session" που θα έπρεπε να έχει φορτώσει από την προηγούμενη περίοδο λειτουργίας. Από προεπιλογή, το libcurl αποθηκεύει και φορτώνει πάντα όλα τα cookies, ανεξάρτητα από το αν είναι "session" ή όχι. Τα cookies "Περίοδος λειτουργίας" είναι cookies που δεν λήγουν και πρέπει να υπάρχουν μόνο για την τρέχουσα "συνεδρία". | |
CURLOPT_CERTINFO | ΑΛΗΘΗΣγια έξοδο πληροφοριών πιστοποιητικού SSL για ροή STDERRμε ασφαλείς συνδέσεις. | Προστέθηκε στο cURL 7.19.1. Διαθέσιμο από την PHP 5.3.2. Απαιτεί αυτή η επιλογή να είναι ενεργοποιημένη για σωστή λειτουργία CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | ΑΛΗΘΗΣλέει στη βιβλιοθήκη να εκτελέσει τον απαραίτητο έλεγχο ταυτότητας διακομιστή μεσολάβησης και ρύθμιση σύνδεσης, αλλά δεν μεταδίδει δεδομένα. Αυτή η επιλογή εφαρμόζεται για HTTP, SMTP και POP3. | Προστέθηκε στο 7.15.2. Διατίθεται από την PHP 5.5.0. |
CURLOPT_CRLF | ΑΛΗΘΗΣγια να μετατρέψετε τις καταλήξεις γραμμών Unix σε CRLF. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | ΑΛΗΘΗΣγια να χρησιμοποιήσετε την καθολική κρυφή μνήμη DNS. Αυτή η επιλογή δεν είναι ασφαλής σε νήματα και είναι ενεργοποιημένη από προεπιλογή. | |
CURLOPT_FAILONERROR | ΑΛΗΘΗΣγια μια λεπτομερή αναφορά αποτυχίας, εάν ο κωδικός HTTP που ελήφθη είναι μεγαλύτερος ή ίσος με 400. Η προεπιλεγμένη συμπεριφορά επιστρέφει τη σελίδα ως κανονική, αγνοώντας τον κωδικό. | |
CURLOPT_FILETIME | ΑΛΗΘΗΣγια να προσπαθήσετε να λάβετε την ημερομηνία τροποποίησης ενός απομακρυσμένου εγγράφου. Αυτή η τιμή μπορεί να ληφθεί χρησιμοποιώντας την παράμετρο CURLINFO_FILETIME από τη συνάρτηση curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | ΑΛΗΘΗΣνα ακολουθήσει οποιαδήποτε επικεφαλίδα "Τοποθεσία: "αποστέλλεται από τον διακομιστή στην απάντησή του (σημειώστε ότι αυτό συμβαίνει αναδρομικά, η PHP θα ακολουθήσει τυχόν κεφαλίδες που αποστέλλονται "Τοποθεσία: ", εκτός εάν έχει οριστεί μια σταθερά CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | ΑΛΗΘΗΣνα αναγκάσει μια σύνδεση να κλείσει μετά την ολοκλήρωση της επεξεργασίας της, ώστε να μην μπορεί να επαναχρησιμοποιηθεί. | |
CURLOPT_FRESH_CONNECT | ΑΛΗΘΗΣγια να αναγκάσετε τη χρήση μιας νέας σύνδεσης αντί μιας προσωρινής αποθήκευσης. | |
CURLOPT_FTP_USE_EPRT | ΑΛΗΘΗΣγια χρήση EPRT (και LPRT) για ενεργές μεταφορτώσεις FTP. Χρήση ΨΕΥΔΗΣγια να απενεργοποιήσετε τα EPRT και LPRT και να χρησιμοποιήσετε μόνο το PORT. | |
CURLOPT_FTP_USE_EPSV | ΑΛΗΘΗΣγια την αρχική δοκιμή της εντολής EPSV κατά τις μεταφορές FTP. Εάν η εντολή αποτύχει, θα επιστρέψει στο PASV. Εγκατάσταση σε ΨΕΥΔΗΣγια να απενεργοποιήσετε το EPSV. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | ΑΛΗΘΗΣγια να δημιουργήσετε καταλόγους που λείπουν εάν μια λειτουργία FTP συναντήσει μια ανύπαρκτη διαδρομή. | |
CURLOPT_FTPAPPEND | ΑΛΗΘΗΣγια να γράψετε ένα απομακρυσμένο αρχείο μέχρι το τέλος, αντί να το αντικαταστήσετε σε ένα υπάρχον αρχείο. | |
CURLOPT_TCP_NODELAY | Καθορίζει μόνιμα εάν η επιλογή TCP_NODELAY θα πρέπει να οριστεί ή να διαγραφεί (1 = ορισμός, 0 = διαγραφή). Από προεπιλογή, η επιλογή διαγράφεται. | Διατίθεται από την PHP 5.2.1 για εκδόσεις που έχουν κατασκευαστεί με libcurl 7.11.2 ή νεότερη έκδοση. |
CURLOPT_FTPASCII | Παρατσούκλι CURLOPT_TRANSFERTEXT. Χρησιμοποιήστε αυτό αντί. | |
CURLOPT_FTPLISTONLY | ΑΛΗΘΗΣγια να επιστρέψετε μόνο μια λίστα ονομάτων από τον κατάλογο FTP. | |
CURLOPT_HEADER | ΑΛΗΘΗΣγια να συμπεριλάβετε κεφαλίδες στην έξοδο. | |
CURLINFO_HEADER_OUT | ΑΛΗΘΗΣγια να παρακολουθείτε τη συμβολοσειρά ερωτήματος λαβής. | Διαθέσιμο από την PHP 5.1.3. Πρόθεμα CURLINFO_χρησιμοποιείται ειδικά. |
CURLOPT_HTTPGET | ΑΛΗΘΗΣγια να επαναφέρετε τη μέθοδο αιτήματος HTTP στη μέθοδο GET. Εφόσον το GET είναι η προεπιλογή, αυτή η παράμετρος χρειάζεται μόνο εάν η μέθοδος αιτήματος έχει προηγουμένως αλλάξει. | |
CURLOPT_HTTPPROXYTUNNEL | ΑΛΗΘΗΣγια σήραγγα μέσω του καθορισμένου διακομιστή μεσολάβησης HTTP. | |
CURLOPT_MUTE | ΑΛΗΘΗΣγια να απενεργοποιήσετε πλήρως τα μηνύματα λειτουργίας cURL. | Καταργήθηκε στο cURL 7.15.5 (μπορεί να χρησιμοποιηθεί η επιλογή CURLOPT_RETURNTRANSFER) |
CURLOPT_NETRC | ΑΛΗΘΗΣγια να διαβάσετε το αρχείο ~/.netrc για τη σύνδεση και τον κωδικό πρόσβασης για την απομακρυσμένη τοποθεσία με την οποία δημιουργείται η σύνδεση. | |
CURLOPT_NOBODY | ΑΛΗΘΗΣγια να αποκλείσει το σώμα απόκρισης από την έξοδο. Η μέθοδος αιτήματος έχει οριστεί σε HEAD. Αλλαγή αυτής της ρύθμισης σε ΨΕΥΔΗΣδεν το αλλάζει ξανά σε GET. | |
CURLOPT_NOPROGRESS | ΑΛΗΘΗΣγια να απενεργοποιήσετε την ένδειξη προόδου στις μεταφορές cURL.
|
|
CURLOPT_NOSIGNAL | ΑΛΗΘΗΣνα αγνοήσει οποιαδήποτε συνάρτηση cURL που στέλνει σήματα στη διαδικασία PHP. Αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή σε SAPI πολλαπλών νημάτων για να επιτρέπεται στις παραμέτρους χρονικού ορίου να λειτουργούν σωστά. | |
CURLOPT_POST | ΑΛΗΘΗΣγια να χρησιμοποιήσετε κανονικό HTTP POST. Αυτή η μέθοδος POST χρησιμοποιεί το κανονικό , που χρησιμοποιείται συνήθως σε φόρμες HTML. | |
CURLOPT_PUT | ΑΛΗΘΗΣγια λήψη ενός αρχείου χρησιμοποιώντας τη μέθοδο HTTP PUT. Το αρχείο που χρησιμοποιείται πρέπει να ρυθμιστεί χρησιμοποιώντας τις επιλογές CURLOPT_INFILEΚαι CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | ΑΛΗΘΗΣγια να επιστρέψετε το αποτέλεσμα της μεταφοράς ως συμβολοσειρά από curl_exec()αντί για άμεση έξοδο στο πρόγραμμα περιήγησης. | |
CURLOPT_SAFE_UPLOAD | ΑΛΗΘΗΣγια να απενεργοποιήσετε την υποστήριξη προθέματος @ για ληφθέντα αρχεία σε CURLOPT_POSTFIELDS, που σημαίνει ότι οι τιμές πέρασαν με @ μπορούν να μεταδοθούν με ασφάλεια ως πεδία. Αντί για πρόθεμα, μπορείτε να χρησιμοποιήσετε την επιλογή CURLFileρε. | Προστέθηκε στην PHP 5.5.0 με προεπιλεγμένη τιμή ΨΕΥΔΗΣ. Στην PHP 5.6.0 έγινε ίσο με από προεπιλογή ΑΛΗΘΗΣ. |
CURLOPT_SSL_VERIFYPEER | ΨΕΥΔΗΣγια να σταματήσει το cURL να ελέγχει το πιστοποιητικό κεντρικού υπολογιστή. Εναλλακτικά πιστοποιητικά προς επαλήθευση μπορούν να καθοριστούν χρησιμοποιώντας την παράμετρο CURLOPT_CAINFOή τον κατάλογο με τα πιστοποιητικά που καθορίζονται από την παράμετρο CURLOPT_CAPATH. | Η προεπιλογή είναι ΑΛΗΘΗΣαπό την έκδοση cURL 7.10. Η προεπιλεγμένη διανομή εγκαθίσταται ξεκινώντας από την έκδοση cURL 7.10. |
CURLOPT_TRANSFERTEXT | ΑΛΗΘΗΣγια να χρησιμοποιήσετε τη λειτουργία ASCII για μεταφορές FTP. Όταν χρησιμοποιείτε LDAP, τα δεδομένα επιστρέφονται σε απλό κείμενο αντί για HTML. Σε συστήματα Windows το νήμα STDOUTδεν ρυθμίζεται σε δυαδική λειτουργία. | |
CURLOPT_UNRESTRICTED_AUTH | ΑΛΗΘΗΣγια να συνεχίσετε την αποστολή στοιχείων σύνδεσης και κωδικού πρόσβασης κατά τις ανακατευθύνσεις (κατά τη χρήση CURLOPT_FOLLOWLOCATION), ακόμα κι αν αλλάξει το όνομα του κεντρικού υπολογιστή. | |
CURLOPT_UPLOAD | ΑΛΗΘΗΣγια να προετοιμαστείτε για τη μεταφόρτωση του αρχείου στον διακομιστή. | |
CURLOPT_VERBOSE | ΑΛΗΘΗΣγια εμφάνιση πρόσθετων πληροφοριών. Γράφει την έξοδο σε μια ροή STDERR, ή το αρχείο που καθορίζεται από την παράμετρο CURLOPT_STDERR. |
Για τις ακόλουθες τιμές παραμέτρων επιλογής, η παράμετρος τιμής πρέπει να είναι του τύπου ακέραιος αριθμός:
Παράμετρος | Ορισμός τιμής τιμής | Σημειώσεις |
---|---|---|
CURLOPT_BUFFERSIZE | Το μέγεθος του buffer που χρησιμοποιείται για κάθε ανάγνωση. Ωστόσο, δεν υπάρχει καμία εγγύηση ότι αυτό το αίτημα θα ολοκληρωθεί. | Προστέθηκε στο cURL 7.10. |
CURLOPT_CLOSEPOLICY | Μία από τις σταθερές CURLCLOSEPOLICY_*.
|
Καταργήθηκε στην PHP 5.6.0. |
CURLOPT_CONNECTTIMEOUT | Ο αριθμός των δευτερολέπτων που πρέπει να περιμένετε όταν προσπαθείτε να συνδεθείτε. Χρησιμοποιήστε το 0 για να περιμένετε επ' αόριστον. | |
CURLOPT_CONNECTTIMEOUT_MS | Ο αριθμός των χιλιοστών του δευτερολέπτου που πρέπει να περιμένετε κατά την προσπάθεια σύνδεσης. Χρησιμοποιήστε το 0 για να περιμένετε επ' αόριστον. Εάν το libcurl έχει μεταγλωττιστεί χρησιμοποιώντας την τυπική ανάλυση ονομάτων του συστήματος, τότε η σύνδεση θα εξακολουθεί να χρησιμοποιεί μια πλήρη δεύτερη αναμονή ως χρονικό όριο, με ελάχιστο επιτρεπόμενο χρονικό όριο 1 δευτερόλεπτο. | Προστέθηκε στην έκδοση cURL 7.16.2. Διαθέσιμο από την PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Ο αριθμός των δευτερολέπτων που οι εγγραφές DNS αποθηκεύονται στη μνήμη. Από προεπιλογή, αυτή η παράμετρος είναι 120 (2 λεπτά). | |
CURLOPT_FTPSSLAUTH | Μέθοδος ελέγχου ταυτότητας FTP (σε ενεργή λειτουργία): CURLFTPAUTH_SSL(Το SSL ελέγχεται πρώτα), CURLFTPAUTH_TLS(Το TLS ελέγχθηκε πρώτα) ή CURLFTPAUTH_DEFAULT(το cURL αποφασίζει μόνος του). | Προστέθηκε στην έκδοση cURL 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (από προεπιλογή, η CURL επιλέγει ποια έκδοση θα χρησιμοποιήσει), CURL_HTTP_VERSION_1_0 (αναγκαστική HTTP/1.0) ή CURL_HTTP_VERSION_1_1 (αναγκαστική HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Μπορείτε να χρησιμοποιήσετε τον τελεστή bitwise | (ή) να συνδυάσουν πολλές μεθόδους μαζί. Σε αυτήν την περίπτωση, το cURL θα ρωτήσει τον διακομιστή για υποστηριζόμενες μεθόδους εξουσιοδότησης και θα επιλέξει την καλύτερη. Το CURLAUTH_ANY είναι ψευδώνυμο CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSΔΙΑΠΡΑΓΜΑΤΕΥΣΗ | CURLAUTH_NTLM. Το CURLAUTH_ANYSAFE είναι ψευδώνυμο CURLAUTH_DIGEST | CURLAUTH_GSSΔΙΑΠΡΑΓΜΑΤΕΥΣΗ | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Το αναμενόμενο μέγεθος αρχείου, σε byte, κατά τη μεταφόρτωση ενός αρχείου σε έναν απομακρυσμένο διακομιστή. Λάβετε υπόψη ότι η χρήση αυτής της επιλογής δεν θα σταματήσει την αποστολή περαιτέρω δεδομένων που υπερβαίνουν αυτήν την τιμή, καθώς τα δεδομένα που αποστέλλονται εξαρτώνται από το αποτέλεσμα CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Ανώτερο όριο ταχύτητας μεταφοράς δεδομένων, σε byte ανά δευτερόλεπτο. Η επαλήθευση πραγματοποιείται εντός CURLOPT_LOW_SPEED_TIMEδευτερόλεπτα, μετά τα οποία η PHP θεωρεί τη μεταφορά πολύ αργή και τη ματαιώνει. | |
CURLOPT_LOW_SPEED_TIME | Ο μέγιστος αριθμός δευτερολέπτων κατά τη διάρκεια των οποίων ο ρυθμός μεταφοράς δεν πρέπει να υπερβαίνει CURLOPT_LOW_SPEED_LIMIT, διαφορετικά η PHP θα επισημάνει τη μεταφορά ως πολύ αργή και θα τη σταματήσει. | |
CURLOPT_MAXCONNECTS | Μέγιστος αριθμός μόνιμων συνδέσεων. Όταν επιτευχθεί το όριο, η παράμετρος χρησιμοποιείται για να καθορίσει ποια σύνδεση θα κλείσει. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Ο μέγιστος αριθμός αποδεκτών ανακατευθύνσεων. Χρησιμοποιήστε αυτήν την επιλογή μαζί με την επιλογή CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Εναλλακτική θύρα σύνδεσης. | |
CURLOPT_POSTREDIR | Μια μάσκα bit που περιέχει 1 (301 μετακινήθηκαν μόνιμα), 2 (302 βρέθηκαν) και 4 (303 Δείτε άλλα) για να καθορίσετε εάν η μέθοδος HTTP POST θα πρέπει να υποβάλλεται σε επεξεργασία όταν είναι ενεργοποιημένη η επιλογή CURLOPT_FOLLOWLOCATIONεάν συνέβη ο καθορισμένος τύπος ανακατεύθυνσης. | Προστέθηκε στο cURL 7.19.1. Διαθέσιμο από την PHP 5.3.2. |
CURLOPT_PROTOCOLS |
Λίγη μάσκα αξιών CURLPROTO_*. Αυτή η μάσκα περιορίζει τα πρωτόκολλα που χρησιμοποιούνται από το libcurl. Αυτό σας επιτρέπει να εργάζεστε σε libcurl με μεγάλο αριθμό πρωτοκόλλων και να περιορίζετε τη λειτουργία ορισμένων μεταφορών μόνο σε ένα υποσύνολο από αυτά. Από προεπιλογή, το libcurl χρησιμοποιεί όλα τα υποστηριζόμενα πρωτόκολλα. Δείτε επίσης την παράμετρο CURLOPT_REDIR_PROTOCOLS. Σωστές τιμές πρωτοκόλλου: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROPROCURL, CURLPROTO_FTPS , CURLPROTO_FILE , CURLP ROTO_TFTP, CURLPROTO_ALL |
|
CURLOPT_PROXYAUTH | Μέθοδοι εξουσιοδότησης HTTP που χρησιμοποιούνται κατά τη σύνδεση σε διακομιστή μεσολάβησης. Χρησιμοποιήστε τις ίδιες μάσκες bit που περιγράφηκαν για την παράμετρο CURLOPT_HTTPAUTH. Προς το παρόν, μόνο τα CURLAUTH_BASIC και CURLAUTH_NTLM υποστηρίζονται για εξουσιοδότηση διακομιστή μεσολάβησης. | Προστέθηκε στην έκδοση cURL 7.10.7. |
CURLOPT_PROXYPORT | Ο αριθμός θύρας του διακομιστή μεσολάβησης στον οποίο γίνεται η σύνδεση. Αυτός ο αριθμός μπορεί επίσης να οριστεί χρησιμοποιώντας την παράμετρο CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Είτε CURLPROXY_HTTP (προεπιλογή) είτε CURLPROXY_SOCKS5 . | Προστέθηκε στο cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Λίγη μάσκα αξιών CURLPROTO_*. Αυτό το bitmask περιορίζει τα πρωτόκολλα που χρησιμοποιούνται από το libcurl κατά την ανακατεύθυνση (με την παράμετρο ενεργοποιημένη CURLOPT_FOLLOWLOCATION). Αυτό σας επιτρέπει να περιορίσετε το σύνολο των πρωτοκόλλων που χρησιμοποιούνται κατά την ανακατεύθυνση για ορισμένες μεταδόσεις. Από προεπιλογή, το libcurl υποστηρίζει όλα τα πρωτόκολλα εκτός από το FILE και το SCP. Σε εκδόσεις πριν από την 7.19.4, η ανακατεύθυνση χρησιμοποιήθηκε για όλα τα πρωτόκολλα χωρίς εξαίρεση. Δείτε επίσης την περιγραφή παραμέτρων CURLOPT_PROTOCOLSγια μια λίστα σταθερών με τιμές πρωτοκόλλου. | Προστέθηκε στην έκδοση cURL 7.19.4. |
CURLOPT_RESUME_FROM | Μετατόπιση έναρξης μετάδοσης, σε byte. | |
CURLOPT_SSL_VERIFYHOST | Χρησιμοποιήστε το 1 για να ελέγξετε την ύπαρξη κοινού ονόματος στο πιστοποιητικό SSL. Χρησιμοποιήστε το 2 για να ελέγξετε ότι υπάρχει το κοινό όνομα και ότι ταιριάζει με τον καθορισμένο κεντρικό υπολογιστή. Σε ένα περιβάλλον μάχης, η τιμή αυτής της παραμέτρου θα πρέπει να είναι 2 (ορίζεται από προεπιλογή). | Η υποστήριξη για την τιμή 1 έχει καταργηθεί στο cURL 7.28.1 |
CURLOPT_SSLVERSION | Μία από τις σταθερές 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) ή CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Μέθοδος ερμηνείας παραμέτρων CURLOPT_TIMEVALUE. Χρησιμοποιήστε CURL_TIMECOND_IFMODSINCE για να επιστρέψετε τη σελίδα μόνο εάν έχει αλλάξει από την ώρα που καθορίζεται στην παράμετρο CURLOPT_TIMEVALUE. Εάν η σελίδα δεν έχει τροποποιηθεί, ο τίτλος θα επιστραφεί "304 Μη Τροποποιημένο", υπονοώντας ότι η παράμετρος CURLOPT_HEADERεγκατεστημένος σε ΑΛΗΘΗΣ. Χρησιμοποιήστε CURL_TIMECOND_IFUNMODSINCE για το αντίθετο αποτέλεσμα. Η προεπιλογή είναι CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | Ο μέγιστος αριθμός δευτερολέπτων που επιτρέπεται για την εκτέλεση συναρτήσεων cURL. | |
CURLOPT_TIMEOUT_MS | Ο μέγιστος αριθμός χιλιοστών του δευτερολέπτου που επιτρέπεται για την εκτέλεση συναρτήσεων cURL. Εάν το libcurl έχει δημιουργηθεί με χρήση της κανονικής ανάλυσης ονομάτων συστήματος, τότε αυτό το εύρος σύνδεσης θα εξακολουθεί να χρησιμοποιεί χρονικά όρια δεύτερης στρογγυλοποίησης, με ελάχιστο επιτρεπόμενο χρονικό όριο ένα δευτερόλεπτο. | Προστέθηκε στην έκδοση cURL 7.16.2. Διαθέσιμο από την PHP 5.2.3. |
CURLOPT_TIMEVALUE | Αριθμός δευτερολέπτων από την 1η Ιανουαρίου 1970. Αυτή η φορά θα χρησιμοποιηθεί από την παράμετρο CURLOPT_TIMECONDITION. Από προεπιλογή, χρησιμοποιείται η παράμετρος CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Εάν η ταχύτητα λήψης υπερβαίνει αυτήν την τιμή (καθορίζεται σε byte ανά δευτερόλεπτο) κατά μέσο όρο σε ολόκληρη τη μεταφορά, η λήψη θα τεθεί σε παύση για να διατηρηθεί η μέση ταχύτητα μικρότερη ή ίση με αυτήν την παράμετρο. Από προεπιλογή, η ταχύτητα δεν είναι περιορισμένη. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Εάν η μεταφόρτωση στον διακομιστή υπερβαίνει αυτήν την τιμή (καθορίζεται σε byte ανά δευτερόλεπτο) κατά μέσο όρο σε ολόκληρη τη μεταφορά, η μεταφόρτωση θα τεθεί σε παύση για να διατηρηθεί μια μέση ταχύτητα μικρότερη ή ίση με αυτήν την παράμετρο. Από προεπιλογή, η ταχύτητα δεν είναι περιορισμένη. | Προστέθηκε στην έκδοση cURL 7.15.5. Διαθέσιμο από την PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Ένα bitmask που αποτελείται από μία ή περισσότερες σταθερές: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Εγκαθιστώ CURLSSH_AUTH_ANYπροκειμένου το libcurl να επιλέξει ένα από αυτά ανεξάρτητα. | Προστέθηκε στο cURL 7.16.1. |
CURLOPT_IPRESOLVE | Επιτρέπει σε μια εφαρμογή να επιλέξει τον τύπο της διεύθυνσης IP με την οποία καθορίζεται το όνομα κεντρικού υπολογιστή. Αυτό είναι απαραίτητο εάν χρησιμοποιείτε ένα όνομα κεντρικού υπολογιστή που προέρχεται από περισσότερες από μία εκδόσεις της διεύθυνσης IP. Πιθανές τιμές θα μπορούσαν να είναι CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6και από προεπιλογή CURL_IPRESOLVE_WHATEVER. | Προστέθηκε στο cURL 7.10.8. |
Για τις ακόλουθες τιμές παραμέτρων επιλογής, η παράμετρος τιμής πρέπει να είναι του τύπου σειρά:
Παράμετρος | Ορισμός τιμής τιμής | Σημειώσεις |
---|---|---|
CURLOPT_CAINFO | Το όνομα ενός αρχείου που περιέχει ένα ή περισσότερα πιστοποιητικά έναντι των οποίων θα ελεγχθούν οι κόμβοι. Αυτή η παράμετρος έχει νόημα μόνο όταν χρησιμοποιείται σε συνδυασμό με CURLOPT_SSL_VERIFYPEER. | Απαιτεί μια απόλυτη διαδρομή. |
CURLOPT_CAPATH | Ένας κατάλογος που περιέχει πολλά πιστοποιητικά CA. Χρησιμοποιήστε αυτήν την επιλογή σε συνδυασμό με CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Περιεχόμενο κεφαλίδας "Κουλουράκι:", που χρησιμοποιείται στο αίτημα HTTP. Λάβετε υπόψη ότι πολλά cookies χωρίζονται από ένα ερωτηματικό ακολουθούμενο από ένα κενό (για παράδειγμα, " φρούτο=μήλο; χρώμα = κόκκινο") | |
CURLOPT_COOKIEFILE | Το όνομα του αρχείου που περιέχει τα cookies. Αυτό το αρχείο πρέπει να είναι σε μορφή Netscape ή απλώς κεφαλίδες HTTP γραμμένες στο αρχείο. Εάν μια κενή συμβολοσειρά μεταβιβαστεί ως όνομα αρχείου, τότε τα cookies δεν θα αποθηκευτούν, αλλά η επεξεργασία τους θα εξακολουθεί να είναι ενεργοποιημένη. | |
CURLOPT_COOKIEJAR | Το όνομα του αρχείου στο οποίο θα αποθηκευτούν όλα τα εσωτερικά cookie της τρέχουσας μεταφοράς αφού κλείσει η λαβή, για παράδειγμα αφού καλέσετε το curl_close. | |
CURLOPT_CUSTOMREQUEST | Αντ' αυτού χρησιμοποιήθηκε προσαρμοσμένη μέθοδος αιτήματος "ΠΑΙΡΝΩ"ή "ΚΕΦΑΛΙ"όταν κάνετε ένα αίτημα HTTP. Αυτό είναι χρήσιμο για ερωτήματα "ΔΙΑΓΡΑΦΩ"ή άλλα, πιο σπάνια αιτήματα HTTP. Οι σωστές έννοιες θα ήταν λέξεις όπως "ΠΑΙΡΝΩ", "ΘΕΣΗ", "ΣΥΝΔΕΩ-ΣΥΩΔΕΟΜΑΙ"και ούτω καθεξής; εκείνοι. Μην εισάγετε ολόκληρη τη γραμμή αιτήματος HTTP εδώ. Για παράδειγμα, μια ένδειξη "GET /index.html HTTP/1.0\r\n\r\n"θα είναι λάθος.
|
|
CURLOPT_EGDSOCKET | Αρέσει CURLOPT_RANDOM_FILE, εκτός από το ότι το όνομα αρχείου έχει οριστεί στην υποδοχή Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Περιεχόμενο κεφαλίδας "Αποδοχή-Κωδικοποίηση:". Αυτό επιτρέπει την αποκωδικοποίηση του αιτήματος. Οι υποστηριζόμενες κωδικοποιήσεις είναι "Ταυτότητα", "υποτιμώ"Και "gzip". Εάν περάσει μια κενή συμβολοσειρά, "" , αποστέλλεται μια κεφαλίδα που περιέχει όλους τους υποστηριζόμενους τύπους κωδικοποίησης. | Προστέθηκε στο cURL 7.10. |
CURLOPT_FTPPORT | Η τιμή που θα χρησιμοποιηθεί για τον προσδιορισμό της διεύθυνσης IP για την εντολή FTP "PORT". Η εντολή "PORT" λέει στον διακομιστή με ποια διεύθυνση IP πρέπει να συνδεθεί. Αυτό μπορεί να είναι διεύθυνση IP, όνομα κεντρικού υπολογιστή, όνομα διεπαφής δικτύου (υπό το Unix) ή απλά "-" για χρήση της προεπιλεγμένης διεύθυνσης IP του συστήματος. | |
CURLOPT_INTERFACE | Το όνομα της διεπαφής δικτύου που θα χρησιμοποιηθεί. Μπορεί να είναι ένα όνομα διεπαφής, μια διεύθυνση IP ή ένα όνομα κεντρικού υπολογιστή. | |
CURLOPT_KEYPASSWD | Απαιτείται κωδικός πρόσβασης για τη χρήση του ιδιωτικού κλειδιού CURLOPT_SSLKEYή CURLOPT_SSH_PRIVATE_KEYFILE. | Προστέθηκε στο cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Επίπεδο ασφαλείας KRB4 (Kerberos 4). Οποιαδήποτε από τις ακόλουθες τιμές (κατά σειρά από την πιο αδύναμη στην ισχυρότερη) είναι σωστή: "Σαφή", "ασφαλής", "εμπιστευτικός", "ιδιωτικός".. Εάν η καθορισμένη συμβολοσειρά διαφέρει από τις δεδομένες τιμές, θα χρησιμοποιηθεί η τιμή "ιδιωτικός". Ρύθμιση αυτής της επιλογής σε ΜΗΔΕΝΙΚΟθα απενεργοποιήσει εντελώς την ασφάλεια KRB4. Προς το παρόν, η ασφάλεια KRB4 λειτουργεί μόνο με συναλλαγές FTP. | |
CURLOPT_POSTFIELDS | Όλα τα δεδομένα που μεταδίδονται σε ένα αίτημα HTTP POST. Για να μεταφέρετε ένα αρχείο, καθορίστε πριν από το όνομα του αρχείου @ και χρησιμοποιήστε επίσης την πλήρη διαδρομή προς το αρχείο. Ο τύπος αρχείου μπορεί επίσης να καθοριστεί χρησιμοποιώντας τη μορφή " ;type=mimettype" ακολουθώντας το όνομα του αρχείου. Αυτή η παράμετρος μπορεί να μεταβιβαστεί ως συμβολοσειρά με κωδικοποίηση url, όπως " para1=val1¶2=val2&...", και με τη μορφή πίνακα, τα κλειδιά του οποίου θα είναι τα ονόματα των πεδίων και οι τιμές θα είναι το περιεχόμενό τους. Εάν η τιμή είναι πίνακας, η κεφαλίδα Τύπος περιεχομένουθα οριστεί σε πολυμερών/μορφών-δεδομένων. Ξεκινώντας από την PHP 5.2.0, κατά τη μεταφορά αρχείων με το πρόθεμα @ , η τιμή πρέπει να είναι πίνακας. Από την PHP 5.5.0, πρόθεμα @ έχει καταργηθεί και τα αρχεία μπορούν να σταλούν χρησιμοποιώντας CURLFile. Πρόθεμα @ μπορεί να απενεργοποιηθεί για να επιτραπούν τιμές που ξεκινούν με @ ορίζοντας την επιλογή CURLOPT_SAFE_UPLOADστο νόημα ΑΛΗΘΗΣ. | |
CURLOPT_PROXY | Διακομιστής μεσολάβησης HTTP μέσω του οποίου θα δρομολογούνται τα αιτήματα. | |
CURLOPT_PROXYUSERPWD | Σύνδεση και κωδικός γραμμένο στη φόρμα ":" , χρησιμοποιείται κατά τη σύνδεση μέσω διακομιστή μεσολάβησης. | |
CURLOPT_RANDOM_FILE | Το όνομα του αρχείου που χρησιμοποιείται για την προετοιμασία της γεννήτριας τυχαίων αριθμών για SSL. | |
CURLOPT_RANGE | Εύρος δεδομένων προς λήψη, σε μορφή "Χ-Υ", και είτε το X είτε το Y μπορούν να παραληφθούν. Το πρωτόκολλο HTTP υποστηρίζει επίσης τη μετάδοση πολλαπλών περιοχών που χωρίζονται με κόμματα, καθορίζονται στη μορφή "X-Y, N-M". | |
CURLOPT_REFERER | Περιεχόμενο κεφαλίδας "Αναφέρων:", το οποίο θα χρησιμοποιηθεί στο αίτημα HTTP. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Μια συμβολοσειρά που περιέχει 32 δεκαεξαδικά ψηφία. Η συμβολοσειρά πρέπει να είναι ένα άθροισμα ελέγχου MD5 του δημόσιου κλειδιού του απομακρυσμένου υπολογιστή και το libcurl θα επαναφέρει τη σύνδεση με τον απομακρυσμένο κεντρικό υπολογιστή έως ότου το άθροισμα ελέγχου ταιριάζει με το δημόσιο κλειδί. Αυτή η επιλογή είναι μόνο για μεταφορά δεδομένων χρησιμοποιώντας SCP και SFTP. | Προστέθηκε στο cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Το όνομα αρχείου για το δημόσιο κλειδί σας. Εάν δεν έχει καθοριστεί, το libcurl ορίζει ως προεπιλογή το αρχείο $HOME/.ssh/id_dsa.pub εάν έχει οριστεί η μεταβλητή περιβάλλοντος HOME και το αρχείο "id_dsa.pub" στον τρέχοντα κατάλογο εάν δεν έχει οριστεί η μεταβλητή περιβάλλοντος HOME. | Προστέθηκε στο cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Το όνομα αρχείου για το ιδιωτικό κλειδί σας. Εάν δεν έχει καθοριστεί, το libcurl ορίζει ως προεπιλογή το αρχείο $HOME/.ssh/id_dsa εάν έχει οριστεί η μεταβλητή περιβάλλοντος HOME και το αρχείο "id_dsa" στον τρέχοντα κατάλογο εάν δεν έχει οριστεί η μεταβλητή περιβάλλοντος HOME. Εάν το αρχείο προστατεύεται με κωδικό πρόσβασης, ορίστε τον κωδικό πρόσβασης χρησιμοποιώντας CURLOPT_KEYPASSWD. | Προστέθηκε στο cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Λίστα κρυπτογράφησης που χρησιμοποιούνται στις μεταφορές SSL. Για παράδειγμα, RC4-SHAΚαι TLSv1είναι έγκυρες λίστες κρυπτογράφησης. | |
CURLOPT_SSLCERT | Το όνομα ενός αρχείου με σωστά διαμορφωμένο πιστοποιητικό PEM. | |
CURLOPT_SSLCERTPASSWD | Απαιτείται κωδικός πρόσβασης για τη χρήση του πιστοποιητικού CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Μορφή πιστοποιητικού. Υποστηριζόμενες μορφές "PEM"(Προκαθορισμένο), "DER"Και "ENG". | Προστέθηκε στην έκδοση cURL 7.9.3. |
CURLOPT_SSLENGINE | Το αναγνωριστικό μηχανής κρυπτογράφησης για το ιδιωτικό κλειδί SSL που καθορίζεται στην παράμετρο CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Το αναγνωριστικό του μηχανισμού κρυπτογράφησης που χρησιμοποιείται για λειτουργίες ασύμμετρης κρυπτογράφησης. | |
CURLOPT_SSLKEY | Το όνομα του αρχείου ιδιωτικού κλειδιού SSL. | |
CURLOPT_SSLKEYPASSWD | Ο μυστικός κωδικός πρόσβασης που απαιτείται για τη χρήση του ιδιωτικού κλειδιού SSL που καθορίζεται από την παράμετρο CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Ο τύπος του ιδιωτικού κλειδιού SSL που καθορίζεται στην παράμετρο CURLOPT_SSLKEY. Υποστηρίζονται οι ακόλουθοι τύποι κλειδιών: "PEM"(Προκαθορισμένο), "DER"Και "ENG". | |
CURLOPT_URL | URL με δυνατότητα λήψης. Αυτή η παράμετρος μπορεί επίσης να οριστεί κατά την προετοιμασία μιας συνεδρίας χρησιμοποιώντας curl_init(). | |
CURLOPT_USERAGENT | Περιεχόμενο κεφαλίδας "User-Agent:", αποστέλλεται σε αίτημα HTTP. | |
CURLOPT_USERPWD | Σύνδεση και κωδικός πρόσβασης που χρησιμοποιούνται κατά τη σύνδεση, που καθορίζονται στη μορφή ":" . |
Για τις ακόλουθες τιμές παραμέτρων επιλογής, η παράμετρος τιμής πρέπει να είναι πίνακας:
Παράμετρος | Ορισμός τιμής τιμής | Σημειώσεις |
---|---|---|
CURLOPT_HTTP200LIASES | Μια σειρά από απαντήσεις HTTP 200 που θα αντιμετωπίζονται ως σωστές απαντήσεις και όχι ως λανθασμένες. | Προστέθηκε στην έκδοση cURL 7.10.3. |
CURLOPT_HTTPHEADER | Μια συστοιχία κεφαλίδων HTTP, σε πίνακα μορφής ("Τύπος περιεχομένου: κείμενο/απλό", "Μήκος περιεχομένου: 100") | |
CURLOPT_POSTQUOTE | Μια σειρά από εντολές FTP που εκτελούνται στον διακομιστή μετά την ολοκλήρωση ενός αιτήματος FTP. | |
CURLOPT_QUOTE | Μια σειρά από εντολές FTP που εκτελούνται στον διακομιστή πριν από την υποβολή αιτήματος FTP. |
Για τις ακόλουθες τιμές παραμέτρων επιλογής, η παράμετρος τιμής πρέπει να είναι μια λαβή ροής (που επιστρέφεται, για παράδειγμα, από τη συνάρτηση fopen()):
Παράμετρος | Ορισμός τιμής τιμής |
---|---|
CURLOPT_FILE | Το αρχείο στο οποίο θα γραφτεί το αποτέλεσμα της μεταφοράς. Προεπιλεγμένη ροή εξόδου STDOUT(παράθυρο προγράμματος περιήγησης). |
CURLOPT_INFILE | Το αρχείο από το οποίο πρέπει να διαβάζονται τα δεδομένα κατά τη μεταφόρτωση στον διακομιστή. |
CURLOPT_STDERR | Εναλλακτικό αρχείο εξόδου σφάλματος που χρησιμοποιείται στη θέση της ροής σφαλμάτων STDERR. |
CURLOPT_WRITEHEADER | Το αρχείο στο οποίο θα γραφτούν οι κεφαλίδες της τρέχουσας λειτουργίας. |
Για τις ακόλουθες τιμές παραμέτρων επιλογής, η παράμετρος τιμής πρέπει να είναι έγκυρο όνομα συνάρτησης ή κλείσιμο:
Παράμετρος | Ορισμός τιμής τιμής |
---|---|
CURLOPT_HEADERFUNCTION | Η λειτουργία επανάκλησης λαμβάνει δύο παραμέτρους. Η πρώτη παράμετρος είναι η λαβή cURL, η δεύτερη παράμετρος είναι μια συμβολοσειρά που περιέχει τις κεφαλίδες που πρέπει να γραφτούν. Οι κεφαλίδες πρέπει να γράφονται χρησιμοποιώντας αυτήν τη συνάρτηση επανάκλησης. Θα πρέπει να επιστρέψει τον αριθμό των byte που γράφτηκαν. |
CURLOPT_PASSWDFUNCTION | Η λειτουργία επανάκλησης λαμβάνει τρεις παραμέτρους. Η πρώτη παράμετρος είναι η λαβή cURL, η δεύτερη παράμετρος είναι η συμβολοσειρά προτροπής κωδικού πρόσβασης και η τρίτη παράμετρος είναι το μέγιστο μήκος κωδικού πρόσβασης. Θα πρέπει να επιστρέψει μια συμβολοσειρά που περιέχει τον κωδικό πρόσβασης. |
CURLOPT_PROGRESSFUNCTION |
Η λειτουργία επανάκλησης λαμβάνει πέντε παραμέτρους. Το πρώτο είναι ο περιγραφέας cURL, το δεύτερο είναι ο συνολικός αριθμός των byte που αναμένεται να ληφθούν από τον διακομιστή, το τρίτο είναι ο αριθμός των byte που έχουν ήδη ληφθεί, το τέταρτο είναι ο συνολικός αριθμός των byte που αναμένεται να σταλούν στον διακομιστή και το πέμπτο είναι ο αριθμός των byte που έχουν ήδη σταλεί.
Μπορείτε να επιστρέψετε μια μη μηδενική τιμή για να ακυρώσετε τη μεταφορά. Σε αυτή την περίπτωση θα εμφανιστεί ένα σφάλμα CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Η λειτουργία επανάκλησης λαμβάνει τρεις παραμέτρους. Η πρώτη παράμετρος είναι η λαβή cURL, η δεύτερη παράμετρος είναι ο πόρος ροής που μεταβιβάστηκε στο cURL μέσω της επιλογής CURLOPT_INFILE, και η τρίτη παράμετρος είναι η μέγιστη επιτρεπόμενη ποσότητα δεδομένων προς ανάγνωση. Η συνάρτηση επανάκλησης πρέπει να επιστρέφει μια συμβολοσειρά μήκους όχι μεγαλύτερη από την απαιτούμενη ποσότητα δεδομένων, συνήθως με ανάγνωση από τον πόρο ροής που έχει περάσει. Θα πρέπει να επιστρέψει μια κενή συμβολοσειρά για να σηματοδοτήσει το τέλος του αρχείου ΕΟΦ. |
CURLOPT_WRITEFUNCTION | Η λειτουργία επανάκλησης λαμβάνει δύο παραμέτρους. Η πρώτη παράμετρος είναι η λαβή cURL και η δεύτερη παράμετρος είναι η συμβολοσειρά που περιέχει τα δεδομένα που πρέπει να γραφτούν. Τα δεδομένα πρέπει να αποθηκεύονται χρησιμοποιώντας αυτήν τη λειτουργία. Πρέπει να επιστρέψει τον ακριβή αριθμό των γραμμένων byte, διαφορετικά η λήψη θα ματαιωθεί με σφάλμα. |
Άλλες έννοιες:
Επιστρεφόμενες τιμές
Επιστροφές ΑΛΗΘΗΣμετά την επιτυχή ολοκλήρωση ή ΨΕΥΔΗΣσε περίπτωση λάθους.
Λίστα αλλαγών
Εκδοχή | Περιγραφή |
---|---|
5.6.0 | Επιλογή CURL_SAFE_UPLOADτώρα έχει μια προεπιλεγμένη τιμή ΑΛΗΘΗΣ. |
5.6.0 | Καταργήθηκε η επιλογή CURLOPT_CLOSEPOLICYκαι τις σχετικές έννοιές του. |
5.5.0 | Ο πόρος cURL προστίθεται ως το πρώτο όρισμα στη συνάρτηση επανάκλησης CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Προστέθηκε επιλογή CURLOPT_SHARE. |
5.3.0 | Προστέθηκε επιλογή CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Προστέθηκαν επιλογές CURLOPT_PROTOCOLSΚαι CURLOPT_REDIR_PROTOCOLS. |
5.1.0 | Προστέθηκαν επιλογές CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTHΚαι CURLOPT_TIMECONDITION. |
5.0.0 | Προστέθηκαν επιλογές CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPEΚαι CURLOPT_HTTP200LIASES. |
Παραδείγματα
Παράδειγμα #1 Εκκίνηση μιας περιόδου λειτουργίας CURL και φόρτωση μιας ιστοσελίδας
// Δημιουργία νέου πόρου cURL /* http://localhost/upload.php: $ch = curl_init(); $data = array("name" => "Foo" , "file" => "@/home/user/test.png" ); Curl_setopt($ch, CURLOPT_URL, "http://localhost/upload.php"); Curl_exec($ch); Το αποτέλεσμα της εκτέλεσης αυτού του παραδείγματος: Πίνακας ( => Foo) Πίνακας ( => Πίνακας ( => test.png => εικόνα/png => /tmp/phpcpjNeQ => 0 => 279)) Σχόλιο: Μεταβίβαση πίνακα σε CURLOPT_POSTFIELDSκωδικοποιεί τα δεδομένα ως πολυμερών/μορφών-δεδομένων, ενώ η μετάδοση μιας συμβολοσειράς με κωδικοποίηση URL θα κωδικοποιήσει τα δεδομένα ως application/x-www-form-urlencoded. Το cURL είναι ένα εργαλείο που σας επιτρέπει να αλληλεπιδράτε με διάφορους διακομιστές και υποστηρίζει πολλά πρωτόκολλα: HTTP, FTP, TELNET κ.λπ. Το cURL είναι αρχικά ένα βοηθητικό πρόγραμμα γραμμής εντολών. Αλλά, ευτυχώς για εμάς, η PHP υποστηρίζει την εργασία με τη βιβλιοθήκη cURL. Σε αυτό το άρθρο θα δούμε μη τετριμμένα παραδείγματα εργασίας με το cURL. Στην πραγματικότητα, υπάρχουν πολλοί άλλοι τρόποι για να στείλετε ένα αίτημα σε άλλο διακομιστή, για παράδειγμα, να ανακτήσετε το περιεχόμενο μιας σελίδας. Πολλοί άνθρωποι, κυρίως από τεμπελιά, χρησιμοποιούν απλές συναρτήσεις PHP αντί για cURL: $content = file_get_contents("http://www.example.com"); // ή $lines = file("http://www.example.com"); // ή readfile("http://www.example.com"); Ωστόσο, δεν επιτρέπουν τον αποτελεσματικό χειρισμό σφαλμάτων. Υπάρχει επίσης μια σειρά από εργασίες που δεν μπορούν να κάνουν καθόλου - για παράδειγμα, εργασία με cookies, εξουσιοδότηση, δημοσίευση αιτημάτων, λήψη αρχείων. Το cUrl είναι ένα ισχυρό εργαλείο που υποστηρίζει πολλαπλά πρωτόκολλα και παρέχει πλήρεις πληροφορίες αιτημάτων. Πριν προχωρήσουμε σε πολύπλοκα παραδείγματα, ας δούμε τη βασική δομή ενός αιτήματος cURL στην PHP. Για να εκτελέσετε ένα αίτημα cURL στην PHP, πρέπει να ακολουθήσετε 4 βασικά βήματα: Θα εξετάσουμε κυρίως το βήμα #2 σε αυτό το άρθρο, καθώς εκεί συμβαίνει η μαγεία. Η λίστα των επιλογών cURL είναι πολύ μεγάλη, επομένως δεν θα εξετάσουμε όλες τις επιλογές σήμερα, αλλά θα χρησιμοποιήσουμε αυτές που είναι χρήσιμες για την επίλυση συγκεκριμένων προβλημάτων. Εάν είναι απαραίτητο, μπορείτε να προσθέσετε τις ακόλουθες γραμμές για την παρακολούθηση σφαλμάτων: // ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ... Λάβετε υπόψη ότι χρησιμοποιούμε "===" αντί για "==" επειδή Είναι απαραίτητο να γίνει διάκριση μεταξύ μιας κενής απόκρισης διακομιστή και της τιμής Boole FALSE, η οποία επιστρέφεται σε περίπτωση σφάλματος. Ένα άλλο προαιρετικό βήμα είναι να λάβετε πληροφορίες σχετικά με το αίτημα cURL μετά την εκτέλεσή του. // ... curl_exec($ch); $πληροφορίες = curl_getinfo($ch); ηχώ "Πήρε" . $info["total_time"] . "δευτερόλεπτα για url". $info["url"]; //... Ως αποτέλεσμα, θα λάβετε έναν πίνακα με τις ακόλουθες πληροφορίες: Σε αυτό το παράδειγμα, θα γράψουμε ένα σενάριο που θα ανιχνεύει ανακατευθύνσεις με βάση διαφορετικές ρυθμίσεις του προγράμματος περιήγησης. Για παράδειγμα, ορισμένοι ιστότοποι ανακατευθύνουν επισκέπτες από κινητές συσκευές σε επισκέπτες από άλλες χώρες. Θα χρησιμοποιήσουμε την επιλογή CURLOPT_HTTPHEADER για να ορίσουμε τις δικές μας κεφαλίδες, συμπεριλαμβανομένων των User-Agent και Language, και να δούμε πού μας ανακατευθύνουν οι ιστότοποι. // URLs $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // browsers $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" => πίνακας ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU όπως το Mac OS X, en) AppleWebKit/420+ (KHTML, όπως Gecko) Έκδοση/3.0 Mobile/1A537a Safari/419.3", "language" => "en"), "γαλλικά" => πίνακας ("user_agent" = > "Mozilla/4.0 (συμβατό; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls ως $url) ( echo "URL: $url\n"; foreach ($browsers ως $test_name => $browser) ( $ch = curl_init(); // ορίστε τη διεύθυνση curl_setopt($ch, CURLOPT_URL , $url); // υποδεικνύουν το πρόγραμμα περιήγησης και τη γλώσσα που χρησιμοποιείται curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($browser["language" ]) ")); // δεν χρειαζόμαστε τα περιεχόμενα της σελίδας curl_setopt($ch, CURLOPT_NOBODY, 1); // χρειαζόμαστε μόνο κεφαλίδες curl_setopt($ch, CURLOPT_HEADER, 1); // αντ' αυτού επιστρέψτε το αποτέλεσμα της εξόδου του curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // ορίζει ανακατευθύνσεις στις κεφαλίδες HTTP; if (preg_match("!Τοποθεσία: (.*)!" , $output, $matches)) ( echo "$test_name: ανακατευθύνει σε $matches\n"; ) else (echo "$test_name: χωρίς ανακατεύθυνση\n"; ) ) echo "\n\n"; ) Σε έναν βρόχο ελέγχουμε τα προγράμματα περιήγησης για κάθε URL. Πρώτα ορίζουμε τις επιλογές για το αίτημά μας: URL και πρόγραμμα περιήγησης και γλώσσα προς δοκιμή. Επειδή Έχουμε ορίσει μια ειδική επιλογή· το αποτέλεσμα του αιτήματος θα περιέχει μόνο κεφαλίδες HTTP. Χρησιμοποιώντας μια απλή τυπική έκφραση, μπορούμε να ελέγξουμε αν η απάντηση περιέχει τη συμβολοσειρά "Τοποθεσία:". Αποτέλεσμα εκτέλεσης σεναρίου: URL: http://www.cnn.com standard: ανακατευθύνσεις στο http://edition.cnn.com/ iphone: ανακατευθύνσεις στο http://edition.cnn.com/ Γαλλικά: ανακατευθύνσεις στο http://edition.cnn .com/ URL: http://www.mozilla.com standard: ανακατευθύνσεις σε https://www.mozilla.org/firefox/ iphone: ανακατευθύνσεις σε https://www.mozilla.org/firefox/ γαλλικά: ανακατευθύνσεις σε https://www.mozilla.org/firefox/ URL: http://www.facebook.com standard: ανακατευθύνσεις στο https://www.facebook.com/ iphone: ανακατευθύνσεις στο http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Γαλλικά: χωρίς ανακατεύθυνση Κατά την εκτέλεση αιτημάτων GET, τα δεδομένα μπορούν να μεταβιβαστούν στη συμβολοσειρά ερωτήματος. Για παράδειγμα, όταν κάνετε αναζήτηση στο Google, το ερώτημά σας μεταφράζεται σε μια διεύθυνση URL: http://www.google.com/search?q=google Για να λάβετε το αποτέλεσμα αυτού του ερωτήματος δεν χρειάζεστε καν cURL, μπορείτε να είστε τεμπέλης και να χρησιμοποιήσετε το "file_get_contents()". Αλλά ορισμένες φόρμες HTML χρησιμοποιούν τη μέθοδο POST. Σε αυτήν την περίπτωση, τα δεδομένα αποστέλλονται στο σώμα του μηνύματος αιτήματος και όχι στο ίδιο το URL. Ας γράψουμε ένα σενάριο που θα στέλνει αιτήματα POST. Αρχικά, ας δημιουργήσουμε ένα απλό αρχείο PHP που θα δέχεται αυτά τα αιτήματα και θα επιστρέφει τα δεδομένα που αποστέλλονται σε αυτό. Ας το ονομάσουμε post_output.php : $url = "http://localhost/post_output.php"; $post_data = πίνακας ("foo" => "bar", "query" => "FooBar", "action" => "Υποβολή"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // κάντε ένα αίτημα POST curl_setopt($ch, CURLOPT_POST, 1); // προσθήκη δεδομένων curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Αυτό το σενάριο θα βγει: Πίνακας ( => γραμμή => FooBar => Υποβολή) Αυτό το σενάριο έστειλε ένα αίτημα POST στο αρχείο post_output.php. που εξήγαγε τα περιεχόμενα του πίνακα $_POST και λάβαμε αυτήν την απάντηση χρησιμοποιώντας το cURL. Όπως και στο προηγούμενο παράδειγμα, ας δημιουργήσουμε ένα αρχείο που θα δέχεται αιτήματα, upload_output.php : Print_r($_FILES); Και το ίδιο το σενάριο που κατεβάζει τα αρχεία: $url = "http://localhost/upload_output.php"; $post_data = πίνακας ("foo" => "bar", // αρχείο για μεταφόρτωση "upload" => "@/tmp/desert.jpg"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Εάν θέλετε να ανεβάσετε ένα αρχείο, το μόνο που χρειάζεται να κάνετε είναι να περάσετε τη διαδρομή προς αυτό, ακριβώς όπως μια κανονική παράμετρος αιτήματος POST, με πρόθεμα "@". Το αποτέλεσμα του σεναρίου: Πίνακας ( => Πίνακας ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Ένα από τα προηγμένα χαρακτηριστικά του cURL στην PHP είναι η δυνατότητα εκτέλεσης πολλαπλών αιτημάτων ταυτόχρονα και ασύγχρονα. Υπό κανονικές συνθήκες, το σενάριο σταματά και περιμένει να ολοκληρωθεί το αίτημα. Και αν χρειαστεί να εκτελέσετε πολλά ερωτήματα, μπορεί να χρειαστεί πολύς χρόνος, γιατί... θα εκτελέσετε διαδοχικά. Αυτός ο περιορισμός μπορεί να παρακαμφθεί: // δημιουργία χειριστών $ch1 = curl_init(); $ch2 = curl_init(); // ορίστε επιλογές 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); //δημιουργία της πολλαπλής λαβής cURL $mh = curl_multi_init(); // προσθήκη χειριστών curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // εκτελέστε τα αιτήματα do ( curl_multi_exec($mh, $running); ) while ($running > 0); // ελευθερώστε πόρους curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Η ιδέα είναι ότι μπορείτε να δημιουργήσετε πολλαπλές λαβές cURL, να τις συνδυάσετε κάτω από μια πολλαπλή λαβή και να τις εκτελέσετε ασύγχρονα. Πρώτον, όλα είναι ίδια όπως με ένα κανονικό αίτημα cURL - δημιουργείται ένας περιγραφέας ( curl_init()
), ορίζονται οι παράμετροι ( curl_setopt()
). Στη συνέχεια, δημιουργείται ένας πολλαπλός περιγραφέας ( curl_multi_init()
) και προστίθενται οι κανονικοί περιγραφείς που δημιουργήθηκαν προηγουμένως ( curl_multi_add_handle()
). Αντί να καλέσουμε κανονικά τη curl_exec(), θα καλέσουμε curl_multi_exec()
αυτή η συνάρτηση μας ενημερώνει για τον αριθμό των ενεργών συνδέσεων χρησιμοποιώντας τη δεύτερη παράμετρο - $running. Επομένως, ο βρόχος τρέχει έως ότου το $running γίνει ίσο με 0. Και, φυσικά, μετά την ολοκλήρωση της εργασίας, είναι απαραίτητο να απελευθερωθούν πόροι. Σε αυτό το παράδειγμα, απλώς εξάγουμε το αποτέλεσμα των ερωτημάτων στο STDOUT. Ας εξετάσουμε μια μη τετριμμένη περίπτωση χρήσης multi cURL. Φανταστείτε ένα blog με πολλές αναρτήσεις που περιέχουν συνδέσμους προς εξωτερικούς ιστότοπους. Ορισμένοι από αυτούς τους συνδέσμους ενδέχεται να μην λειτουργούν. Ας γράψουμε ένα σενάριο που θα βρίσκει όλους τους κατεστραμμένους συνδέσμους και θα μας τους δείχνει. Αρχικά, πρέπει να τραβήξουμε όλους τους εξωτερικούς συνδέσμους από τη βάση δεδομένων: // 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; // συνδεθείτε στο MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Δεν ήταν δυνατή η σύνδεση: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Could να μην επιλέξετε db: " . mysql_error()); ) // λάβετε όλες τις αναρτήσεις με συνδέσμους στο κείμενο $q = "SELECT post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post " "; $r = mysql_query($q) ή die(mysql_error()); ενώ ($d = mysql_fetch_assoc($r)) ( // συλλέγει όλους τους συνδέσμους χρησιμοποιώντας κανονική έκφραση if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $match )) ( foreach ($ταιριάζει ως $url) ( // φιλτράρετε τους περιττούς τομείς $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) ( συνέχεια; ) // βάλτε μαζί $url_list = $url; ) ) ) // αφαίρεση επαναλήψεων $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Δεν υπάρχει URL για έλεγχο"); ) Σε αυτό το μέρος του σεναρίου, απλώς βγάζουμε όλους τους εξωτερικούς συνδέσμους από τη βάση δεδομένων. Ας τα ελέγξουμε: $mh = curl_multi_init(); // 1. προσθέστε συνδέσμους για ($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 "==Νεκρές διευθύνσεις URL==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Διευθύνσεις URL εργασίας==\n"; echo implode("\n", $working_urls); ηχώ "\n\n"; // 9. προσθέτει μια λαβή με τη δεδομένη συνάρτηση URL add_url_to_multi_handle($mh, $url_list) ( στατικό $index = 0; // εάν υπάρχουν ακόμα σύνδεσμοι if (isset($url_list[$index])) ( // Everything είναι ως συνήθως $ ch = curl_init(); // ορίστε επιλογές curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // επιστρέφει αντί να εμφανίζει το αποτέλεσμα curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // επιτρέπω ανακατευθύνει curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // λάβετε μόνο κεφαλίδες για εξοικονόμηση χρόνου curl_setopt($ch, CURLOPT_NOBODY, 1); // προσθήκη στο multi-handle curl_multi_add_handle($mh, $ch); $index++; ) Ας δούμε τον κωδικό πιο αναλυτικά (η αρίθμηση αντιστοιχεί στα σχόλια στον κώδικα): Ας τρέξουμε το σενάριο: Νεκρές διευθύνσεις URL== xample1234.com/ ==404 διευθύνσεις URL== www.google.com/dsfasdfafd ==Διευθύνσεις URL εργασίας== ru.php.net/manual/ru/function.time.php www.cssbuttongenerator.com/ csslint. net/ codex.wordpress.org/Plugin_API/Action_Reference fortawesome.github.io/Font-Awesome/ fortawesome.github.io/Font-Awesome/ www.oracle.com/technetwork/java/javafx/downloads/index.html κώδικας. 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 Ο έλεγχος κράτησε περίπου 2 δευτερόλεπτα. Εκτελώντας 10 νήματα ταυτόχρονα, η απόδοση αυξάνεται 10 φορές σε σύγκριση με τα κανονικά αιτήματα cURL. Για να λάβετε τα περιεχόμενα της απόκρισης του διακομιστή, χρησιμοποιήστε τη συνάρτηση curl_multi_getcontent($ch)
, όπου το $ch είναι ένας περιγραφέας που λαμβάνεται από curl_multi_info_read()
. Εάν το αίτημα HTTP απαιτεί έλεγχο ταυτότητας, χρησιμοποιήστε τον ακόλουθο κώδικα: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // αποστολή ονόματος χρήστη και κωδικού πρόσβασης curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // εάν επιτρέπονται οι ανακατευθύνσεις curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Το cURL θα στείλει τον κωδικό πρόσβασης μετά τις ανακατευθύνσεις curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); Η PHP έχει τη δική της βιβλιοθήκη για εργασία με FTP, αλλά μπορείτε επίσης να χρησιμοποιήσετε το cURL: // διαβάστε το αρχείο $file = fopen("/path/to/file", "r"); // url περιέχει ήδη τα απαραίτητα δεδομένα $url = "ftp://username: [email προστατευμένο]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // επιλογές curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, μέγεθος αρχείου("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch); Τα αιτήματα μπορούν να υποβληθούν μέσω ενός συγκεκριμένου πληρεξούσιου: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // διεύθυνση διακομιστή μεσολάβησης curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // εάν απαιτείται εξουσιοδότηση curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch); Είναι δυνατή η χρήση επανάκλησης ενώ το αίτημα εκτελείται, χωρίς να περιμένετε να ολοκληρωθεί. Για παράδειγμα, ενώ γίνεται λήψη της απόκρισης διακομιστή, μπορούμε να χρησιμοποιήσουμε τα δεδομένα που έχουμε ήδη λάβει χωρίς να περιμένουμε την πλήρη λήψη. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec($ch); curl_close($ch); συνάρτηση progress_function($ch,$str) (echo $str; return strlen($str); ) Η συνάρτηση επανάκλησης πρέπει να επιστρέψει το μήκος της συμβολοσειράς για να λειτουργήσει σωστά το αίτημα. Κάθε φορά που λαμβάνεται το επόμενο μέρος της απάντησης διακομιστή, θα καλείται μια επανάκληση. Σε αυτό το άρθρο, εξετάσαμε τις προηγμένες δυνατότητες του cURL στην PHP. Την επόμενη φορά που θα χρειαστεί να κάνετε αιτήματα URL, χρησιμοποιήστε το cURL. Συχνά πρέπει να κατεβάσουμε διάφορα αρχεία από το Διαδίκτυο, για παράδειγμα, εκτελέσιμα αρχεία προγράμματος, αρχεία σεναρίων, αρχειοθήκες προέλευσης. Αλλά αυτό δεν χρειάζεται πάντα να γίνεται μέσω του προγράμματος περιήγησης. Σε πολλές περιπτώσεις είναι πολύ πιο εύκολο να εκτελέσετε όλες τις ενέργειες μέσω του τερματικού. Γιατί με αυτόν τον τρόπο μπορείτε να αυτοματοποιήσετε τη διαδικασία. Από την άλλη πλευρά, οι webmasters πρέπει από καιρό σε καιρό να ελέγχουν την προσβασιμότητα του ιστότοπου, να ελέγχουν τις κεφαλίδες που έχουν αποσταλεί και ληφθεί και πολλά άλλα. Για να επιλύσετε τέτοια προβλήματα και προβλήματα παρόμοιου εύρους, μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα curl. Σας επιτρέπει να λύσετε ένα πολύ ευρύτερο φάσμα προβλημάτων, συμπεριλαμβανομένης ακόμη και της προσομοίωσης ενεργειών χρήστη στον ιστότοπο. Σε αυτό το άρθρο θα δούμε πώς να χρησιμοποιήσετε το curl, τι είναι και γιατί χρειάζεται αυτό το πρόγραμμα. Στην πραγματικότητα, το curl είναι κάτι περισσότερο από ένα απλό βοηθητικό πρόγραμμα γραμμής εντολών για Linux ή Windows. Αυτό είναι ένα σύνολο βιβλιοθηκών που υλοποιούν τις βασικές δυνατότητες εργασίας με σελίδες URL και μεταφοράς αρχείων. Η βιβλιοθήκη υποστηρίζει εργασία με πρωτόκολλα: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, καθώς και POP3, IMAP και SMTP. Είναι εξαιρετικό για την προσομοίωση ενεργειών χρήστη σε σελίδες και άλλες λειτουργίες με διευθύνσεις URL. Η υποστήριξη για τη βιβλιοθήκη curl έχει προστεθεί σε πολλές διαφορετικές γλώσσες προγραμματισμού και πλατφόρμες. Το βοηθητικό πρόγραμμα curl είναι ένα ανεξάρτητο περιτύλιγμα για αυτήν τη βιβλιοθήκη. Σε αυτό το βοηθητικό πρόγραμμα θα επικεντρωθούμε σε αυτό το άρθρο. Πριν προχωρήσουμε σε μια περιγραφή του τρόπου χρήσης της εντολής curl linux, ας δούμε το ίδιο το βοηθητικό πρόγραμμα και τις κύριες επιλογές του που θα χρειαστούμε. Η σύνταξη του βοηθητικού προγράμματος είναι πολύ απλή: Σύνδεσμος επιλογών για μπούκλες $ Τώρα ας δούμε τις κύριες επιλογές: Αυτό δεν είναι σε καμία περίπτωση όλες οι επιλογές για το curl linux, αλλά παραθέτει τα βασικά που θα χρειαστεί να χρησιμοποιήσετε. Καλύψαμε τα πάντα σχετικά με τη θεωρία της εργασίας με το βοηθητικό πρόγραμμα curl, τώρα ήρθε η ώρα να προχωρήσουμε στην πρακτική και να δούμε παραδείγματα της εντολής curl. Η πιο συνηθισμένη εργασία είναι αυτή. Η λήψη του αρχείου είναι πολύ απλή. Για να το κάνετε αυτό, απλώς περάστε το όνομα αρχείου ή τη σελίδα html στο βοηθητικό πρόγραμμα στις παραμέτρους: μπούκλα https://raw.githubusercontent.com/curl/curl/master/README.md Αλλά εδώ σας περιμένει μια έκπληξη: ολόκληρο το περιεχόμενο του αρχείου θα σταλεί στην τυπική έξοδο. Για να το γράψετε σε οποιοδήποτε αρχείο χρησιμοποιήστε: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md Και αν θέλετε το αρχείο που προκύπτει να έχει το ίδιο όνομα με το αρχείο στον διακομιστή, χρησιμοποιήστε την επιλογή -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 Εάν είναι απαραίτητο, μπορείτε να κάνετε λήψη πολλών αρχείων με μία εντολή: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Ένα άλλο πράγμα που μπορεί να είναι χρήσιμο για έναν διαχειριστή είναι η λήψη ενός αρχείου μόνο εάν έχει τροποποιηθεί: curl -z 21-Δεκ-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Μπορείτε να περιορίσετε την ταχύτητα λήψης στο απαιτούμενο όριο, ώστε να μην υπερφορτώνετε το δίκτυο χρησιμοποιώντας την επιλογή -Y: curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Εδώ πρέπει να καθορίσετε τον αριθμό των kilobyte ανά δευτερόλεπτο που μπορούν να ληφθούν. Μπορείτε επίσης να τερματίσετε τη σύνδεση εάν η ταχύτητα δεν είναι αρκετή, χρησιμοποιήστε την επιλογή -Y για να το κάνετε αυτό: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ Ή ας ελέγξουμε ότι το αρχείο αποστέλλεται μέσω HTTP· υπάρχει μια ειδική υπηρεσία για αυτό: curl -T ~/login.txt http://posttestserver.com/post.php Στην απάντηση, το βοηθητικό πρόγραμμα θα σας πει πού μπορείτε να βρείτε το ληφθέν αρχείο. Μπορείτε να στείλετε όχι μόνο αρχεία, αλλά και οποιαδήποτε δεδομένα χρησιμοποιώντας τη μέθοδο POST. Επιτρέψτε μου να σας υπενθυμίσω ότι αυτή η μέθοδος χρησιμοποιείται για την αποστολή δεδομένων διαφόρων μορφών. Για να στείλετε ένα τέτοιο αίτημα, χρησιμοποιήστε την επιλογή -d. Για τη δοκιμή θα χρησιμοποιήσουμε την ίδια υπηρεσία: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Εάν δεν είστε ικανοποιημένοι με αυτήν την επιλογή υποβολής, μπορείτε να προσποιηθείτε ότι υποβάλατε τη φόρμα. Υπάρχει μια επιλογή για αυτό -F: curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php Εδώ περνάμε το πεδίο κωδικού πρόσβασης με τη φόρμα ως απλό κείμενο, με τον ίδιο τρόπο μπορείτε να περάσετε πολλές παραμέτρους. Τα cookies χρησιμοποιούνται από ιστότοπους για την αποθήκευση ορισμένων πληροφοριών από την πλευρά του χρήστη. Αυτό μπορεί να είναι απαραίτητο, για παράδειγμα, για έλεγχο ταυτότητας. Μπορείτε να στείλετε και να λάβετε Cookies χρησιμοποιώντας το curl. Για να αποθηκεύσετε τα Cookies που λάβατε σε ένα αρχείο, χρησιμοποιήστε την επιλογή -c: curl -c cookie.txt http://posttestserver.com/post.php Στη συνέχεια, μπορείτε να στείλετε πίσω το cookie curl: curl -b cookie.txt http://posttestserver.com/post.php Δεν χρειαζόμαστε πάντα απαραίτητα το περιεχόμενο της σελίδας. Μερικές φορές μόνο οι τίτλοι μπορεί να είναι ενδιαφέροντες. Για να εμφανιστούν μόνο αυτά υπάρχει η επιλογή -I: μπούκλα -I https://site Και η επιλογή -H σάς επιτρέπει να στείλετε πολλά ή περισσότερα στον διακομιστή, για παράδειγμα, μπορείτε να περάσετε την κεφαλίδα If-Modified-Since έτσι ώστε η σελίδα να επιστραφεί μόνο εάν έχει τροποποιηθεί: Εάν ο διακομιστής απαιτεί έναν από τους συνήθεις τύπους ελέγχου ταυτότητας, όπως HTTP Basic ή FTP, τότε το curl μπορεί να χειριστεί αυτή την εργασία πολύ εύκολα. Για να καθορίσετε λεπτομέρειες ελέγχου ταυτότητας, απλώς καθορίστε τις διαχωρισμένες με άνω και κάτω τελεία στην επιλογή -u: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt Ο έλεγχος ταυτότητας σε διακομιστές HTTP θα εκτελείται με τον ίδιο τρόπο. Εάν χρειάζεται να χρησιμοποιήσετε έναν διακομιστή μεσολάβησης για τη λήψη αρχείων, τότε αυτό είναι επίσης πολύ απλό. Αρκεί να καθορίσετε τη διεύθυνση διακομιστή μεσολάβησης στην επιλογή -x: curl -x proxysever.test.com:3128 http://google.co.in Σε αυτό το άρθρο, εξετάσαμε πώς να χρησιμοποιήσετε το curl, γιατί χρειάζεται αυτό το βοηθητικό πρόγραμμα και τις κύριες δυνατότητές του. Παρά την ομοιότητά τους, είναι πολύ διαφορετικά. Η εντολή curl linux έχει σχεδιαστεί περισσότερο για την ανάλυση και την προσομοίωση διαφόρων ενεργειών στον διακομιστή, ενώ το wget είναι πιο κατάλληλο για λήψη αρχείων και ανίχνευση τοποθεσιών. Αυτό το άρθρο θα μιλήσει για ένα τόσο ισχυρό εργαλείο όπως το cURL, καθώς και για τη βιβλιοθήκη για την PHP που παρέχει πρόσβαση σε αυτό το εργαλείο - libcurl. Προς τι όλα αυτά; Για να επικοινωνήσετε με το διακομιστή χρησιμοποιώντας πρωτόκολλα μεταφοράς δεδομένων, για παράδειγμα, http ή ftp. Τα υπόλοιπα πρωτόκολλα δεν μας ενδιαφέρουν ιδιαίτερα· αν κάποιος θέλει να εμβαθύνει σε αυτό το θέμα, θα πρέπει να βρει αγγλόφωνους πόρους και αυτό το άρθρο θα περιέχει τα βασικά και παραδείγματα χρήσης. Έτσι, η βιβλιοθήκη libcurl μας παρέχει τη δυνατότητα να μεταδίδουμε δεδομένα στον διακομιστή και να λαμβάνουμε απαντήσεις από αυτόν. Τι μας δίνει αυτό; Η δυνατότητα μίμησης της συμπεριφοράς των χρηστών ή ! Μπορείτε να λαμβάνετε τα περιεχόμενα των σελίδων για επακόλουθη ανάλυση, μπορείτε να λαμβάνετε κεφαλίδες απόκρισης υπηρεσιών και να συνδεθείτε μέσω προγραμματισμού σε ιστότοπους, να δημιουργήσετε σενάρια για δημοσίευση μηνυμάτων (για παράδειγμα, στο Twitter ή σε φόρουμ) ή πληροφορίες. Όλα περιορίζονται μόνο από τη φαντασία σας! Το πρώτο πράγμα που πρέπει να κάνουμε είναι να εγκαταστήσουμε τη βιβλιοθήκη. Στον τοπικό μου υπολογιστή χρησιμοποιώ την έκδοση Denwer, όπως η συντριπτική πλειοψηφία των αρχαρίων webmasters, για τους οποίους προορίζεται το άρθρο. Οι έμπειροι χρήστες που εγκαθιστούν ανεξάρτητα τον συνδυασμό php+apache+mysql θα μπορούν να εγκαταστήσουν το cURL, δεν εναπόκειται σε εμένα να τους εξηγήσω πώς γίνεται αυτό;) Και εμείς, οι αρχάριοι, χρησιμοποιούμε έτοιμες λύσεις για να το κάνουμε πιο εύκολο. Επομένως, εγκαταστήστε το libcurl ως εξής: και αφαιρέστε το ερωτηματικό στην αρχή των όρων: ;extension=php_curl.dll Ετοιμος. Για να ελέγξετε τη λειτουργικότητα της βιβλιοθήκης, μπορείτε να καλέσετε τη συνάρτηση phpinfo() και να βρείτε τη γραμμή εκεί: η υποστήριξη cURL ενεργοποιημένη. Συγχαρητήρια για την πρώτη σου νίκη. Για να ξεκινήσετε να εργάζεστε με το εργαλείο, πρέπει να αρχικοποιηθεί. Αυτό γίνεται ως εξής: $ch = curl_init(); Χρησιμοποιήσαμε τη συνάρτηση προετοιμασίας συνεδρίας cURL. Σε αυτήν την περίπτωση, μπορείτε να ορίσετε τη διεύθυνση URL αμέσως, ως εξής: $ch = curl_init("https://site"); Και μπορείτε να το κάνετε αργότερα, στις επιλογές. Η σειρά με την οποία εγκαθίστανται οι επιλογές δεν έχει σημασία. Αυτό γίνεται με μια άλλη λειτουργία: Curl_setopt (κ πόρων, επιλογή συμβολοσειράς, μικτή τιμή) Έχουμε ήδη δημιουργήσει την πρώτη παράμετρο αυτής της συνάρτησης, δηλαδή τον πόρο ch, ακριβώς από πάνω, αλλά υπάρχουν πολλές παραμέτρους επιλογής και τιμής. Νομίζω ότι δεν πρέπει να τα κάνετε copy-paste όλα εδώ, αλλά απλώς δώστε έναν σύνδεσμο για μια λεπτομερή περιγραφή της λειτουργίας, ελπίζω να μην προσβληθεί κανείς: curl_setopt. Θα δώσω ένα παράδειγμα ρύθμισης επιλογών χρησιμοποιώντας μια διεύθυνση URL ως παράδειγμα: $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); Μερικά ακόμη παραδείγματα επιλογών ρύθμισης: ας λάβουμε την κεφαλίδα απόκρισης διακομιστή, χωρίς να λάβουμε την ίδια τη σελίδα: Curl_setopt($ch, CURLOPT_HEADER, 1); // διαβάστε την κεφαλίδα curl_setopt($ch, CURLOPT_NOBODY, 1); // διαβάστε ΜΟΝΟ την κεφαλίδα χωρίς το σώμα Έτσι, αρχικοποιήσαμε τη συνεδρία, ορίσαμε τις παραμέτρους που χρειαζόμαστε, τώρα εκτελούμε το αίτημα που προκύπτει, κλείνουμε τη συνεδρία και εμφανίζουμε το αποτέλεσμα: $result = curl_exec($ch); curl_close($ch); echo $result; Ως αποτέλεσμα, λαμβάνουμε το πρώτο μας πλήρως λειτουργικό παράδειγμα χρήσης της βιβλιοθήκης libcurl: $ch = curl_init(); $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // διαβάστε την κεφαλίδα curl_setopt($ch, CURLOPT_NOBODY, 1); // διαβάστε ΜΟΝΟ την κεφαλίδα χωρίς το σώμα $result = curl_exec($ch); curl_close($ch); echo $result; Το πώς λειτουργεί, ελπίζω, είναι σαφές, γιατί εξετάσαμε κάθε βήμα ξεχωριστά :) Ως αποτέλεσμα, λαμβάνουμε μια κεφαλίδα απόκρισης HTTP από τον διακομιστή, την οποία σίγουρα θα αναλύσουμε παρακάτω για να κατανοήσουμε καλύτερα όλα τα στάδια αλληλεπίδρασης μεταξύ το πρόγραμμα περιήγησης και ο διακομιστής: HTTP/1.1 200 OK Διακομιστής: nginx/1.2..php 1 Υπέροχο! Λάβαμε την κεφαλίδα απόκρισης από τον διακομιστή και δοκιμάσαμε τη βιβλιοθήκη σε δράση. Πόσο χρήσιμο είναι αυτό για εμάς; Επειδή τώρα μπορείτε να φανταστείτε κατά προσέγγιση την ακολουθία των ενεργειών όταν εργάζεστε με το cURL: Για παράδειγμα, γύρισα στη σελίδα ya.ru και εξέτασα το αίτημα του προγράμματος περιήγησης που δημιουργήθηκε και την απάντηση που ελήφθη από τον διακομιστή. Εδώ είναι: Πιστεύω ότι αφού κάποια γενικά σημεία είναι ήδη ξεκάθαρα και όλα φαίνονται ξεκάθαρα, τότε ήρθε η ώρα να προχωρήσετε στην εξάσκηση και να βελτιώσετε τις δεξιότητές σας χρησιμοποιώντας το παράδειγμα. Προσωπικά, τα χέρια μου πάντα με φαγούρα για να δοκιμάσω τα πάντα στην πράξη :) Δεδομένου ότι το cURL είναι τόσο καλό για τους αναλυτές, ας εξετάσουμε τη λειτουργία λήψης του κώδικα σελίδας από τη διεύθυνσή του. Σε αυτήν την περίπτωση, η έξοδος θα είναι ένας πίνακας με τον τίτλο, το περιεχόμενο της σελίδας, ακόμη και τους κωδικούς σφάλματος, εάν κάτι πάει στραβά. Συνάρτηση get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Έκδοση/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETRANS); // επιστρέφει την ιστοσελίδα curl_setopt($ch, CURLOPT_HEADER, 0); // δεν επιστρέφει κεφαλίδες curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // ακολουθεί τις ανακατευθύνσεις curl_setopt($ch, CURLOPT_ENCODING, ""); // διεργασίες όλες οι κωδικοποιήσεις curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // timeout σύνδεσης curl_setopt($ch, CURLOPT_TIMEOUT, 120); //setopt_TIMEOUT, 120); , 10); // διακοπή μετά την 10η ανακατεύθυνση $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; επιστροφή $header; ) Παράμετροι εισαγωγής: Χρησιμοποιούμε τη συνάρτηση, για παράδειγμα, ως εξής: $result = get_web_page ("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) (echo $result["errmsg"]; ) else ($page = $result["content "]; echo $page;) Όλα θα πρέπει να πάνε χωρίς σφάλματα και θα λάβετε τον κώδικα σελίδας στη μεταβλητή $page. Αν προσπαθήσουμε να λάβουμε την ανύπαρκτη σελίδα yaaaaaaaaaaaa.ru, θα λάβουμε το σφάλμα: Δεν ήταν δυνατή η επίλυση του κεντρικού υπολογιστή: yaaaaaaaaaaaa.ru; Ο κεντρικός υπολογιστής δεν βρέθηκε Όλα επεξεργάζονται σωστά και όμορφα :) Η JavaScript είναι αποκλεισμένη στο πρόγραμμα περιήγησής σας. Ενεργοποιήστε την JavaScript για να λειτουργήσει ο ιστότοπος! Η PHP υποστηρίζει το libcurl, μια βιβλιοθήκη που δημιουργήθηκε από τον Daniel Stenberg και σας επιτρέπει να συνδεθείτε με διαφορετικούς τύπους διακομιστών και πρωτοκόλλων. Αυτές οι λειτουργίες εισήχθησαν στην PHP 4.0.2. curl_init - αρχικοποιεί μια περίοδο λειτουργίας CURL. πόρος curl_init() Λειτουργία curl_init()αρχικοποιεί μια νέα περίοδο λειτουργίας και επιστρέφει μια λαβή CURL για χρήση στις συναρτήσεις και. Εάν η προαιρετική παράμετρος urlπαρέχεται, τότε η επιλογή CURLOPT_URL θα λάβει την τιμή αυτής της παραμέτρου. Μπορείτε να το εγκαταστήσετε χειροκίνητα χρησιμοποιώντας το . curl_setopt - ορίζει επιλογές για μεταφορά/μεταφορά CURL. bool curl_setopt(πόρων ch, επιλογή συμβολοσειράς, μικτή τιμή) Λειτουργία curl_setopt()ορίζει επιλογές για την περίοδο λειτουργίας CURL που προσδιορίζεται από την παράμετρο κεφ. Παράμετρος επιλογήείναι η επιλογή που θέλετε να ορίσετε και αξίααυτή είναι η τιμή της επιλογής επιλογή . Παράμετρος αξίαπρέπει να είναι μεγάλη για τις ακόλουθες επιλογές (καθορίζονται ανά παράμετρο επιλογή): Παράμετρος αξίαπρέπει να είναι μια συμβολοσειρά για τις ακόλουθες τιμές παραμέτρων επιλογή : Οι ακόλουθες επιλογές αναμένουν έναν περιγραφέα αρχείου, ο οποίος λαμβάνεται χρησιμοποιώντας τη συνάρτηση fopen() : Παράμετρος αξία long write_callback (πόρων ch, δεδομένα συμβολοσειράς)( ... return strlen($data);) επιλογή : Παράμετρος αξίαπρέπει να είναι συνάρτηση της παρακάτω φόρμας string read_callback (πόρος ch, πόρος fd, μεγάλο μήκος)()για τις ακόλουθες τιμές παραμέτρων επιλογή : curl_exec - εκτελεί μια περίοδο λειτουργίας CURL. bool curl_exec(πόρων ch) Αυτή η συνάρτηση θα πρέπει να κληθεί αφού αρχικοποιήσετε μια περίοδο λειτουργίας CURL και όλες οι επιλογές για αυτήν τη συνεδρία έχουν ήδη οριστεί. Ο σκοπός του είναι απλώς να εκτελέσει μια προκαθορισμένη περίοδο λειτουργίας CURL (καθορίζεται στην παράμετρο κεφ). curl_close - κλείνει την περίοδο λειτουργίας CURL. κενός curl_close(πόρων ch) Αυτή η συνάρτηση κλείνει την περίοδο λειτουργίας CURL και απελευθερώνει όλους τους πόρους. CURL λαβή κεφδιαγράφεται επίσης. curl_errno - επιστρέφει έναν ακέραιο που περιέχει τον τελευταίο αριθμό σφάλματος. Εάν χρειαστεί να στείλετε έναν πολυδιάστατο πίνακα και ένα αρχείο σε ένα αίτημα POST, θα αντιμετωπίσετε ένα άλυτο πρόβλημα. Εάν περάσετε έναν πολυδιάστατο πίνακα στο CURLOPT_POSTFIELDS, το δεύτερο επίπεδο θα περάσει ως συμβολοσειρά "Πίνακας". Εάν κάνετε μετατροπή χρησιμοποιώντας το http_build_query, δεν θα μπορείτε να μεταφέρετε το αρχείο. Παρακάτω είναι μια συνάρτηση για την κωδικοποίηση ενός δισδιάστατου πίνακα με φόρτωση αρχείων για το Curl, ο οποίος θα λειτουργεί και στις δύο παλαιότερες εκδόσεις των PHP 5.3, PHP 5.4 και PHP 5.6 /** μετατρέπει έναν πολυδιάστατο πίνακα σε έναν μονοδιάστατο πίνακα χρησιμοποιώντας σύνθετους δείκτες και αντικαθιστά το @ στο πρόθεμα με CurlFile για χρήση στο Curl * @param $inputArray * @param string $inputKey * @return πίνακας $requestVars = πίνακας ("id" => πίνακας( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); παίρνουμε: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ function convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray ως $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 ] = $value; ) ) return $resultArray; ) // έλεγχος $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); Παραδείγματα εφαρμογών χρήσης Curl
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
?>
Σημειώσεις
Γιατί cURL;
Βασικά στοιχεία cUrl
// 1. αρχικοποίηση $ch = curl_init(); // 2. ορίστε επιλογές, συμπεριλαμβανομένης της διεύθυνσης URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. εκτέλεση της αίτησης και λήψη της απάντησης $output = curl_exec($ch); // 4. καθαρισμός πόρων curl_close($ch); Παρακολούθηση σφαλμάτων
Λήψη πληροφοριών σχετικά με ένα αίτημα
Ανακατεύθυνση παρακολούθησης, ανάλογα με το πρόγραμμα περιήγησης
Αποστολή αιτημάτων POST
Μεταφόρτωση αρχείων
Multi cURL
Έλεγχος εξωτερικών συνδέσμων στο WordPress
Άλλες δυνατότητες cURL στην PHP
Έλεγχος ταυτότητας HTTP
Μεταφόρτωση μέσω FTP
Χρήση διακομιστή μεσολάβησης
Λειτουργίες επανάκλησης
συμπέρασμα
εντολή μπούκλας
Πώς να χρησιμοποιήσετε το curl;
Όριο ταχύτητας
Μεταφορά αρχείων
Αποστολή δεδομένων POST
Αποστολή και λήψη cookies
Μετάδοση και ανάλυση κεφαλίδας
έλεγχος ταυτότητας μπούκλας
Χρήση διακομιστή μεσολάβησης
συμπεράσματα
Τι ακριβώς είναι το cURL και το libcurl; Γενικά σημεία
Εγκατάσταση του cURL στο Denwer (Denver). Πώς να ξεκινήσετε να χρησιμοποιείτε το libcurl;
Περιγραφή του cURL και τα πρώτα βήματα
Δομή κεφαλίδας αιτήματος HTTP
Αίτηση
GET / HTTP/1.1 - Προσπαθούμε να πάρουμε τη σελίδα στο /, δηλαδή στην κύρια σελίδα που βρίσκεται στη ρίζα του φακέλου. Χρησιμοποιούμε την έκδοση πρωτοκόλλου 1.1.
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Έκδοση/12.14— Συστηνόμαστε στον διακομιστή, είμαστε το πρόγραμμα περιήγησης Opera.
Κεντρικός υπολογιστής: ya.ru — Όνομα τομέα του ζητούμενου πόρου.
Αποδοχή: text/html, application/xml;q=0,9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1— Κατάλογος αποδεκτών μορφών πόρων.
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8— Λίστα υποστηριζόμενων γλωσσών.
Αποδοχή-Κωδικοποίηση: gzip, deflate— Υποστηριζόμενες μέθοδοι κωδικοποίησης.
Cookie: yandexuid=ХХХХХ - Cookies, εάν είναι απαραίτητο.
Σύνδεση: Keep-Alive - Μην διακόψετε τη σύνδεση και μείνετε σε επαφή.
Απάντηση
HTTP/1.1 200 Ok - Λαμβάνουμε μια απάντηση με κωδικό 200, που σημαίνει ότι όλα είναι εντάξει.
Διακομιστής: nginx - Ο διακομιστής παρουσιάστηκε - αυτός είναι ο nginx.
Ημερομηνία: Κυριακή, 10 Μαρτίου 2013 14:10:50 GMT— Τρέχουσα ημερομηνία και ώρα στον διακομιστή.
Τύπος περιεχομένου: text/html; σύνολο χαρακτήρων=UTF-8— Τύπος περιεχομένου και κωδικοποίηση.
Σύνδεση: κλείσιμο - Ο διακομιστής δεν θέλει να διατηρήσει μόνιμη σύνδεση μαζί μας, επομένως τον κλείνει αμέσως. Μια νέα σύνδεση θα δημιουργηθεί για το επόμενο αίτημα.
Cache-Control: no-cache,no-store,max-age=0,must-revalidate— Διαχείριση κρυφής μνήμης. Σε αυτή την περίπτωση είναι απενεργοποιημένο.
Λήξη: Κυριακή, 10 Μαρτίου 2013 14:10:50 GMT— Ημερομηνία αναμενόμενης λήξης της συνεδρίας. Στην περίπτωσή μας συμπίπτει με τον χρόνο ανοίγματος, αφού ο διακομιστής το έκλεισε αμέσως, αμέσως μετά την επεξεργασία.
Τελευταία Τροποποίηση: Κυρ, 10 Μαρτίου 2013 14:10:50 GMT— Ώρα τελευταίας τροποποίησης.
Content-Encoding: gzip - Μέθοδος κωδικοποίησης πληροφοριών.
Μια πλήρης λίστα με όλες τις παραμέτρους που μπορούν να βρεθούν στην κεφαλίδα αιτήματος HTTP μπορεί να βρεθεί στη Wikipedia.
Τώρα έχετε μια πρόχειρη ιδέα για το πώς το πρόγραμμα περιήγησής σας και ο διακομιστής Ιστού επικοινωνούν μεταξύ τους. Αυτό είναι πολύ χρήσιμο να το γνωρίζουμε και να το κατανοήσουμε, γιατί θα προσπαθήσουμε να μιμηθούν τις ενέργειες του προγράμματος περιήγησης χρησιμοποιώντας τη βιβλιοθήκη libcurl. Προχώρα.Παράδειγμα εργασίας με τη βιβλιοθήκη
url — διεύθυνση σελίδας ή ιστότοπου.
Τιμές παραμέτρων εξόδου (πίνακας με τρία στοιχεία):
header['errno'] - εάν κάτι πήγε στραβά, θα υπάρχει κωδικός σφάλματος εδώ.
header['errmsg'] – το κείμενο σφάλματος θα εμφανιστεί εδώ.
header['content'] - η πραγματική σελίδα\αρχείο\εικόνα, κ.λπ.
Στη συνέχεια, μπορείτε να κάνετε ό,τι θέλετε με τον κώδικα της σελίδας, για παράδειγμα, να τον αναλύσετε με κανονικές εκφράσεις. Αλλά αυτά είναι όλα στα επόμενα μαθήματα, αλλά προς το παρόν ας σταθούμε σε αυτό.Μπούκλα
Το libcurl υποστηρίζει επί του παρόντος πρωτόκολλα http, https, ftp, gopher, telnet, dict, αρχείου και ldap.
Το libcurl υποστηρίζει επίσης πιστοποιητικά HTTPS, HTTP POST, HTTP PUT, μεταφόρτωση FTP (αυτό μπορεί επίσης να γίνει με την επέκταση PHP ftp), μεταφόρτωση βάσει φόρμας HTTP, διακομιστή μεσολάβησης, cookie και έλεγχο ταυτότητας χρήστη+κωδικού πρόσβασης.curl_init
Περιγραφή
curl_setopt
Περιγραφή
curl_exec
Περιγραφή
curl_close
Περιγραφή
curl_errno
Περιγραφή
Παράδειγμα 1: Εκκίνηση μιας νέας περιόδου λειτουργίας CURL και ανάκτηση μιας ιστοσελίδας.
Παράδειγμα 2: Χρήση της λειτουργικής μονάδας CURL της PHP για λήψη του example.com
Παράδειγμα 3: Έλεγχος προσβασιμότητας URL με χρήση του CURL της PHP
Παράδειγμα 4: Διαχωρισμός της κεφαλίδας από το σώμα που λήφθηκε χρησιμοποιώντας το CURL της PHP
Παράδειγμα 5: Προσδιορισμός διεύθυνσης URL παραπομπής με χρήση του CURL της PHP
το πρόβλημα: curl_setopt($ch,FOLLOW_LOCATION,1); το σφάλμα: πρόβλημα με το open_basedir και το safe_mode η λύση: μια συνάρτηση που έχει ήδη αναπτυχθεί από κάποιον η λύση n 2: η ίδια συνάρτηση, τροποποιημένη, λειτουργεί τέλεια για μένα..= $curl_max_loops) ( $curl_loops = 0; επιστροφή FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); list($header, $data) = explode("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop($matches))); εάν (!$url) ( //δεν μπορούσε να επεξεργαστεί τη διεύθυνση url για ανακατεύθυνση σε $curl_loops = 0; επιστροφή $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) ; if (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; if (!$url["host"]) $url["host"] = $last_url[ "host"]; if (!$url["path"]) $url["path"] = $last_url["path"]; $new_url = $url["scheme"] . "://" . $ url["host"] . $url["διαδρομή"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Ανακατεύθυνση σε", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; επιστροφή $data; ) ) ?>
Απλώς χρησιμοποιήστε αυτήν τη λειτουργία χωρίς την τοποθεσία FOLLOW_LOCATION και θα πρέπει να λειτουργεί. το πρόβλημα ήταν ότι όταν φτάσετε στη γραμμή όπου επιστρέφετε τα δεδομένα εάν το http_code ήταν διαφορετικό από το 301 oe 302, το $data έχει παρωχημένες πληροφορίες ή καμία. οπότε το $debbbb κάνει τη δουλειά. Παράδειγμα 6: Ανάλυση ενός cookie από την κεφαλίδα χρησιμοποιώντας CURL PHP
Μερικές φορές δεν μπορείτε να χρησιμοποιήσετε CURLOPT_COOKIEJAR και CURLOPT_COOKIEFILE becoz των ρυθμίσεων php του διακομιστή (Λένε ότι μπορείτε να πάρετε αρχεία από τον διακομιστή χρησιμοποιώντας αυτές τις επιλογές). Εδώ είναι η λύση 1) Μην χρησιμοποιείτε CURLOPT_FOLLOWLOCATION 2) Χρησιμοποιήστε curl_setopt($ch, CURLOPT_HEADER, 1) 3)Πραγματοποιήστε λήψη από τα cookie κεφαλίδας ως εξής: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4)Ρυθμίστε τα χρησιμοποιώντας curl_setopt($ch, CURLOPT_COOKIE, $cookies); Παράδειγμα 7: Ανάλυση ενός cookie από την κεφαλίδα χρησιμοποιώντας CURL PHP
Όπως ανέφερε νωρίτερα ο Yevgen μερικές φορές δεν μπορούμε να χρησιμοποιήσουμε CURLOPT_COOKIEJAR και CURLOPT_COOKIEFILE. Παρακάτω είναι μια συνάρτηση επιστροφής κλήσης κεφαλίδας που έγραψα τον Ιανουάριο και σας επιτρέπει να διατηρείτε cookie μεταξύ των αιτημάτων cURL. Τα cookies προστίθενται στο $ch κατά τη διάρκεια όλων των αιτημάτων, ακόμη και κατά την ανακατεύθυνση, ώστε να μπορείτε χρησιμοποιήστε το μαζί με το CURLOPT_FOLLOWLOCATION. Εδώ είναι ο κώδικας: συνάρτηση read_header($ch, $string) ( καθολική $location; #keep track of location/redirects global $cookiearr; #store cookies here global $ch; # ^παρακάμπτει την παράμετρο συνάρτησης $ch # αυτό είναι εντάξει γιατί πρέπει να # ενημερώσουμε το καθολικό $ch με # νέα cookies $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep track of τελευταία ανακατεύθυνση $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get the cookie $cookiestr = trim(substr( $string, 11, -1)); $cookie = explode(";", $cookistr); $cookie = explode("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute μόνο στο τέλος της κεφαλίδας foreach ($cookiearr ως $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) επιστροφή $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Αυτός ο κώδικας προϋποθέτει ότι θα επαναχρησιμοποιήσετε το $ch χωρίς να το αρχικοποιείτε κάθε φορά (καλέστε το curl_init μόνο μία φορά, στην αρχή). Αν χρειαστεί να αρχικοποιήσετε ξανά το $ch σε οποιοδήποτε σημείο του κώδικά σας, μπορείτε να αποκτήσετε πρόσβαση στα τρέχοντα αποθηκευμένα cookies στο $cookiearr και να τα συμπεριλάβετε στο νέο $ch. Έγραψα αυτήν τη συνάρτηση πριν είχα αρκετή εμπειρία με κανονικές εκφράσεις, οπότε δεν θα βρείτε κλήσεις preg_match εδώ. Χρησιμοποιώ αυτόν τον κωδικό για αρκετό καιρό και χωρίς κανένα πρόβλημα στην πρόσβαση στο gmail, yahoo, hotmail, aol κ.λπ. περάστε από τη σύνδεση και μερικές σελίδες πριν φτάσετε σε αυτό που έψαχνα. Παράδειγμα 8: Ρύθμιση ενός προγράμματος χειρισμού φορτίου κεφαλίδας χρησιμοποιώντας CURL PHP
Χρησιμοποιώντας το cURL, χρειάστηκε να καλέσω ένα σενάριο τρίτου μέρους που επέστρεφε δυαδικά δεδομένα ως συνημμένο για να μεταβιβάσω τα ανακτημένα δεδομένα ξανά ως συνημμένο. Το πρόβλημα ήταν ότι το σενάριο τρίτου μέρους επέστρεφε περιστασιακά σφάλματα HTTP και ήθελα να αποφύγω τη μετάδοση επισύναψης μηδενικού μήκους σε τέτοιες περιπτώσεις. Ο συνδυασμός χρήσης CURLOPT_FAILONERROR και επανάκλησης CURLOPT_HEADERFUNCTION βοήθησε στην επεξεργασία των σφαλμάτων HTTP σεναρίου τρίτου μέρους: συνάρτηση curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader($str) ); header("Content-Disposition: attachment; filename="file-name.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://site/"); curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1); curl_setopt($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); curl_setopt($resURL, CURLOPT_FAILONERROR, 1); curl_exec($resURL); $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE); curl_close($resURL); if ($intReturnCode != 200) (εκτυπώστε "Σφάλμα με τον κωδικό: " . $intReturnCode; ) Παράδειγμα 9. Αποθήκευση σελίδας σε αρχείο και υπολογισμός του ρυθμού μεταφοράς χρησιμοποιώντας CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); συνάρτηση WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_ 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); ηχώ " "; echo "Μέση ταχύτητα λήψης == " . $sAverageSpeedDownload. "
"; curl_close($sh); FClose ($hFile); echo "( Δείτε το αρχείο "".$sTxtfile."" στην ίδια διαδρομή της φιλοξενίας." " όπου αυτό το σενάριο PHP).
"; echo "Μέση ταχύτητα μεταφόρτωσης == " . $sAverageSpeedUpload."
"; ηχώ "
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Παράδειγμα 9. Λήψη σελίδας μέσω σύνδεσης SSL (https)
$ch=curl_init("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Απενεργοποιήστε το σφάλμα "Πρόβλημα πιστοποιητικού SSL, βεβαιωθείτε ότι το πιστοποιητικό CA είναι εντάξει" curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Απενεργοποιήστε το σφάλμα "SSL: όνομα θέματος πιστοποιητικού "hostname.ru" δεν ταιριάζει με το όνομα κεντρικού υπολογιστή προορισμού "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); Παράδειγμα 10: Χρήση περιόδων σύνδεσης και cookie σε μπούκλα
$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);//αποθήκευση ληφθέντων COOKIE σε ένα αρχείο curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //στείλτε στον διακομιστή τα COOKIE που ελήφθησαν από αυτόν κατά την εξουσιοδότηση $out=curl_exec($curl); Παράδειγμα 11: Μεταφόρτωση αρχείων και πολυδιάστατος πίνακας σε Curl. CURLOPT_POSTFIELDS + CurlFile