Heim >Backend-Entwicklung >PHP-Tutorial >Anweisungen zur Verwendung der Funktion „curl_init' in PHP
$ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$type.""; curl_setopt($ch, CURLOPT_URL,$c_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $c_url_data); echo $result = curl_exec($ch); curl_close ($ch); unset($ch);
Dieser Artikel erklärt hauptsächlich das Wissen über die php_curl-Bibliothek und zeigt Ihnen, wie Sie php_curl besser nutzen können.
Einführung
Beim Schreiben von PHP-Skriptcode kann dieses Problem auftreten: Wie erhalte ich Inhalte von anderen Websites? Hier gibt es mehrere Lösungen; die einfachste ist die Verwendung der Funktion fopen() in PHP, aber die Funktion fopen verfügt nicht über genügend Parameter, um sie beispielsweise zu verwenden, wenn Sie einen „Webcrawler“ erstellen und die Clientbeschreibung definieren möchten des Crawlers (IE, Firefox) Inhalte über verschiedene Anforderungsmethoden wie POST, GET usw. abrufen. Diese Anforderungen können mit der Funktion fopen() nicht erfüllt werden.
Um die oben angesprochenen Probleme zu lösen, können wir die PHP-Erweiterungsbibliothek Curl verwenden. Diese Erweiterungsbibliothek ist normalerweise standardmäßig im Installationspaket enthalten. Sie können sie verwenden, um den Inhalt anderer Websites abzurufen oder andere Aufgaben zu erledigen Dinge.
Hinweis: Diese beiden Codeteile erfordern die Unterstützung der php_curl-Erweiterungsbibliothek. Wenn die Curl-Unterstützung aktiviert ist, bedeutet dies, dass die Curl-Bibliothek unterstützt wird.
1. Aktivieren Sie die Curl-Bibliotheksunterstützung für PHP unter Windows:
Öffnen Sie php.ini und entfernen Sie das ;-Zeichen vor extension=php_curl.dll.
2. Aktivieren Sie die Curl-Bibliotheksunterstützung für PHP unter Linux:
Fügen Sie beim Kompilieren von PHP –with-curl nach ./configure hinzu.
In diesem Artikel werfen wir einen Blick auf die Verwendung der Curl-Bibliothek Schauen Sie sich die anderen Verwendungsmöglichkeiten an, aber als nächstes müssen wir mit der grundlegendsten Verwendung beginnen
Grundlegende Verwendung:
Im ersten Schritt erstellen wir eine neue Curl-Sitzung über die Funktion curl_init(), der Code lautet wie folgt :
<?php // create a new curl resource $ch = curl_init(); ?>
Wir haben erfolgreich eine Curl-Sitzung erstellt. Wenn wir den Inhalt einer URL abrufen müssen, besteht der nächste Schritt darin, eine URL an die Funktion „curl_setopt()“ zu übergeben, Code:
<?php // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); ?>
Nach Abschluss des vorherigen Schritts ist die Curl-Vorbereitungsarbeit abgeschlossen. Curl ruft den Inhalt der URL-Site ab und druckt ihn aus. Code:
<?php // grab URL and pass it to the browser curl_exec($ch); ?>
Schließen Sie abschließend die aktuelle Curl-Sitzung
<?php //close curl resource, and free up system resources curl_close($ch); ?>
Werfen wir einen Blick auf den fertigen Beispielcode:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); // grab URL and pass it to the browser curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); ?>
Wir haben gerade den Inhalt von einer anderen Website erhalten und ihn automatisch an den Browser ausgegeben. Gibt es für uns eine andere Möglichkeit, die erhaltenen Informationen zu organisieren und dann den Ausgabeinhalt zu steuern? Es gibt überhaupt kein Problem. Wenn Sie den Inhalt abrufen, aber nicht ausgeben möchten, verwenden Sie den Parameter CURLOPT_RETURNTRANSFER und setzen Sie ihn für den vollständigen Code auf einen Wert ungleich 0 , siehe:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // grab URL, and return output $output = curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); // Replace ‘Google' with ‘PHPit' $output = str_replace('Google', ‘PHPit', $output); // Print output echo $output; ?>
in den beiden oben genannten Beispielen ist Ihnen vielleicht aufgefallen, dass Sie durch Festlegen verschiedener Parameter der Funktion „curl_setopt()“ unterschiedliche Ergebnisse erzielen können. Aus diesem Grund ist „Curl“ leistungsstark Schauen Sie sich die Bedeutung dieser Parameter an.
CURL-bezogene Optionen:
Wenn Sie die Funktion „curl_setopt()“ im PHP-Handbuch gelesen haben, können Sie feststellen, dass sich darunter eine lange Liste von Parametern befindet. Es ist uns unmöglich, sie einzeln vorzustellen. Weitere Informationen finden Sie im PHP-Handbuch. Hier werden nur einige häufig verwendete Parameter und einige Parameter vorgestellt.
Der erste interessante Parameter ist CURLOPT_FOLLOWLOCATION. Wenn Sie diesen Parameter auf true setzen, erhält Curl den Umleitungspfad basierend auf einem beliebigen Umleitungsbefehl. Wenn Sie beispielsweise versuchen, eine PHP-Seite abzurufen, ist ein Sprungcode vorhanden Diese PHP-Seite und Curl erhalten den Inhalt von http://new_url, anstatt den Sprungcode zurückzugeben. Der vollständige Code lautet wie folgt:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // grab URL, and print curl_exec($ch); ?>
Wenn Google eine Weiterleitungsanforderung sendet, ruft das obige Beispiel weiterhin Inhalte basierend auf der umgeleiteten URL ab. Die beiden mit diesem Parameter verbundenen Optionen sind CURLOPT_MAXREDIRS und CURLOPT_AUTOREFERER
Mit der Parameteroption CURLOPT_MAXREDIRS können Sie die maximale Anzahl von Sprunganforderungen definieren, nach denen der Inhalt nicht mehr abgerufen wird. Wenn CURLOPT_AUTOREFERER auf true gesetzt ist, fügt Curl automatisch den Referer-Header zu jedem Sprunglink hinzu. Dies ist möglicherweise nicht sehr wichtig, aber in bestimmten Fällen sehr nützlich.
Der nächste eingeführte Parameter ist CURLOPT_POST. Dies ist eine sehr nützliche Funktion, da sie es Ihnen ermöglicht, eine POST-Anfrage anstelle einer GET-Anfrage zu stellen, was im Wesentlichen bedeutet, dass Sie
andere Formen der Seite senden können, was eigentlich nicht nötig ist Füllen Sie das Formular aus. Hier ist ein Beispiel dafür, was ich meine:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”); // Do a POST $data = array('name' => ‘Dennis', 'surname' => ‘Pallett'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // grab URL, and print curl_exec($ch); ?> And the handle_form.php file: echo ‘Form variables I received:'; echo ‘'; print_r ($_POST); echo ‘'; ?>
Wie Sie sehen, ist es dadurch wirklich einfach, das Formular einzureichen, und es ist eine großartige Möglichkeit, alle Ihre Formulare zu testen, ohne sie ausfüllen zu müssen. Das ist es die ganze Zeit dort.
Der Parameter CURLOPT_CONNECTTIMEOUT wird normalerweise verwendet, um die Zeit festzulegen, zu der Curl versucht, einen Link anzufordern. Dies ist eine sehr wichtige Option. Wenn Sie diese Zeit zu kurz einstellen, kann dies dazu führen, dass die Curl-Anfrage fehlschlägt.
Aber wenn Sie es zu lange einstellen, kann das PHP-Skript abstürzen. Eine mit diesem Parameter verbundene Option ist CURLOPT_TIMEOUT, mit der die Zeit festgelegt wird, die erforderlich ist, damit Curl ausgeführt werden kann. Wenn Sie diesen Wert auf einen sehr kleinen Wert festlegen, kann es sein, dass die heruntergeladenen Seiten unvollständig sind, da der Download eine Weile dauert.
Die letzte Option ist CURLOPT_USERAGENT, mit der Sie den Clientnamen der Anfrage anpassen können, z. B. webspilder oder IE6.0. Der Beispielcode lautet wie folgt:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://sc.jb51.net/”); curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // grab URL, and print curl_exec($ch); ?>
现在我们把最有意思的一个参数都介绍过了,下面我们来介绍一个curl_getinfo() 函数,看看它能为我们做些什么。
获取页面的信息:
函数curl_getinfo()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com”); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FILETIME, true); // grab URL $output = curl_exec($ch); // Print info echo ‘'; print_r (curl_getinfo($ch)); echo ‘'; ?>
大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。
那些全是关于curl_getinfo()函数的,现在让我们看看它的实际用途。
实际用途:
curl库的第一用途可以查看一个URL页面是否存在,我们可以通过查看这个URL的请求返回的代码来判断比如404代表这个页面不存在,我们来看一些例子:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // grab URL $output = curl_exec($ch); // Get response code $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Not found? if ($response_code == ‘404′) { echo ‘Page doesn\'t exist'; } else { echo $output; } ?>
其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。
我们可以用curl库来写和google类似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于如何写一个网页蜘蛛的,因此所以我们没有讲任何关于网页蜘蛛的细节问题,但是以后在PHPit 将会介绍用 curl来构造一个web spider.
结论:
在这篇文章我已经表明,如何使用php中的curl库和其大部分的选项。
为最基本的任务,只想获得一个网页,你可能不会需要CURL库,但是,一旦你想要做任何事情稍微先进的,您可能会想要使用curl库。
在近未来,我会告诉您究竟如何建立自己的网络蜘蛛,类似Google的网络蜘蛛,敬请期待,以phpit。
更多在PHP中使用curl_init函数的说明相关文章请关注PHP中文网!