PHP CURL – Funktionen und Anwendungsbeispiele. Erweiterte Verwendung von cURL in den PHP Curl-Befehlszeilenoptionen
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — Legt einen Parameter für die CURL-Sitzung fest
Liste der Parameter
cURL-Handle erhalten von curl_init().
Zu setzender Parameter CURLOPT_XXX.
Der Wert des Optionsparameters.
bool:
Parameter | Anmerkungen | |
---|---|---|
CURLOPT_AUTOREFERER | WAHR zur automatischen Feldeinstellung Referrer: in Anfragen, die per Header umgeleitet werden Standort:. | |
CURLOPT_BINARYTRANSFER | WAHR um die Rohantwort zurückzugeben, wenn eine Konstante verwendet wird CURLOPT_RETURNTRANSFER. | Ab PHP 5.1.3 ist diese Option nicht mehr erforderlich: Bei Verwendung der Option wird immer eine Rohausgabe zurückgegeben CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | WAHR um die aktuelle Sitzung anzuweisen, eine neue „Sitzung“ von Cookies zu starten. Dies führt dazu, dass libcurl alle „Sitzungs“-Cookies ignoriert, die es aus der vorherigen Sitzung hätte laden sollen. Standardmäßig speichert und lädt libcurl immer alle Cookies, unabhängig davon, ob es sich um „Sitzungs“-Cookies handelt oder nicht. „Sitzungscookies“ sind Cookies, die nicht ablaufen und nur für die aktuelle „Sitzung“ vorhanden sein dürfen. | |
CURLOPT_CERTINFO | WAHR um SSL-Zertifikatsinformationen zum Streamen auszugeben STDERR mit sicheren Verbindungen. | Hinzugefügt in cURL 7.19.1. Verfügbar ab PHP 5.3.2. Für den ordnungsgemäßen Betrieb muss diese Option aktiviert sein CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | WAHR Weist die Bibliothek an, die erforderliche Proxy-Authentifizierung und den Verbindungsaufbau durchzuführen, überträgt jedoch keine Daten. Diese Option ist für HTTP, SMTP und POP3 implementiert. | Hinzugefügt in 7.15.2. Verfügbar ab PHP 5.5.0. |
CURLOPT_CRLF | WAHR um Unix-Zeilenenden in CRLF zu konvertieren. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | WAHR um den globalen DNS-Cache zu verwenden. Diese Option ist nicht threadsicher und standardmäßig aktiviert. | |
CURLOPT_FAILONERROR | WAHR für einen detaillierten Fehlerbericht, wenn der empfangene HTTP-Code größer oder gleich 400 ist. Das Standardverhalten gibt die Seite normal zurück und ignoriert den Code. | |
CURLOPT_FILETIME | WAHR um zu versuchen, das Änderungsdatum eines Remote-Dokuments zu ermitteln. Dieser Wert kann mithilfe des Parameters CURLINFO_FILETIME aus der Funktion abgerufen werden curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | WAHR um einer Überschrift zu folgen "Standort: " vom Server in seiner Antwort gesendet (beachten Sie, dass dies rekursiv geschieht, PHP folgt allen gesendeten Headern "Standort: ", außer wenn eine Konstante festgelegt ist CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | WAHR um zu erzwingen, dass eine Verbindung nach Abschluss ihrer Verarbeitung geschlossen wird, sodass sie nicht wiederverwendet werden kann. | |
CURLOPT_FRESH_CONNECT | WAHR um die Verwendung einer neuen Verbindung anstelle einer zwischengespeicherten Verbindung zu erzwingen. | |
CURLOPT_FTP_USE_EPRT | WAHR um EPRT (und LPRT) für aktive FTP-Uploads zu verwenden. Verwenden FALSCH um EPRT und LPRT zu deaktivieren und nur PORT zu verwenden. | |
CURLOPT_FTP_USE_EPSV | WAHR zum ersten Testen des EPSV-Befehls bei FTP-Übertragungen. Wenn der Befehl fehlschlägt, wird auf PASV zurückgegriffen. Einbauen in FALSCH um EPSV zu deaktivieren. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | WAHR um fehlende Verzeichnisse zu erstellen, wenn ein FTP-Vorgang auf einen nicht vorhandenen Pfad stößt. | |
CURLOPT_FTPAPPEND | WAHR um eine Remote-Datei bis zum Ende zu schreiben, anstatt sie über eine vorhandene Datei zu überschreiben. | |
CURLOPT_TCP_NODELAY | Gibt dauerhaft an, ob die Option TCP_NODELAY gesetzt oder gelöscht werden soll (1 = gesetzt, 0 = gelöscht). Standardmäßig ist die Option deaktiviert. | Verfügbar ab PHP 5.2.1 für Versionen, die mit libcurl 7.11.2 oder höher erstellt wurden. |
CURLOPT_FTPASCII | Spitzname CURLOPT_TRANSFERTEXT. Verwenden Sie stattdessen dies. | |
CURLOPT_FTPLISTONLY | WAHR um nur eine Liste von Namen aus dem FTP-Verzeichnis zurückzugeben. | |
CURLOPT_HEADER | WAHR um Header in die Ausgabe einzuschließen. | |
CURLINFO_HEADER_OUT | WAHR um die Handle-Abfragezeichenfolge zu verfolgen. | Verfügbar ab PHP 5.1.3. Präfix CURLINFO_ gezielt eingesetzt. |
CURLOPT_HTTPGET | WAHR um die HTTP-Anfragemethode auf die GET-Methode zurückzusetzen. Da GET die Standardeinstellung ist, wird dieser Parameter nur benötigt, wenn die Anforderungsmethode zuvor geändert wurde. | |
CURLOPT_HTTPPROXYTUNNEL | WAHR zum Tunneln über den angegebenen HTTP-Proxy. | |
CURLOPT_MUTE | WAHR cURL-Funktionsmeldungen vollständig deaktivieren. | In cURL 7.15.5 entfernt (CURLOPT_RETURNTRANSFER-Option kann verwendet werden) |
CURLOPT_NETRC | WAHR um die Datei ~/.netrc für den Benutzernamen und das Passwort für die Remote-Site zu lesen, mit der die Verbindung hergestellt wird. | |
CURLOPT_NOBODY | WAHR um den Antworttext von der Ausgabe auszuschließen. Die Anforderungsmethode ist auf HEAD eingestellt. Ändern Sie diese Einstellung in FALSCHändert es nicht zurück in GET. | |
CURLOPT_NOPROGRESS | WAHR um die Fortschrittsanzeige bei cURL-Übertragungen zu deaktivieren.
|
|
CURLOPT_NOSIGNAL | WAHR um alle cURL-Funktionen zu ignorieren, die Signale an den PHP-Prozess senden. Diese Option ist in Multithread-SAPIs standardmäßig aktiviert, damit Timeout-Parameter ordnungsgemäß funktionieren. | |
CURLOPT_POST | WAHR um reguläres HTTP POST zu verwenden. Diese POST-Methode verwendet die normale , häufig in HTML-Formularen verwendet. | |
CURLOPT_PUT | WAHR um eine Datei mit der HTTP-PUT-Methode herunterzuladen. Die verwendete Datei muss über die Optionen eingestellt werden CURLOPT_INFILE Und CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | WAHR um das Ergebnis der Übertragung als String zurückzugeben curl_exec() statt direkter Ausgabe an den Browser. | |
CURLOPT_SAFE_UPLOAD | WAHR um die Präfixunterstützung zu deaktivieren @ für heruntergeladene Dateien in CURLOPT_POSTFIELDS, was bedeutet, dass die Werte mit übergeben wurden @ können sicher als Felder übertragen werden. Anstelle eines Präfixes können Sie die Option verwenden CURLFile D. | In PHP 5.5.0 mit Standardwert hinzugefügt FALSCH. In PHP 5.6.0 wurde es standardmäßig gleich WAHR. |
CURLOPT_SSL_VERIFYPEER | FALSCH um cURL daran zu hindern, das Host-Zertifikat zu überprüfen. Über den Parameter können alternative zu verifizierende Zertifikate angegeben werden CURLOPT_CAINFO oder das Verzeichnis mit den durch den Parameter angegebenen Zertifikaten CURLOPT_CAPATH. | Standard ist WAHR seit cURL Version 7.10. Die Standardverteilung wird ab cURL-Version 7.10 installiert. |
CURLOPT_TRANSFERTEXT | WAHR um den ASCII-Modus für FTP-Übertragungen zu verwenden. Bei Verwendung von LDAP werden die Daten im Klartext statt im HTML-Format zurückgegeben. Auf Windows-Systemen der Thread STDOUT wird nicht auf den Binärmodus eingestellt. | |
CURLOPT_UNRESTRICTED_AUTH | WAHR um bei Weiterleitungen weiterhin Login und Passwort zu senden (bei Verwendung von CURLOPT_FOLLOWLOCATION), auch wenn sich der Hostname ändert. | |
CURLOPT_UPLOAD | WAHR um das Hochladen der Datei auf den Server vorzubereiten. | |
CURLOPT_VERBOSE | WAHR um zusätzliche Informationen anzuzeigen. Schreibt die Ausgabe in einen Stream STDERR oder die durch den Parameter angegebene Datei CURLOPT_STDERR. |
Für die folgenden Optionsparameterwerte muss der Wertparameter vom Typ sein ganze Zahl:
Parameter | Wertwert festlegen | Anmerkungen |
---|---|---|
CURLOPT_BUFFERSIZE | Die Größe des Puffers, der für jeden Lesevorgang verwendet wird. Es gibt jedoch keine Garantie dafür, dass dieser Antrag bearbeitet wird. | Hinzugefügt in cURL 7.10. |
CURLOPT_CLOSEPOLICY | Eine der Konstanten CURLCLOSEPOLICY_*.
|
In PHP 5.6.0 entfernt. |
CURLOPT_CONNECTTIMEOUT | Die Anzahl der Sekunden, die beim Verbindungsversuch gewartet werden soll. Verwenden Sie 0, um unbegrenzt zu warten. | |
CURLOPT_CONNECTTIMEOUT_MS | Die Anzahl der Millisekunden, die beim Verbindungsversuch gewartet werden soll. Verwenden Sie 0, um unbegrenzt zu warten. Wenn libcurl mit dem Standard-Namenslöser des Systems kompiliert wird, verwendet die Verbindung weiterhin eine volle Sekunde Wartezeit als Zeitüberschreitung, wobei die minimal zulässige Zeitüberschreitung 1 Sekunde beträgt. | Hinzugefügt in cURL-Version 7.16.2. Verfügbar ab PHP 5.2.3. |
CURLOPT_DNS_CACHE_TIMEOUT | Die Anzahl der Sekunden, die DNS-Einträge im Speicher gespeichert werden. Standardmäßig beträgt dieser Parameter 120 (2 Minuten). | |
CURLOPT_FTPSSLAUTH | FTP-Authentifizierungsmethode (im aktiven Modus): CURLFTPAUTH_SSL(SSL wird zuerst geprüft), CURLFTPAUTH_TLS(TLS zuerst geprüft) oder CURLFTPAUTH_DEFAULT(cURL entscheidet selbst). | Hinzugefügt in cURL-Version 7.12.2. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (standardmäßig wählt CURL aus, welche Version verwendet werden soll), CURL_HTTP_VERSION_1_0 (HTTP/1.0 erzwingen) oder CURL_HTTP_VERSION_1_1 (HTTP/1.1 erzwingen). | |
CURLOPT_HTTPAUTH |
Sie können den bitweisen Operator verwenden | (oder) mehrere Methoden miteinander zu kombinieren. In diesem Fall fragt cURL den Server nach unterstützten Autorisierungsmethoden ab und wählt die beste aus. CURLAUTH_ANY ist ein Alias CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE ist ein Alias CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Die erwartete Dateigröße in Bytes beim Hochladen einer Datei auf einen Remote-Server. Bitte beachten Sie, dass durch die Verwendung dieser Option das Senden weiterer Daten über diesen Wert hinaus nicht verhindert wird, da die gesendeten Daten vom Ergebnis abhängen CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Oberer Schwellenwert für die Datenübertragungsrate in Bytes pro Sekunde. Die Verifizierung erfolgt innerhalb CURLOPT_LOW_SPEED_TIME Sekunden, danach betrachtet PHP die Übertragung als zu langsam und bricht sie ab. | |
CURLOPT_LOW_SPEED_TIME | Die maximale Anzahl an Sekunden, die die Übertragungsrate nicht überschreiten darf CURLOPT_LOW_SPEED_LIMIT, sonst markiert PHP die Übertragung als zu langsam und stoppt sie. | |
CURLOPT_MAXCONNECTS | Maximale Anzahl dauerhafter Verbindungen. Wenn das Limit erreicht ist, wird der Parameter verwendet, um zu bestimmen, welche Verbindung geschlossen werden soll. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Die maximale Anzahl akzeptierter Weiterleitungen. Verwenden Sie diese Option zusammen mit der Option CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Alternativer Anschlussport. | |
CURLOPT_POSTREDIR | Eine Bitmaske mit 1 (301 Moved Permanently), 2 (302 Found) und 4 (303 See Other), um anzugeben, ob die HTTP-POST-Methode verarbeitet werden soll, wenn die Option aktiviert ist CURLOPT_FOLLOWLOCATION wenn die angegebene Art der Umleitung aufgetreten ist. | Hinzugefügt in cURL 7.19.1. Verfügbar seit PHP 5.3.2. |
CURLOPT_PROTOCOLS |
Bitmaske von Werten CURLPROTO_*. Diese Maske schränkt die von libcurl verwendeten Protokolle ein. Dadurch können Sie libcurl mit einer großen Anzahl von Protokollen arbeiten lassen und den Betrieb bestimmter Übertragungen auf nur eine Teilmenge davon beschränken. Standardmäßig verwendet libcurl alle unterstützten Protokolle. Siehe auch Parameter CURLOPT_REDIR_PROTOCOLS. Richtige Protokollwerte: CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_FTP, CURLPROTO_FTPS, CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_TELNET, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_DICT, CURLPROTO_FILE, CURLP ROTO_TFTP, CURLPROTO_ALL |
|
CURLOPT_PROXYAUTH | HTTP-Autorisierungsmethoden, die beim Herstellen einer Verbindung zu einem Proxyserver verwendet werden. Verwenden Sie dieselben Bitmasken, die für den Parameter beschrieben wurden CURLOPT_HTTPAUTH. Derzeit werden nur CURLAUTH_BASIC und CURLAUTH_NTLM für die Proxy-Autorisierung unterstützt. | Hinzugefügt in cURL-Version 7.10.7. |
CURLOPT_PROXYPORT | Die Portnummer des Proxyservers, zu dem die Verbindung hergestellt wird. Diese Anzahl kann auch über den Parameter eingestellt werden CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | Entweder CURLPROXY_HTTP (Standard) oder CURLPROXY_SOCKS5 . | Hinzugefügt in cURL 7.10. |
CURLOPT_REDIR_PROTOCOLS | Bitmaske von Werten CURLPROTO_*. Diese Bitmaske begrenzt die von libcurl beim Umleiten verwendeten Protokolle (bei aktiviertem Parameter). CURLOPT_FOLLOWLOCATION). Dadurch können Sie den Satz an Protokollen einschränken, die bei der Umleitung einiger Übertragungen verwendet werden. Standardmäßig unterstützt libcurl alle Protokolle außer FILE und SCP. In Versionen vor 7.19.4 wurde die Umleitung ausnahmslos für alle Protokolle verwendet. Siehe auch Parameterbeschreibung CURLOPT_PROTOCOLS für eine Liste von Konstanten mit Protokollwerten. | Hinzugefügt in cURL-Version 7.19.4. |
CURLOPT_RESUME_FROM | Übertragungsstart-Offset in Bytes. | |
CURLOPT_SSL_VERIFYHOST | Verwenden Sie 1, um zu prüfen, ob im SSL-Zertifikat ein allgemeiner Name vorhanden ist. Verwenden Sie 2, um zu überprüfen, ob der allgemeine Name vorhanden ist und auch mit dem angegebenen Host übereinstimmt. In einer Kampfumgebung sollte der Wert dieses Parameters 2 sein (standardmäßig eingestellt). | Die Unterstützung für den Wert 1 wurde in cURL 7.28.1 entfernt |
CURLOPT_SSLVERSION | Eine der Konstanten 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) oder CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Methode zur Parameterinterpretation CURLOPT_TIMEVALUE. Verwenden Sie CURL_TIMECOND_IFMODSINCE, um die Seite nur dann zurückzugeben, wenn sie sich seit der im Parameter angegebenen Zeit geändert hat CURLOPT_TIMEVALUE. Wenn die Seite nicht geändert wurde, wird der Titel zurückgegeben „304 nicht geändert“, was bedeutet, dass der Parameter CURLOPT_HEADER eingebaut WAHR. Verwenden Sie CURL_TIMECOND_IFUNMODSINCE für den gegenteiligen Effekt. Der Standardwert ist CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | Die maximal zulässige Anzahl von Sekunden für die Ausführung von cURL-Funktionen. | |
CURLOPT_TIMEOUT_MS | Die maximal zulässige Anzahl von Millisekunden für die Ausführung von cURL-Funktionen. Wenn libcurl mit dem normalen Systemnamen-Resolver erstellt wird, verwendet diese Verbindungsspanne immer noch Zeitüberschreitungen für die zweite Runde, wobei eine Mindestzeitüberschreitung von einer Sekunde zulässig ist. | Hinzugefügt in cURL-Version 7.16.2. Verfügbar ab PHP 5.2.3. |
CURLOPT_TIMEVALUE | Anzahl der Sekunden seit dem 1. Januar 1970. Diese Zeit wird vom Parameter verwendet CURLOPT_TIMECONDITION. Standardmäßig wird der Parameter CURL_TIMECOND_IFMODSINCE verwendet. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Wenn die Download-Geschwindigkeit diesen Wert (angegeben in Bytes pro Sekunde) im Durchschnitt während der gesamten Übertragung überschreitet, wird der Download angehalten, um die durchschnittliche Geschwindigkeit beizubehalten, die kleiner oder gleich diesem Parameter ist. Standardmäßig ist die Geschwindigkeit nicht begrenzt. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Wenn der Upload auf den Server diesen Wert (angegeben in Bytes pro Sekunde) im Durchschnitt während der gesamten Übertragung überschreitet, wird der Upload angehalten, um eine Durchschnittsgeschwindigkeit beizubehalten, die kleiner oder gleich diesem Parameter ist. Standardmäßig ist die Geschwindigkeit nicht begrenzt. | Hinzugefügt in cURL 7.15.5. Verfügbar ab PHP 5.4.0. |
CURLOPT_SSH_AUTH_TYPES | Eine Bitmaske bestehend aus einer oder mehreren Konstanten: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. Installieren CURLSSH_AUTH_ANY damit libcurl eine davon unabhängig auswählen kann. | Hinzugefügt in cURL 7.16.1. |
CURLOPT_IPRESOLVE | Ermöglicht einer Anwendung, den Typ der IP-Adresse auszuwählen, mit dem der Hostname bestimmt wird. Dies ist erforderlich, wenn Sie einen Hostnamen verwenden, der von mehr als einer Version der IP-Adresse abgeleitet ist. Mögliche Werte könnten sein CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, und standardmäßig CURL_IPRESOLVE_WHATEVER. | Hinzugefügt in cURL 7.10.8. |
Für die folgenden Optionsparameterwerte muss der Wertparameter vom Typ sein Zeichenfolge:
Parameter | Wertwert festlegen | Anmerkungen |
---|---|---|
CURLOPT_CAINFO | Der Name einer Datei, die ein oder mehrere Zertifikate enthält, anhand derer Knoten überprüft werden. Dieser Parameter ist nur in Verbindung mit sinnvoll CURLOPT_SSL_VERIFYPEER. | Erfordert einen absoluten Pfad. |
CURLOPT_CAPATH | Ein Verzeichnis, das mehrere CA-Zertifikate enthält. Verwenden Sie diese Option in Verbindung mit CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Header-Inhalt "Plätzchen:", wird in der HTTP-Anfrage verwendet. Bitte beachten Sie, dass mehrere Cookies durch ein Semikolon gefolgt von einem Leerzeichen getrennt werden (z. B. „ Frucht=Apfel; Farbe = rot") | |
CURLOPT_COOKIEFILE | Der Name der Datei, die die Cookies enthält. Diese Datei muss im Netscape-Format vorliegen oder es müssen einfach HTTP-Header in die Datei geschrieben werden. Wird als Dateiname ein leerer String übergeben, werden Cookies zwar nicht gespeichert, ihre Verarbeitung ist aber trotzdem möglich. | |
CURLOPT_COOKIEJAR | Der Name der Datei, in der nach dem Schließen des Handles, beispielsweise nach dem Aufruf von curl_close, alle internen Cookies der aktuellen Übertragung gespeichert werden. | |
CURLOPT_CUSTOMREQUEST | Stattdessen wird eine benutzerdefinierte Anfragemethode verwendet "ERHALTEN" oder "KOPF" wenn Sie eine HTTP-Anfrage stellen. Dies ist nützlich für Abfragen "LÖSCHEN" oder andere, seltenere HTTP-Anfragen. Richtige Bedeutungen wären Wörter wie "ERHALTEN", "POST", "VERBINDEN" usw; diese. Geben Sie hier nicht die gesamte HTTP-Anfragezeile ein. Zum Beispiel ein Hinweis „GET /index.html HTTP/1.0\r\n\r\n“ wird falsch sein.
|
|
CURLOPT_EGDSOCKET | Wie CURLOPT_RANDOM_FILE, außer dass der Dateiname auf den Entropy Gathering Daemon-Socket festgelegt ist. | |
CURLOPT_ENCODING | Header-Inhalt „Accept-Encoding:“. Dadurch kann die Anfrage entschlüsselt werden. Unterstützte Kodierungen sind "Identität", „entleeren“ Und „gzip“. Wenn ein leerer String übergeben wird, "" , wird ein Header gesendet, der alle unterstützten Kodierungstypen enthält. | Hinzugefügt in cURL 7.10. |
CURLOPT_FTPPORT | Der Wert, der zur Bestimmung der IP-Adresse für den FTP-Befehl „PORT“ verwendet wird. Der Befehl „PORT“ teilt dem Server mit, mit welcher IP-Adresse er sich verbinden soll. Dies kann eine IP-Adresse, ein Hostname, ein Netzwerkschnittstellenname (unter Unix) oder einfach „-“ sein, um die Standard-IP-Adresse des Systems zu verwenden. | |
CURLOPT_INTERFACE | Der Name der zu verwendenden Netzwerkschnittstelle. Kann ein Schnittstellenname, eine IP-Adresse oder ein Hostname sein. | |
CURLOPT_KEYPASSWD | Für die Verwendung des privaten Schlüssels ist ein Passwort erforderlich CURLOPT_SSLKEY oder CURLOPT_SSH_PRIVATE_KEYFILE. | Hinzugefügt in cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Sicherheitsstufe KRB4 (Kerberos 4). Jeder der folgenden Werte (in der Reihenfolge vom schwächsten zum stärksten) ist korrekt: "klar", "sicher", "vertraulich", "Privat".. Wenn die angegebene Zeichenfolge von den angegebenen Werten abweicht, wird der Wert verwendet "Privat". Setzen Sie diese Option auf NULL wird die KRB4-Sicherheit vollständig deaktivieren. Derzeit funktioniert die KRB4-Sicherheit nur mit FTP-Transaktionen. | |
CURLOPT_POSTFIELDS | Alle Daten, die in einer HTTP-POST-Anfrage übertragen werden. Um eine Datei zu übertragen, geben Sie vor dem Dateinamen an @ , und verwenden Sie auch den vollständigen Pfad zur Datei. Der Dateityp kann auch im Format „ ;type=mimetype„nach dem Dateinamen. Dieser Parameter kann als URL-codierte Zeichenfolge übergeben werden, z. B. „ para1=val1¶2=val2&...", und zwar in Form eines Arrays, dessen Schlüssel die Namen der Felder und die Werte deren Inhalte sind. Wenn value ein Array ist, der Header Inhaltstyp wird eingestellt Multipart-/Formulardaten. Ab PHP 5.2.0, beim Übertragen von Dateien mit dem Präfix @ , Wert muss ein Array sein. Seit PHP 5.5.0, Präfix @ ist veraltet und Dateien können mit gesendet werden CURLFile. Präfix @ kann deaktiviert werden, um Werte zuzulassen, die mit beginnen @ durch Setzen der Option CURLOPT_SAFE_UPLOAD in der Bedeutung WAHR. | |
CURLOPT_PROXY | HTTP-Proxy, über den Anfragen weitergeleitet werden. | |
CURLOPT_PROXYUSERPWD | Login und Passwort im Formular angegeben ":" , wird bei der Verbindung über einen Proxy verwendet. | |
CURLOPT_RANDOM_FILE | Der Name der Datei, die zum Initialisieren des Zufallszahlengenerators für SSL verwendet wird. | |
CURLOPT_RANGE | Bereich der herunterzuladenden Daten im Format „X-Y“, und entweder X oder Y können weggelassen werden. Das HTTP-Protokoll unterstützt auch die Übertragung mehrerer durch Kommas getrennter Bereiche, diese werden im Format angegeben „X-Y, N-M“. | |
CURLOPT_REFERER | Header-Inhalt „Referrer:“, die in der HTTP-Anfrage verwendet wird. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Eine Zeichenfolge mit 32 Hexadezimalziffern. Die Zeichenfolge muss eine MD5-Prüfsumme des öffentlichen Schlüssels des Remote-Computers sein, und libcurl setzt die Verbindung zum Remote-Host zurück, bis die Prüfsumme mit dem öffentlichen Schlüssel übereinstimmt. Diese Option gilt nur für die Datenübertragung über SCP und SFTP. | Hinzugefügt in cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Der Dateiname für Ihren öffentlichen Schlüssel. Wenn nicht angegeben, verwendet libcurl standardmäßig die Datei $HOME/.ssh/id_dsa.pub, wenn die HOME-Umgebungsvariable festgelegt ist, und die Datei „id_dsa.pub“ im aktuellen Verzeichnis, wenn die HOME-Umgebungsvariable nicht festgelegt ist. | Hinzugefügt in cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Der Dateiname für Ihren privaten Schlüssel. Wenn nicht angegeben, verwendet libcurl standardmäßig die Datei $HOME/.ssh/id_dsa, wenn die Umgebungsvariable HOME festgelegt ist, und die Datei „id_dsa“ im aktuellen Verzeichnis, wenn die Umgebungsvariable HOME nicht festgelegt ist. Wenn die Datei passwortgeschützt ist, legen Sie das Passwort mit fest CURLOPT_KEYPASSWD. | Hinzugefügt in cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Liste der bei SSL-Übertragungen verwendeten Chiffren. Zum Beispiel, RC4-SHA Und TLSv1 sind gültige Chiffrierlisten. | |
CURLOPT_SSLCERT | Der Name einer Datei mit einem korrekt formatierten PEM-Zertifikat. | |
CURLOPT_SSLCERTPASSWD | Für die Nutzung des Zertifikats ist ein Passwort erforderlich CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Zertifikatsformat. Unterstützte Formate „PEM“(Default), „DER“ Und „ENG“. | Hinzugefügt in cURL-Version 7.9.3. |
CURLOPT_SSLENGINE | Die Verschlüsselungs-Engine-ID für den im Parameter angegebenen privaten SSL-Schlüssel CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Die Kennung des Verschlüsselungsmechanismus, der für asymmetrische Verschlüsselungsvorgänge verwendet wird. | |
CURLOPT_SSLKEY | Der Name der privaten SSL-Schlüsseldatei. | |
CURLOPT_SSLKEYPASSWD | Das geheime Passwort, das zur Verwendung des durch den Parameter angegebenen privaten SSL-Schlüssels erforderlich ist CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Der im Parameter angegebene Typ des privaten SSL-Schlüssels CURLOPT_SSLKEY. Die folgenden Schlüsseltypen werden unterstützt: „PEM“(Default), „DER“ Und „ENG“. | |
CURLOPT_URL | Herunterladbare URL. Dieser Parameter kann auch beim Initialisieren einer Sitzung mit festgelegt werden curl_init(). | |
CURLOPT_USERAGENT | Header-Inhalt "User-Agent: ", in einer HTTP-Anfrage gesendet. | |
CURLOPT_USERPWD | Login und Passwort, die während der Verbindung verwendet werden, im Format angegeben ":" . |
Für die folgenden Optionsparameterwerte muss der Wertparameter ein Array sein:
Parameter | Wertwert festlegen | Anmerkungen |
---|---|---|
CURLOPT_HTTP200ALIASES | Ein Array von HTTP 200-Antworten, die als korrekte und nicht als fehlerhafte Antworten behandelt werden. | Hinzugefügt in cURL-Version 7.10.3. |
CURLOPT_HTTPHEADER | Ein Array festgelegter HTTP-Header im Format array("Content-type: text/plain", "Content-length: 100") | |
CURLOPT_POSTQUOTE | Ein Array von FTP-Befehlen, die auf dem Server ausgeführt werden, nachdem eine FTP-Anfrage abgeschlossen ist. | |
CURLOPT_QUOTE | Ein Array von FTP-Befehlen, die auf dem Server ausgeführt werden, bevor eine FTP-Anfrage gestellt wird. |
Für die folgenden Optionsparameterwerte muss der Wertparameter ein Stream-Handle sein (z. B. von der Funktion zurückgegeben). fopen()):
Parameter | Wertwert festlegen |
---|---|
CURLOPT_FILE | Die Datei, in die das Übertragungsergebnis geschrieben wird. Standardausgabestream STDOUT(Browser Fenster). |
CURLOPT_INFILE | Die Datei, aus der Daten gelesen werden sollen, wenn sie auf den Server hochgeladen werden. |
CURLOPT_STDERR | Alternative Fehlerausgabedatei, die anstelle des Fehlerstroms verwendet wird STDERR. |
CURLOPT_WRITEHEADER | Die Datei, in die die Header des aktuellen Vorgangs geschrieben werden. |
Für die folgenden Optionsparameterwerte muss der Wertparameter ein gültiger Funktionsname oder Abschluss sein:
Parameter | Wertwert festlegen |
---|---|
CURLOPT_HEADERFUNCTION | Die Callback-Funktion benötigt zwei Parameter. Der erste Parameter ist das cURL-Handle, der zweite Parameter ist ein String, der die zu schreibenden Header enthält. Header müssen mit dieser Callback-Funktion geschrieben werden. Sollte die Anzahl der geschriebenen Bytes zurückgeben. |
CURLOPT_PASSWDFUNCTION | Die Callback-Funktion benötigt drei Parameter. Der erste Parameter ist das cURL-Handle, der zweite Parameter ist die Zeichenfolge zur Kennwortaufforderung und der dritte Parameter ist die maximale Kennwortlänge. Sollte eine Zeichenfolge zurückgeben, die das Passwort enthält. |
CURLOPT_PROGRESSFUNCTION |
Die Callback-Funktion benötigt fünf Parameter. Der erste ist der cURL-Deskriptor, der zweite ist die Gesamtzahl der Bytes, die voraussichtlich vom Server heruntergeladen werden, der dritte ist die Anzahl der bereits heruntergeladenen Bytes, der vierte ist die Gesamtzahl der Bytes, die voraussichtlich an den Server gesendet werden, und das fünfte ist die Anzahl der bereits gesendeten Bytes.
Sie können einen Wert ungleich Null zurückgeben, um die Übertragung abzubrechen. In diesem Fall wird ein Fehler angezeigt CURLE_ABORTED_BY_CALLBACK. |
CURLOPT_READFUNCTION | Die Callback-Funktion benötigt drei Parameter. Der erste Parameter ist das cURL-Handle, der zweite Parameter ist die Stream-Ressource, die über die Option an cURL übergeben wird CURLOPT_INFILE und der dritte Parameter ist die maximal zulässige Datenmenge, die gelesen werden darf. Die Rückruffunktion muss eine Zeichenfolge mit einer Länge zurückgeben, die nicht größer als die angeforderte Datenmenge ist, normalerweise durch Lesen aus der übergebenen Streaming-Ressource. Sollte eine leere Zeichenfolge zurückgeben, um das Ende der Datei zu signalisieren EOF. |
CURLOPT_WRITEFUNCTION | Die Callback-Funktion benötigt zwei Parameter. Der erste Parameter ist das cURL-Handle und der zweite Parameter ist die Zeichenfolge, die die zu schreibenden Daten enthält. Mit dieser Funktion müssen Daten gespeichert werden. Es muss die genaue Anzahl der geschriebenen Bytes zurückgeben, andernfalls wird der Download mit einem Fehler abgebrochen. |
Andere Bedeutungen:
Rückgabewerte
Kehrt zurück WAHR nach erfolgreichem Abschluss bzw FALSCH im Falle eines Fehlers.
Liste der Änderungen
Ausführung | Beschreibung |
---|---|
5.6.0 | Möglichkeit CURL_SAFE_UPLOAD hat jetzt einen Standardwert von WAHR. |
5.6.0 | Option entfernt CURLOPT_CLOSEPOLICY und die damit verbundenen Bedeutungen. |
5.5.0 | Die cURL-Ressource wird als erstes Argument zur Rückruffunktion hinzugefügt CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Option hinzugefügt CURLOPT_SHARE. |
5.3.0 | Option hinzugefügt CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Optionen hinzugefügt CURLOPT_PROTOCOLS Und CURLOPT_REDIR_PROTOCOLS. |
5.1.0 | Optionen hinzugefügt CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH Und CURLOPT_TIMECONDITION. |
5.0.0 | Optionen hinzugefügt CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE Und CURLOPT_HTTP200ALIASES. |
Beispiele
Beispiel Nr. 1: Initialisieren einer CURL-Sitzung und Laden einer Webseite
// eine neue cURL-Ressource erstellen /* 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); Das Ergebnis der Ausführung dieses Beispiels: Array ( => Foo) Array ( => Array ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) Kommentar: Übergabe eines Arrays an CURLOPT_POSTFIELDS kodiert die Daten als Multipart-/Formulardaten, während die Übergabe einer URL-codierten Zeichenfolge die Daten als codiert application/x-www-form-urlencoded. cURL ist ein Tool, das die Interaktion mit verschiedenen Servern ermöglicht und viele Protokolle unterstützt: HTTP, FTP, TELNET usw. cURL ist ursprünglich ein Befehlszeilendienstprogramm. Aber zum Glück unterstützt PHP die Arbeit mit der cURL-Bibliothek. In diesem Artikel werden wir uns nicht triviale Beispiele für die Arbeit mit cURL ansehen. Tatsächlich gibt es viele andere Möglichkeiten, eine Anfrage an einen anderen Server zu senden, um beispielsweise den Inhalt einer Seite abzurufen. Viele Leute verwenden, meist aus Faulheit, einfache PHP-Funktionen anstelle von cURL: $content = file_get_contents("http://www.example.com"); // oder $lines = file("http://www.example.com"); // oder readfile("http://www.example.com"); Sie ermöglichen jedoch keine effiziente Fehlerbehandlung. Es gibt auch eine Reihe von Aufgaben, die sie überhaupt nicht erledigen können – zum Beispiel das Arbeiten mit Cookies, die Autorisierung, Postanfragen, das Herunterladen von Dateien. cUrl ist ein leistungsstarkes Tool, das mehrere Protokolle unterstützt und vollständige Anforderungsinformationen bereitstellt. Bevor wir zu komplexen Beispielen übergehen, schauen wir uns die Grundstruktur einer cURL-Anfrage in PHP an. Um eine cURL-Anfrage in PHP durchzuführen, müssen Sie vier Hauptschritte ausführen: Wir werden uns in diesem Artikel hauptsächlich mit Schritt 2 befassen, da dort die Magie geschieht. Die Liste der cURL-Optionen ist sehr umfangreich, daher werden wir heute nicht alle Optionen berücksichtigen, sondern diejenigen verwenden, die zur Lösung spezifischer Probleme nützlich sind. Bei Bedarf können Sie die folgenden Zeilen hinzufügen, um Fehler zu verfolgen: // ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ... Bitte beachten Sie, dass wir „===“ anstelle von „==“ verwenden, weil Es muss zwischen einer leeren Serverantwort und dem booleschen Wert FALSE unterschieden werden, der im Fehlerfall zurückgegeben wird. Ein weiterer optionaler Schritt besteht darin, Informationen über die cURL-Anfrage zu erhalten, nachdem diese ausgeführt wurde. // ... curl_exec($ch); $info = curl_getinfo($ch); echo „Genommen“ . $info["total_time"] . „Sekunden für URL“. $info["url"]; // ... Als Ergebnis erhalten Sie ein Array mit folgenden Informationen: In diesem Beispiel schreiben wir ein Skript, das Weiterleitungen basierend auf verschiedenen Browsereinstellungen erkennt. Beispielsweise leiten einige Websites Besucher von Mobilgeräten an Besucher aus anderen Ländern weiter. Wir verwenden die Option CURLOPT_HTTPHEADER, um unsere eigenen Header, einschließlich User-Agent und Language, festzulegen und zu sehen, wohin uns Websites weiterleiten. // URLs $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // Browser $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)", "Sprache" => "en-us,en;q=0.5"), "iphone" => Array ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU wie Mac OS > „Mozilla/4.0 (kompatibel; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)“, „Sprache“ => „fr,fr-FR;q=0.5“)); foreach ($urls as $url) ( echo "URL: $url\n"; foreach ($browsers as $test_name => $browser) ( $ch = curl_init(); // Adresse festlegen curl_setopt($ch, CURLOPT_URL , $url); // Geben Sie den verwendeten Browser und die verwendete Sprache an. ]) ")); // Wir brauchen den Inhalt der Seite nicht. curl_setopt($ch, CURLOPT_NOBODY, 1); // Wir brauchen nur Header seiner Ausgabe: curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); , $output, $matches)) ( echo "$test_name: leitet zu $matches\n weiter"; ) else ( echo "$test_name: keine Umleitung\n"; ) ) echo "\n\n"; ) In einer Schleife überprüfen wir Browser für jede URL. Zuerst legen wir die Optionen für unsere Anfrage fest: URL sowie Browser und zu testende Sprache. Weil Wir haben eine spezielle Option festgelegt: Das Ergebnis der Anfrage enthält nur HTTP-Header. Mit einem einfachen regulären Ausdruck können wir prüfen, ob die Antwort die Zeichenfolge „Location:“ enthält. Ergebnis der Skriptausführung: URL: http://www.cnn.com Standard: Weiterleitung zu http://edition.cnn.com/ iPhone: Weiterleitung zu http://edition.cnn.com/ Französisch: Weiterleitung zu http://edition.cnn .com/ URL: http://www.mozilla.com Standard: Weiterleitungen zu https://www.mozilla.org/firefox/ iPhone: Weiterleitungen zu https://www.mozilla.org/firefox/ Französisch: Weiterleitungen zu https://www.mozilla.org/firefox/ URL: http://www.facebook.com Standard: Weiterleitungen zu https://www.facebook.com/ iPhone: Weiterleitungen zu http://m.facebook.com /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr Französisch: keine Weiterleitung Beim Durchführen von GET-Anfragen können Daten im Abfragestring übergeben werden. Wenn Sie beispielsweise bei Google suchen, wird Ihre Suchanfrage in eine URL übersetzt: http://www.google.com/search?q=google Um das Ergebnis dieser Abfrage zu erhalten, benötigen Sie nicht einmal cURL, Sie können faul sein und „file_get_contents()“ verwenden. Einige HTML-Formulare verwenden jedoch die POST-Methode. In diesem Fall werden die Daten im Textkörper der Anforderungsnachricht und nicht in der URL selbst gesendet. Schreiben wir ein Skript, das POST-Anfragen sendet. Erstellen wir zunächst eine einfache PHP-Datei, die diese Anfragen akzeptiert und die an sie gesendeten Daten zurückgibt. Nennen wir es post_output.php: $url = "http://localhost/post_output.php"; $post_data = array ("foo" => "bar", "query" => "FooBar", "action" => "Submit"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // eine POST-Anfrage stellen curl_setopt($ch, CURLOPT_POST, 1); // Daten hinzufügen curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Dieses Skript gibt Folgendes aus: Array ( => bar => FooBar => Senden) Dieses Skript hat eine POST-Anfrage an die Datei post_output.php gesendet. die den Inhalt des $_POST-Arrays ausgegeben hat und wir diese Antwort mit cURL erhalten haben. Erstellen wir wie im vorherigen Beispiel eine Datei, die Anfragen akzeptiert, upload_output.php: Print_r($_FILES); Und das Skript selbst, das die Dateien herunterlädt: $url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // hochzuladende Datei "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; Wenn Sie eine Datei hochladen möchten, müssen Sie lediglich den Pfad zu dieser Datei übergeben, genau wie bei einem normalen POST-Anfrageparameter, mit dem Präfix „@“. Das Ergebnis des Skripts: Array ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) Eine der erweiterten Funktionen von cURL in PHP ist die Möglichkeit, mehrere Anfragen gleichzeitig und asynchron auszuführen. Unter normalen Bedingungen stoppt das Skript und wartet auf den Abschluss der Anforderung. Und wenn Sie viele Abfragen ausführen müssen, kann das viel Zeit in Anspruch nehmen, weil... Sie werden nacheinander ausgeführt. Diese Einschränkung kann umgangen werden: // Handler erstellen $ch1 = curl_init(); $ch2 = curl_init(); // Optionen festlegen 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); //mehrfaches cURL-Handle erstellen $mh = curl_multi_init(); // Handler hinzufügen curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // Anfragen ausführen do ( curl_multi_exec($mh, $running); ) while ($running > 0); // Ressourcen freigeben curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); Die Idee ist, dass Sie mehrere cURL-Handles erstellen, sie unter einem Multi-Handle kombinieren und asynchron ausführen können. Zunächst ist alles wie bei einer regulären cURL-Anfrage – ein Deskriptor wird erstellt ( curl_init()
), Parameter werden eingestellt ( curl_setopt()
). Als nächstes wird ein Multideskriptor erstellt ( curl_multi_init()
) und die zuvor erstellten regulären Deskriptoren werden hinzugefügt ( curl_multi_add_handle()
). Anstatt normalerweise curl_exec() aufzurufen, rufen wir auf curl_multi_exec()
Diese Funktion informiert uns über die Anzahl der aktiven Verbindungen mithilfe des zweiten Parameters – $running. Daher läuft die Schleife, bis $running gleich 0 wird. Und natürlich ist es nach Abschluss der Arbeit notwendig, Ressourcen freizugeben. In diesem Beispiel geben wir das Ergebnis der Abfragen einfach auf STDOUT aus. Betrachten wir einen nicht trivialen Fall der Verwendung von Multi-cURL. Stellen Sie sich einen Blog mit vielen Beiträgen vor, die Links zu externen Websites enthalten. Einige dieser Links funktionieren möglicherweise nicht. Schreiben wir ein Skript, das alle defekten Links findet und uns anzeigt. Zuerst müssen wir alle externen Links aus der Datenbank ziehen: // KONFIGURIEREN $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(); $aktiv = null; // Mit MySQL verbinden if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Verbindung konnte nicht hergestellt werden: " . mysql_error()); ) if (!mysql_select_db($db_name)) ( die("Könnte not select db: " . mysql_error()); ) // nimm alle Beiträge mit Links im Text $q = "SELECT post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post " "; $r = mysql_query($q) or die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // alle Links mit regulärem Ausdruck sammeln if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches )) ( foreach ($matches as $url) ( // unnötige Domänen herausfiltern $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $excluded_domains)) ( continue; ) // zusammensetzen $url_list = $url; ) ) ) // Wiederholungen entfernen $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Keine zu überprüfende URL"); ) In diesem Teil des Skripts extrahieren wir einfach alle externen Links aus der Datenbank. Schauen wir sie uns an: $mh = curl_multi_init(); // 1. Links hinzufügen für ($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 "==Tote URLs==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Arbeits-URLs==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. Fügt ein Handle mit der angegebenen URL-Funktion hinzu add_url_to_multi_handle($mh, $url_list) ( static $index = 0; // wenn noch Links vorhanden sind if (isset($url_list[$index])) ( // alles ist wie üblich $ ch = curl_init(); // Optionen setzen curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // das Ergebnis zurückgeben, anstatt es anzuzeigen curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // erlauben leitet curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // nur Header abrufen, um Zeit zu sparen curl_setopt($ch, CURLOPT_NOBODY, 1); // zum Multi-Handle hinzufügen curl_multi_add_handle($mh, $ch); $index++; ) ) Schauen wir uns den Code genauer an (die Nummerierung entspricht den Kommentaren im Code): Lassen Sie uns das Skript ausführen: Tote URLs== xample1234.com/ ==404 URLs== www.google.com/dsfasdfafd ==Arbeitende 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 Die Überprüfung dauerte ca. 2 Sekunden. Durch die gleichzeitige Ausführung von 10 Threads erhöht sich die Leistung im Vergleich zu regulären cURL-Anfragen um das Zehnfache. Um den Inhalt der Serverantwort abzurufen, verwenden Sie die Funktion curl_multi_getcontent($ch)
, wobei $ch ein von erhaltener Deskriptor ist curl_multi_info_read()
. Wenn die HTTP-Anfrage eine Authentifizierung erfordert, verwenden Sie den folgenden Code: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Benutzernamen und Passwort senden curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // wenn Weiterleitungen erlaubt sind curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL sendet das Passwort nach Weiterleitungen curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); PHP verfügt über eine eigene Bibliothek für die Arbeit mit FTP, Sie können aber auch cURL verwenden: // Datei lesen $file = fopen("/path/to/file", "r"); // URL enthält bereits die notwendigen Daten $url = "ftp://Benutzername: [email protected]:21/Pfad/zur/neuen/Datei"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Optionen curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($ ch); curl_close($ch); Anfragen können über einen bestimmten Proxy gestellt werden: $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"); // wenn eine Autorisierung erforderlich ist curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch); Es ist möglich, Rückrufe zu verwenden, während die Anfrage ausgeführt wird, ohne auf deren Abschluss warten zu müssen. Während beispielsweise die Serverantwort heruntergeladen wird, können wir die bereits empfangenen Daten verwenden, ohne auf den vollständigen Download warten zu müssen. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function"); curl_exec($ch); curl_close($ch); Funktion progress_function($ch,$str) ( echo $str; return strlen($str); ) Die Rückruffunktion muss die Länge der Zeichenfolge zurückgeben, damit die Anfrage ordnungsgemäß funktioniert. Jedes Mal, wenn der nächste Teil der Serverantwort empfangen wird, wird ein Rückruf aufgerufen. In diesem Artikel haben wir uns die erweiterten Funktionen von cURL in PHP angesehen. Wenn Sie das nächste Mal URL-Anfragen stellen müssen, verwenden Sie cURL. Wir müssen oft verschiedene Dateien aus dem Internet herunterladen, zum Beispiel ausführbare Programmdateien, Skriptdateien, Quellarchive. Dies muss jedoch nicht immer über den Browser erfolgen. In vielen Situationen ist es viel einfacher, alle Aktionen über das Terminal durchzuführen. Denn so können Sie den Prozess automatisieren. Andererseits müssen Webmaster von Zeit zu Zeit die Barrierefreiheit der Website testen, gesendete und empfangene Header überprüfen und vieles mehr. Um solche Probleme und Probleme ähnlicher Größenordnung zu lösen, können Sie das Curl-Dienstprogramm verwenden. Damit können Sie ein viel größeres Spektrum an Problemen lösen und sogar Benutzeraktionen auf der Website simulieren. In diesem Artikel werden wir uns mit der Verwendung von Curl befassen, was es ist und warum dieses Programm benötigt wird. Tatsächlich ist Curl mehr als nur ein Befehlszeilenprogramm für Linux oder Windows. Hierbei handelt es sich um eine Reihe von Bibliotheken, die die grundlegenden Funktionen für die Arbeit mit URL-Seiten und die Übertragung von Dateien implementieren. Die Bibliothek unterstützt die Arbeit mit Protokollen: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP sowie POP3, IMAP und SMTP. Es eignet sich hervorragend zum Simulieren von Benutzeraktionen auf Seiten und anderen Vorgängen mit URLs. Unterstützung für die Curl-Bibliothek wurde vielen verschiedenen Programmiersprachen und Plattformen hinzugefügt. Das Dienstprogramm „curl“ ist ein unabhängiger Wrapper für diese Bibliothek. Auf dieses Dienstprogramm konzentrieren wir uns in diesem Artikel. Bevor wir mit der Beschreibung der Verwendung des Befehls „curl linux“ fortfahren, werfen wir einen Blick auf das Dienstprogramm selbst und seine wichtigsten Optionen, die wir benötigen. Die Syntax des Dienstprogramms ist sehr einfach: Link zu $ Curl-Optionen Schauen wir uns nun die wichtigsten Optionen an: Dies sind keineswegs alle Optionen für Curl Linux, aber es listet die Grundlagen auf, die Sie verwenden müssen. Wir haben alles behandelt, was mit der Theorie der Arbeit mit dem Curl-Dienstprogramm zu tun hat. Jetzt ist es an der Zeit, mit der Praxis fortzufahren und Beispiele für den Curl-Befehl anzusehen. Die häufigste Aufgabe ist diese. Das Herunterladen der Datei ist sehr einfach. Übergeben Sie dazu einfach den Dateinamen oder die HTML-Seite in den Parametern an das Dienstprogramm: Curl https://raw.githubusercontent.com/curl/curl/master/README.md Doch hier erwartet Sie eine Überraschung: Der gesamte Inhalt der Datei wird an die Standardausgabe gesendet. Um es in eine beliebige Datei zu schreiben, verwenden Sie: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md Und wenn Sie möchten, dass die resultierende Datei denselben Namen wie die Datei auf dem Server erhält, verwenden Sie die Option -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 Bei Bedarf können Sie mehrere Dateien mit einem Befehl herunterladen: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Für einen Administrator kann es auch nützlich sein, eine Datei nur dann herunterzuladen, wenn sie geändert wurde: curl -z 21.12.17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Mit der Option -Y können Sie die Download-Geschwindigkeit auf das erforderliche Limit begrenzen, um das Netzwerk nicht zu überlasten: curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Hier müssen Sie die Anzahl der Kilobyte pro Sekunde angeben, die heruntergeladen werden können. Sie können die Verbindung auch beenden, wenn die Geschwindigkeit nicht ausreicht. Verwenden Sie dazu die Option -Y: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ Oder prüfen wir, ob die Datei über HTTP gesendet wird; dafür gibt es einen speziellen Dienst: curl -T ~/login.txt http://posttestserver.com/post.php In der Antwort teilt Ihnen das Dienstprogramm mit, wo Sie die heruntergeladene Datei finden können. Mit der POST-Methode können Sie nicht nur Dateien, sondern beliebige Daten versenden. Ich möchte Sie daran erinnern, dass diese Methode zum Senden von Daten unterschiedlicher Form verwendet wird. Um eine solche Anfrage zu senden, verwenden Sie die Option -d. Zum Testen nutzen wir denselben Service: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Wenn Sie mit dieser Übermittlungsoption nicht zufrieden sind, können Sie so tun, als würden Sie das Formular abschicken. Dafür gibt es eine Option -F: curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php Hier übergeben wir das Passwortfeld mit dem Formular als Klartext, genauso wie Sie mehrere Parameter übergeben können. Cookies werden von Websites verwendet, um bestimmte Informationen auf der Benutzerseite zu speichern. Dies kann beispielsweise zur Authentifizierung erforderlich sein. Sie können Cookies mit Curl senden und empfangen. Um die empfangenen Cookies in einer Datei zu speichern, verwenden Sie die Option -c: curl -c cookie.txt http://posttestserver.com/post.php Anschließend können Sie den Curl-Cookie zurücksenden: curl -b cookie.txt http://posttestserver.com/post.php Wir benötigen nicht immer unbedingt den Inhalt der Seite. Manchmal können nur die Schlagzeilen interessant sein. Um nur diese anzuzeigen, gibt es die Option -I: curl -I https://site Und mit der Option -H können Sie mehrere oder mehr an den Server senden. Sie können beispielsweise den If-Modified-Since-Header übergeben, sodass die Seite nur zurückgegeben wird, wenn sie geändert wurde: Wenn der Server eine der gängigen Authentifizierungsarten wie HTTP Basic oder FTP erfordert, kann Curl diese Aufgabe sehr einfach bewältigen. Um Authentifizierungsdetails anzugeben, geben Sie diese einfach durch einen Doppelpunkt getrennt in der Option -u an: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt Die Authentifizierung auf HTTP-Servern erfolgt auf die gleiche Weise. Wenn Sie zum Herunterladen von Dateien einen Proxyserver verwenden müssen, ist das ebenfalls sehr einfach. Es reicht aus, die Proxy-Server-Adresse in der Option -x anzugeben: curl -x Proxysever.test.com:3128 http://google.co.in In diesem Artikel haben wir uns mit der Verwendung von Curl befasst, warum dieses Dienstprogramm benötigt wird und welche Hauptfunktionen es bietet. Trotz ihrer Ähnlichkeit sind sie sehr unterschiedlich. Der Befehl „curl linux“ ist eher für die Analyse und Simulation verschiedener Aktionen auf dem Server konzipiert, während „wget“ eher zum Herunterladen von Dateien und zum Crawlen von Websites geeignet ist. In diesem Artikel geht es um ein so leistungsstarkes Tool wie cURL sowie um die Bibliothek für PHP, die den Zugriff auf dieses Tool ermöglicht – libcurl. Wozu dient das alles? Zur Kommunikation mit dem Server über Datenübertragungsprotokolle, zum Beispiel http oder ftp. Der Rest der Protokolle ist für uns nicht besonders interessant; wer tiefer in dieses Thema eintauchen möchte, muss englischsprachige Ressourcen ausgraben, und dieser Artikel wird die Grundlagen und Anwendungsbeispiele enthalten. Die libcurl-Bibliothek bietet uns also die Möglichkeit, Daten an den Server zu übertragen und Antworten von diesem zu empfangen. Was bringt uns das? Die Fähigkeit, Benutzerverhalten zu emulieren oder! Sie können den Inhalt von Seiten zum späteren Parsen empfangen, Sie können Service-Antwort-Header empfangen und sich programmgesteuert bei Websites anmelden, Skripte zum Posten von Nachrichten (z. B. auf Twitter oder in Foren) oder Informationen erstellen. Alles ist nur durch Ihre Vorstellungskraft begrenzt! Als erstes müssen wir die Bibliothek installieren. Auf meinem lokalen Computer verwende ich den Denwer-Build, wie die überwiegende Mehrheit der unerfahrenen Webmaster, für die der Artikel gedacht ist. Erfahrene Benutzer, die die PHP+Apache+MySQL-Kombination selbstständig installieren, können cURL installieren. Es ist nicht meine Aufgabe, ihnen zu erklären, wie das geht;) Und wir Anfänger verwenden vorgefertigte Lösungen, um es einfacher zu machen. Installieren Sie libcurl daher wie folgt: und entfernen Sie das Semikolon am Anfang der Begriffe: ;extension=php_curl.dll Bereit. Um die Funktionalität der Bibliothek zu überprüfen, können Sie die Funktion phpinfo() aufrufen und dort die Zeile finden: cURL-Unterstützung aktiviert. Herzlichen Glückwunsch zum ersten Sieg. Um mit dem Tool arbeiten zu können, muss es initialisiert werden. Dies geschieht wie folgt: $ch = curl_init(); Wir haben die cURL-Sitzungsinitialisierungsfunktion verwendet. In diesem Fall können Sie die URL gleich wie folgt festlegen: $ch = curl_init("https://site"); Und Sie können dies später in den Optionen tun. Die Reihenfolge, in der die Optionen installiert werden, spielt keine Rolle. Dies erledigt eine weitere Funktion: Curl_setopt (Ressource ch, String-Option, gemischter Wert) Wir haben den ersten Parameter dieser Funktion, nämlich die Ressource ch, bereits direkt oben erstellt, es gibt jedoch viele Options- und Wertparameter. Ich denke, dass Sie sie hier nicht alle kopieren und einfügen sollten, sondern einfach einen Link zu einer detaillierten Beschreibung der Funktion angeben sollten. Ich hoffe, dass niemand beleidigt ist: curl_setopt. Ich gebe ein Beispiel für Einstellungsoptionen am Beispiel einer URL: $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); Noch ein paar Beispiele für Einstellungsoptionen: Lassen Sie uns den Server-Antwortheader abrufen, ohne die Seite selbst abzurufen: Curl_setopt($ch, CURLOPT_HEADER, 1); // Den Header lesen curl_setopt($ch, CURLOPT_NOBODY, 1); // NUR den Header ohne den Text lesen Wir haben also die Sitzung initialisiert, die benötigten Parameter eingestellt, jetzt führen wir die resultierende Anfrage aus, schließen die Sitzung und zeigen das Ergebnis an: $result = curl_exec($ch); curl_close($ch); echo $result; Als Ergebnis erhalten wir unser erstes voll funktionsfähiges Beispiel für die Verwendung der libcurl-Bibliothek: $ch = curl_init(); $url = "https://site"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // Den Header lesen curl_setopt($ch, CURLOPT_NOBODY, 1); // NUR den Header ohne den Text lesen $result = curl_exec($ch); curl_close($ch); echo $result; Wie es funktioniert, ist hoffentlich klar, da wir uns jeden Schritt einzeln angesehen haben :) Als Ergebnis erhalten wir vom Server einen HTTP-Antwortheader, den wir im Folgenden auf jeden Fall analysieren werden, um alle Phasen der Interaktion zwischen ihnen besser zu verstehen der Browser und der Server: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Fabelhaft! Wir haben den Antwortheader vom Server erhalten und die Bibliothek in Aktion getestet. Wie nützlich ist das für uns? Denn jetzt können Sie sich den Handlungsablauf bei der Arbeit mit cURL ungefähr vorstellen: Ich habe zum Beispiel die Seite ya.ru aufgerufen und mir die generierte Browseranfrage und die vom Server erhaltene Antwort angesehen. Hier sind sie: Ich glaube, nachdem einige allgemeine Punkte bereits klar sind und alles klar zu sein scheint, ist es an der Zeit, mit dem Üben fortzufahren und Ihre Fähigkeiten anhand von Beispielen zu verfeinern. Persönlich juckt es mich immer in den Händen, alles in der Praxis auszuprobieren :) Da cURL für Parser sehr gut geeignet ist, betrachten wir die Funktion, den Seitencode anhand seiner Adresse abzurufen. In diesem Fall ist die Ausgabe ein Array mit dem Titel, dem Seiteninhalt und sogar Fehlercodes, falls etwas schief geht. Funktion 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); // gibt die Webseite zurück curl_setopt($ch, CURLOPT_HEADER, 0); // gibt keine Header zurück curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // folgt Weiterleitungen curl_setopt($ch, CURLOPT_ENCODING, ""); // Prozesse alle Kodierungen curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // Useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // Verbindungszeitlimit curl_setopt($ch, CURLOPT_TIMEOUT, 120); // Antwortzeitlimit curl_setopt($ch, CURLOPT_MAXREDIRS , 10); // Stopp nach der 10. Weiterleitung $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; ) Eingabeparameter: Wir verwenden die Funktion beispielsweise so: $result = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["content "]; echo $page; ) Alles sollte fehlerfrei ablaufen und Sie erhalten den Seitencode in der Variablen $page. Wenn wir versuchen, die nicht existierende Seite yaaaaaaaaaaaa.ru abzurufen, erhalten wir die Fehlermeldung: Host konnte nicht aufgelöst werden: yaaaaaaaaaaaa.ru; Host nicht gefunden Alles ist richtig und schön verarbeitet :) JavaScript ist in Ihrem Browser blockiert. Bitte aktivieren Sie JavaScript, damit die Website funktioniert! PHP unterstützt libcurl, eine von Daniel Stenberg erstellte Bibliothek, die es ermöglicht, eine Verbindung zu verschiedenen Servertypen und unter Verwendung verschiedener Protokolle herzustellen. Diese Funktionen wurden in PHP 4.0.2 eingeführt. curl_init – initialisiert eine CURL-Sitzung. Ressource curl_init() Funktion curl_init() Initialisiert eine neue Sitzung und gibt ein CURL-Handle zur Verwendung in den Funktionen , und zurück. Wenn der optionale Parameter URL bereitgestellt wird, erhält die Option CURLOPT_URL den Wert dieses Parameters. Sie können es manuell mit der . installieren. curl_setopt – legt Optionen für die CURL-Übertragung/Übertragung fest. bool curl_setopt(Ressource ch, String-Option, gemischter Wert) Funktion curl_setopt() Legt Optionen für die durch den Parameter identifizierte CURL-Sitzung fest CH. Parameter Möglichkeit ist die Option, die Sie festlegen möchten, und Wert Dies ist der Optionswert Möglichkeit . Parameter Wert muss für die folgenden Optionen lang sein (durch Parameter angegeben). Möglichkeit): Parameter Wert muss eine Zeichenfolge für die folgenden Parameterwerte sein Möglichkeit : Die folgenden Optionen erwarten einen Dateideskriptor, der über die Funktion ermittelt wird fopen() : Parameter Wert long write_callback (resource ch, string data)( ... return strlen($data);) Möglichkeit : Parameter Wert sollte eine Funktion der folgenden Form sein string read_callback (Ressource ch, Ressource fd, lange Länge)() für die folgenden Parameterwerte Möglichkeit : curl_exec – führt eine CURL-Sitzung aus. bool curl_exec(Ressource ch) Diese Funktion sollte aufgerufen werden, nachdem Sie eine CURL-Sitzung initialisiert haben und alle Optionen für diese Sitzung bereits festgelegt wurden. Sein Zweck besteht lediglich darin, eine vordefinierte CURL-Sitzung auszuführen (im Parameter angegeben). CH). curl_close – schließt die CURL-Sitzung. Leere curl_close(Ressource ch) Diese Funktion schließt die CURL-Sitzung und gibt alle Ressourcen frei. CURL-Handle CH wird ebenfalls gelöscht. curl_errno – gibt eine Ganzzahl zurück, die die letzte Fehlernummer enthält. Wenn Sie in einer POST-Anfrage ein mehrdimensionales Array und eine Datei senden müssen, stoßen Sie auf ein unlösbares Problem. Wenn Sie ein mehrdimensionales Array an CURLOPT_POSTFIELDS übergeben, wird die zweite Ebene als Zeichenfolge „Array“ übergeben. Wenn Sie mit http_build_query konvertieren, können Sie die Datei nicht übertragen. Nachfolgend finden Sie eine Funktion zum Kodieren eines zweidimensionalen Arrays mit Dateiladen für Curl, die in beiden älteren Versionen von PHP 5.3, PHP 5.4 und PHP 5.6 funktioniert /** konvertiert ein mehrdimensionales Array mithilfe komplexer Indizes in ein eindimensionales Array und ersetzt das @ im Präfix durch CurlFile zur Verwendung in Curl * @param $inputArray * @param string $inputKey * @return array $requestVars = array ("id" => array( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); wir bekommen: ["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 as $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; ) // check $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); Anwendungsbeispiele für die Verwendung von Curl
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
?>
Anmerkungen
Warum cURL?
cUrl-Grundlagen
// 1. Initialisierung $ch = curl_init(); // 2. Optionen festlegen, einschließlich URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. Ausführen der Anfrage und Empfangen der Antwort $output = curl_exec($ch); // 4. Ressourcen bereinigen curl_close($ch); Bug-Tracking
Informationen zu einer Anfrage abrufen
Redirect-Tracking, abhängig vom Browser
Senden von POST-Anfragen
Hochladen von Dateien
Multi-cURL
Externe Links in WordPress prüfen
Weitere cURL-Funktionen in PHP
HTTP-Authentifizierung
Hochladen per FTP
Verwendung eines Proxys
Rückruffunktionen
Abschluss
Curl-Befehl
Wie verwende ich Curl?
Geschwindigkeitsbegrenzung
Dateien übertragen
Senden von POST-Daten
Senden und Empfangen von Cookies
Header-Übertragung und -Analyse
Curl-Authentifizierung
Verwendung eines Proxys
Schlussfolgerungen
Was genau sind cURL und libcurl? Allgemeine Punkte
Installation von cURL auf Denwer (Denver). Wie fange ich an, libcurl zu verwenden?
Beschreibung von cURL und erste Schritte
Struktur des HTTP-Anforderungsheaders
Anfrage
GET / HTTP/1.1 – Wir versuchen, die Seite unter / abzurufen, also die Hauptseite im Stammverzeichnis des Ordners. Wir verwenden die Protokollversion 1.1.
Benutzeragent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14— Wir stellen uns dem Server vor, wir sind der Opera-Browser.
Host: ya.ru – Domänenname der angeforderten Ressource.
Akzeptieren: 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 akzeptabler Ressourcenformate.
Akzeptierte Sprache: ru-RU,ru;q=0.9,en;q=0.8— Liste der unterstützten Sprachen.
Akzeptierte Kodierung: gzip, deflate— Unterstützte Kodierungsmethoden.
Cookie: yandexuid=ХХХХХ – Cookies, falls erforderlich.
Verbindung: Keep-Alive – Bitte unterbrechen Sie die Verbindung nicht und bleiben Sie in Kontakt.
Antwort
HTTP/1.1 200 Ok – Wir erhalten eine Antwort mit dem Code 200, was bedeutet, dass alles in Ordnung ist.
Server: nginx – Der Server hat sich vorgestellt – das ist nginx.
Datum: So, 10. März 2013, 14:10:50 GMT– Aktuelles Datum und Uhrzeit auf dem Server.
Inhaltstyp: text/html; Zeichensatz=UTF-8— Inhaltstyp und Kodierung.
Verbindung: schließen – Der Server möchte keine dauerhafte Verbindung mit uns aufrechterhalten und schließt diese daher sofort. Bei der nächsten Anfrage wird eine neue Verbindung aufgebaut.
Cache-Kontrolle: kein Cache, kein Speichern, maximales Alter = 0, erneut validieren— Caching-Verwaltung. In diesem Fall ist es deaktiviert.
Läuft ab: So, 10. März 2013, 14:10:50 GMT— Datum des voraussichtlichen Ablaufs der Sitzung. In unserem Fall stimmt es mit der Öffnungszeit überein, da der Server es sofort nach der Verarbeitung geschlossen hat.
Zuletzt geändert: So, 10. März 2013 14:10:50 GMT— Zeitpunkt der letzten Änderung.
Inhaltskodierung: gzip – Methode zur Kodierung von Informationen.
Eine vollständige Liste aller Parameter, die im HTTP-Request-Header zu finden sind, finden Sie auf Wikipedia.
Jetzt haben Sie eine ungefähre Vorstellung davon, wie Ihr Browser und Ihr Webserver miteinander kommunizieren. Dies ist sehr nützlich zu wissen und zu verstehen, da wir versuchen werden, Browseraktionen mithilfe der libcurl-Bibliothek zu emulieren. Fortfahren.Beispiel für die Arbeit mit der Bibliothek
URL – Seiten- oder Site-Adresse.
Ausgabeparameterwerte (Array mit drei Elementen):
header['errno'] – wenn etwas schief gelaufen ist, wird hier ein Fehlercode angezeigt.
header[‘errmsg’] – hier erscheint der Fehlertext.
header['content'] – die eigentliche Seite\Datei\Bild usw.
Anschließend können Sie mit dem Seitencode machen, was Sie wollen, ihn beispielsweise mit regulären Ausdrücken analysieren. Aber das ist alles in den nächsten Lektionen, aber jetzt hören wir damit auf.Locken
libcurl unterstützt derzeit die Protokolle http, https, ftp, gopher, telnet, dict, file und ldap.
libcurl unterstützt außerdem HTTPS-Zertifikate, HTTP POST, HTTP PUT, FTP-Upload (dies kann auch mit der FTP-PHP-Erweiterung durchgeführt werden), HTTP-Formular-Upload, Proxys, Cookies und Benutzer+Passwort-Authentifizierung.curl_init
Beschreibung
curl_setopt
Beschreibung
curl_exec
Beschreibung
curl_close
Beschreibung
curl_errno
Beschreibung
Beispiel 1: Initialisieren einer neuen CURL-Sitzung und Abrufen einer Webseite.
Beispiel 2: Verwenden des CURL-Moduls von PHP, um example.com abzurufen
Beispiel 3: Überprüfen der URL-Zugänglichkeit mit CURL von PHP
Beispiel 4: Trennen des Headers vom Body, der mit PHPs CURL erhalten wurde
Beispiel 5: Ermitteln einer Verweis-URL mithilfe von PHPs CURL
das Problem: curl_setopt($ch,FOLLOW_LOCATION,1); Der Fehler: Probleme mit open_basedir und Safe_mode. Die Lösung: Eine Funktion, die bereits von jemandem entwickelt wurde. Die Lösung Nr. 2: Dieselbe Funktion, modifiziert, funktioniert bei mir hervorragend.= $curl_max_loops) ( $curl_loops = 0; return FALSE; ) curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); list($header, $data) = explosion("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(trim (array_pop($matches))); if (!$url) ( //konnte die URL nicht verarbeiten, um zu $curl_loops = 0; return $data; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; if (!$url["scheme"]) $url["scheme"] = $last_url["scheme"]; if (!$url["host"]) $url["host"] = $last_url[ "host"]; if (!$url["path"]) $url["path"] = $last_url["path"]; $new_url = $url["scheme"] . "://" . $ url["host"] . $url["path"] . ($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("Redirecting to", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
Verwenden Sie diese Funktion einfach ohne de FOLLOW_LOCATION und sollte funktionieren. Das Problem bestand darin, dass, wenn Sie zu der Zeile gelangen, in der Sie die Daten zurückgeben, wenn http_code anders als 301 oder 302 war, $data veraltete oder keine Informationen enthält. also erledigt $debbbb den Job. Beispiel 6: Parsen eines Cookies aus dem Header mit CURL PHP
Manchmal können Sie CURLOPT_COOKIEJAR und CURLOPT_COOKIEFILE aufgrund der PHP-Einstellungen des Servers nicht verwenden (Sie sagen, dass Sie mit diesen Optionen alle Dateien vom Server abrufen können). Hier ist die Lösung: 1) Verwenden Sie CURLOPT_FOLLOWLOCATION nicht. 2) Verwenden Sie curl_setopt($ch, CURLOPT_HEADER, 1) 3) Rufen Sie die Header-Cookies wie folgt ab: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results); 4)Setzen Sie sie mit curl_setopt($ch, CURLOPT_COOKIE, $cookies); Beispiel 7: Parsen eines Cookies aus dem Header mit CURL PHP
Wie Yevgen bereits erwähnt hat, können wir CURLOPT_COOKIEJAR und CURLOPT_COOKIEFILE manchmal nicht verwenden. Nachfolgend finden Sie eine Header-Callback-Funktion, die ich im Januar geschrieben habe und mit der Sie Cookies zwischen cURL-Anfragen verwalten können. Cookies werden bei allen Anfragen zu $ch hinzugefügt, auch während der Umleitung, sodass Sie dies können Verwenden Sie es zusammen mit CURLOPT_FOLLOWLOCATION. Hier ist der Code: function read_header($ch, $string) ( global $location; #Standort verfolgen/weiterleiten global $cookiearr; #cookies hier speichern global $ch; # ^überschreibt den Funktionsparameter $ch # das ist in Ordnung, weil wir # das globale $ch mit # neuen Cookies aktualisieren müssen $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #den Überblick behalten letzte Weiterleitung $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #get the cookie $cookiestr = trim(substr( $string, 11, -1)); $cookie = explosion(";", $cookiestr); $cookie = explosion("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #execute only at end of header foreach ($cookiearr as $key=>$value) ( $cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) return $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Dieser Code geht davon aus, dass Sie $ch wiederverwenden, ohne es jedes Mal zu initialisieren (rufen Sie „curl_init“ am Anfang nur einmal auf). Wenn Sie $ch zu irgendeinem Zeitpunkt in Ihrem Code erneut initialisieren müssen, können Sie auf die aktuell in $cookiearr gespeicherten Cookies zugreifen und sie in das neue $ch einbinden. Ich habe diese Funktion geschrieben, bevor ich genug Erfahrung mit regulären Ausdrücken hatte, sodass Sie hier keine preg_match-Aufrufe finden. Ich habe diesen Code eine ganze Weile verwendet und ohne Probleme beim Zugriff auf Gmail, Yahoo, Hotmail, AOL usw., wo ich musste Gehen Sie die Anmeldung und einige Seiten durch, bevor Sie zu dem gelangen, wonach ich gesucht habe. Beispiel 8: Einrichten eines Header-Load-Handlers mit CURL PHP
Mit cURL musste ich ein Drittanbieter-Skript aufrufen, das Binärdaten als Anhang zurückgab, um die abgerufenen Daten erneut als Anhang weiterzugeben. Das Problem bestand darin, dass das Drittanbieter-Skript gelegentlich HTTP-Fehler zurückgab und ich in solchen Fällen vermeiden wollte, Anhänge mit der Länge Null weiterzugeben. Die Kombination aus der Verwendung von CURLOPT_FAILONERROR und CURLOPT_HEADERFUNCTION Callback hat dazu beigetragen, die HTTP-Fehler des Drittanbieter-Skripts sauber zu verarbeiten: function curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader)) ( header($strHeader ); header("Content-Disposition: attachment; filename="file-name.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://site/"); curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1); curl_setopt($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); curl_setopt($resURL, CURLOPT_FAILONERROR, 1); curl_exec($resURL); $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE); curl_close($resURL); if ($intReturnCode != 200) ( print "Fehler mit Code: " . $intReturnCode; ) Beispiel 9. Speichern einer Seite in einer Datei und Berechnen der Übertragungsrate mit CURL PHP
WritePageToFile("http://es.php.net", "es.php.net.txt"); function WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_HEADER, 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); echo " "; echo "Durchschnittliche Downloadgeschwindigkeit == " . $sAverageSpeedDownload . "
"; curl_close($sh); FClose ($hFile); echo "( Sehen Sie sich die Datei „.$sTxtfile.“ im gleichen Pfad des Hostings an, in dem sich dieses PHP-Skript befindet).
"; echo "Durchschnittliche Upload-Geschwindigkeit == " . $sAverageSpeedUpload ."
"; Echo "
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Beispiel 9. Empfangen einer Seite über eine SSL-Verbindung (https)
$ch=curl_init("https://site"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Deaktivieren Sie den Fehler „SSL-Zertifikatproblem, überprüfen Sie, ob das CA-Zertifikat in Ordnung ist“ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Deaktivieren Sie den Fehler „SSL: Zertifikatssubjektname „hostname.ru“ stimmt nicht mit dem Zielhostnamen „123.123“ überein“ 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); Beispiel 10: Verwendung von Sitzungen und Cookies in Curl
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://site"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//empfangene COOKIES in einer Datei speichern curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //sende die von ihm während der Autorisierung erhaltenen COOKIES an den Server $out=curl_exec($curl); Beispiel 11: Datei-Upload und mehrdimensionales Array in Curl. CURLOPT_POSTFIELDS + CurlFile