Heute werden wir die cURL-Erweiterung in PHP erkunden, mit der Sie HTTP-Anfragen aus Code stellen können.
Bei der täglichen PHP-Entwicklung müssen Sie häufig mit externen Websites kommunizieren. Unabhängig davon, ob Sie eine REST-API eines Drittanbieters aufrufen, um Daten abzurufen, oder Ressourcen von einer externen Website herunterladen, benötigen Sie eine Bibliothek, die dies problemlos tun kann.
In PHP können Sie verschiedene Methoden verwenden, um eine Verbindung zu verschiedenen Servertypen herzustellen und mit ihnen zu kommunizieren. Eine der einfachsten Möglichkeiten besteht darin, die Funktion file_get_contents
zum Lesen einer Remote-Datei zu verwenden. Andererseits können Sockets auch zur Kommunikation zwischen Client und Server verwendet werden. In diesem Artikel werden wir cURL-Erweiterungen jedoch ausführlich anhand praktischer Beispiele besprechen.
cURL steht für Client URL und ist eine Bibliothek, die es Ihnen ermöglicht, Informationen mithilfe der URL-Syntax zu senden und zu empfangen. Tatsächlich nutzt es die von Daniel Stenberg erstellte libcurl-Bibliothek, die es Ihnen ermöglicht, über viele verschiedene Protokolltypen eine Verbindung zu vielen verschiedenen Servertypen herzustellen und mit ihnen zu kommunizieren. Zusätzlich zu HTTP und HTTPS unterstützt die libcurl-Bibliothek Protokolle wie FTP, Gopher, Telnet, DICT, File und LDAP.
Ab dem nächsten Abschnitt zeigen wir Ihnen anhand einiger praktischer Beispiele, wie Sie die cURL-Funktion in PHP verwenden.
In diesem Abschnitt erstellen wir Beispiele aus der Praxis, um verschiedene cURL-Funktionen in PHP zu demonstrieren.
Das Lesen oder Herunterladen von Remote-Dateien ist einer der häufigsten Anwendungsfälle für cURL. Dies geschieht über eine cURL-GET-Anfrage, die wir in diesem Abschnitt besprechen werden.
Erstellen Sie die Datei curl_read_file.php mit dem folgenden Inhalt.
<?php $url = 'https://www.example.com'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); $data = curl_exec($curl); curl_close($curl);
Im obigen Beispiel verwenden wir die cURL-Funktion, um die Homepage der Domain example.com zu lesen. Sehen wir uns die wichtigen Ausschnitte an, um zu verstehen, wie es funktioniert.
Zuerst verwenden wir die Funktion curl_init
函数来初始化一个新的 cURL 会话。 $curlHandle
变量保存了一个 cURL 句柄,我们可以借助 curl_setopt
, um verschiedene Optionen für die cURL-Übertragung festzulegen.
Wenn Sie cURL verwenden, ist die häufigste Funktion, die Sie verwenden, der Wert der Option curl_setopt
函数,因为它允许您初始化各种 CURLOPT_*
请求选项。 curl_setopt
函数采用三个参数:cURL 句柄、CURLOPT_XXX
选项以及 CURLOPT_XXX
.
Als nächstes verwenden wir CURLOPT_URL
选项通过 curl_setopt
函数将请求 URL 设置为 example.com
。此外,我们将 CURLOPT_RETURNTRANSFER
选项设置为 TRUE
,因为我们希望将响应初始化到 $responseData
变量中。如果我们不将其设置为 TRUE
,则响应将直接显示在屏幕上。最后,我们将 CURLOPT_HEADER
选项设置为 FALSE
, um Header-Informationen in der Ausgabe zu überspringen.
Schließlich verwenden wir den curl_exec
函数来执行 cURL 请求。如果一切顺利,$responseData
变量应该包含 example.com
Quellcode der Homepage.
In diesem Abschnitt erfahren Sie, wie Sie Daten mit cURL veröffentlichen.
Lassen Sie uns die Datei curl_post_example.php mit dem folgenden Inhalt erstellen.
<?php $url = '{POST_REST_ENDPOINT}'; $curl = curl_init(); $fields = array( 'field_name_1' => 'Value 1', 'field_name_2' => 'Value 2', 'field_name_3' => 'Value 3' ); $fields_string = http_build_query($fields); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string); $data = curl_exec($curl); curl_close($curl);
Im obigen Beispiel gehen wir davon aus, dass die Anfrage mit der HTTP-POST-Methode übermittelt werden muss. Tatsächlich funktioniert es ähnlich wie das Absenden eines Formulars mit der POST-Methode.
$fields
变量包含我们需要作为 POST 数据提交的值数组。接下来,我们使用 http_build_query
Funktion zum Vorbereiten einer URL-codierten Abfragezeichenfolge.
Als nächstes legen wir die CURLOPT_POST
选项设置为 TRUE
以将请求方法设置为 HTTP POST。此外,我们需要使用 CURLOPT_POSTFIELDS
-Optionen fest, um die POST-Daten festzulegen, die wir mit der Anfrage übermitteln möchten.
Schließlich verwenden wir die Funktion curl_exec
, um die cURL-Anfrage auszuführen. Dadurch können Sie eine cURL-POST-Anfrage stellen.
Normalerweise müssen Sie JSON-Daten in einer cURL-POST-Anfrage übermitteln. In diesem Abschnitt erfahren Sie, wie Sie JSON-Daten mithilfe der POST-Methode in einer cURL-Anfrage übermitteln.
Da es sich um eine POST-Anfrage handelt, ändern wir das im vorherigen Abschnitt besprochene Beispiel. Machen Sie weiter und erstellen Sie die Datei curl_post_json.php mit dem folgenden Inhalt.
<?php $url = '{POST_REST_ENDPOINT}'; $curl = curl_init(); $fields = array( 'field_name_1' => 'Value 1', 'field_name_2' => 'Value 2', 'field_name_3' => 'Value 3' ); $json_string = json_encode($fields); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true ); $data = curl_exec($curl); curl_close($curl);
Obwohl es dem Beispiel im vorherigen Abschnitt ähnelt, ist es wichtig, dass wir den JSON-String mithilfe eines json_encode
函数从 $fields
-Arrays erstellen.
接下来,我们使用 CURLOPT_HTTPHEADER
选项将 Content-Type
标头设置为 application/json
以通知 API 服务器我们正在发送 JSON 数据。 Content-Type
标头对于以不同格式发布数据非常有用。例如,如果您想发送 XML 数据,则必须将 Content-Type
标头设置为 application/xml
。
除此之外,它与常规 POST 请求几乎相同。所以这样一来,就可以通过设置适当的 Content-Type
header 来发布不同类型的数据。如果您不设置 Content-Type
标头,它将使用 application/x-www-form-urlencoded
作为默认值。
在本节中,我们将讨论如何使用 cURL 上传文件。
让我们创建包含以下内容的 curl_post_file.php 文件。
<?php $url = '{POST_REST_ENDPOINT}'; $curl = curl_init(); if (function_exists('curl_file_create')) { $fileAttachment = curl_file_create('/absolute/path/to/file/'); } else { $fileAttachment = '@' . realpath('/absolute/path/to/file/'); } $fields = array( 'field_name_1' => 'Value 1', 'field_name_2' => 'Value 2', 'field_name_3' => 'Value 3', 'uploaded_file' => $fileAttachment ); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $fields); curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); $data = curl_exec($curl); curl_close($curl);
当你要上传文件时,你需要首先创建一个 CURLFile
对象。从 PHP 5.5+ 开始,创建它相当容易,因为您只需要使用 curl_file_create
函数来创建 CURLFile
对象。 curl_file_create
函数的第一个参数是要上传的文件的绝对路径。
如果您仍在使用较旧的 PHP 版本(不推荐),我们已使用后备 '@' 。 realpath('/absolute/path/to/file/')
语法创建文件链接。
最后,我们将 Content-Type
标头设置为 multipart/form-data
,因为它将是一个多部分表单 POST 请求。除此之外,这是一个例行的 cURL POST 请求。
到目前为止,我们已经了解了 PHP 中经常使用的几种不同的 cURL 方法。在下一节中,我们将了解如何使用 Guzzle 库,它使您在 PHP 中处理 HTTP 请求时变得更加轻松。
根据官方文档:
Guzzle 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求,并且可以轻松地与 Web 服务集成。
让我们快速了解一下使用 Guzzle 相对于 cURL PHP 函数的优势:
总而言之,当您想使用不同的方法进行 HTTP 调用时,它是最好的库之一。在本节中,我们将讨论如何安装 Guzzle,然后通过几个快速示例来演示该库的强大功能!
官方文档建议您使用Composer来安装Guzzle。让我们运行以下命令在您的项目中安装 Guzzle。
$composer require guzzlehttp/guzzle:^7.0 ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 6 installs, 0 updates, 0 removals - Installing psr/http-message (1.0.1): Loading from cache - Installing psr/http-client (1.0.1): Loading from cache - Installing ralouphie/getallheaders (3.0.3): Loading from cache - Installing guzzlehttp/psr7 (1.7.0): Loading from cache - Installing guzzlehttp/promises (1.4.1): Loading from cache - Installing guzzlehttp/guzzle (7.2.0): Loading from cache guzzlehttp/psr7 suggests installing laminas/laminas-httphandlerrunner (Emit PSR-7 responses) guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware) Writing lock file Generating autoload files
安装后,您需要使用 Composer 的自动加载器,如以下代码片段所示。
require 'vendor/autoload.php';
这样,您就可以使用 Guzzle 了!
在本节中,我们将了解如何使用 Guzzle 发送 GET 请求。
我们将修改之前讨论的示例,因为它将帮助您了解如何将现有的 cURL PHP 代码转换为基于 Guzzle 的实现。
让我们看一下修改后的示例。
<?php require 'vendor/autoload.php'; $client = new \GuzzleHttp\Client(); $response = $client->get('https://example.com'); $responseContents = $response->getBody();
是不是很简单呢?我们创建了 \GuzzleHttp\Client
类的实例,并将其分配给 $client
变量。现在,您可以访问 \GuzzleHttp\Client
类提供的大量实用方法。
在我们的例子中,我们需要使用 GET 方法获取内容,因此我们使用了 \GuzzleHttp\Client
类的 get
方法,它将返回 GuzzleHttp\Psr7\Response
对象。 GuzzleHttp\Psr7\Response
对象提供了各种方法,如 getStatusCode
、getBody
、getReasonPhrase
等。我们使用 getBody
方法来获取响应正文内容。
这就是您如何使用 Guzzle 执行 HTTP GET 请求。
在本节中,我们将了解如何使用 Guzzle 执行 HTTP POST 请求。
我们将修改我们在前面部分中讨论过的 curl_post_example.php 示例。使用 Guzzle 修改后的代码如下所示。
<?php require 'vendor/autoload.php'; $client = new \GuzzleHttp\Client(); $options = [ 'form_params' => [ "field_name_1" => "Value 1", "field_name_2" => "Value 2", "field_name_3" => "Value 3", ] ]; $response = $client->post("{POST_REST_ENDPOINT}", $options); $responseContents = $response->getBody(); ?>
由于这是一个 POST 请求,因此我们需要传递 $options
数组作为 post
方法的第二个参数。在我们的示例中,它包含我们需要作为 POST 数据提交的表单数据。
如果您想知道如何发送 JSON 数据,只需将 form_params
键更改为 json
,数据就会以 JSON 形式发送!
此外,如果您想随请求一起发送任何 HTTP 标头,您可以使用 headers
键来完成,如以下代码片段所示。
... ... $headers = array( 'Content-Type' => 'application/json' ); $options = [ 'form_params' => [ "field_name_1" => "Value 1", "field_name_2" => "Value 2", "field_name_3" => "Value 3", ], ‘headers’ => $headers ]; ... ...
事实上,Guzzle 库为每种方法提供了很多配置选项。此外,做同一件事有多种方法,所以我鼓励您详细探索它,我相信它会很有趣!
这是对 Guzzle 库以及 PHP cURL 函数的快速介绍。
今天,我们探讨了 PHP 中 cURL 扩展的基础知识。我们讨论了如何在 PHP 中使用 cURL 执行不同类型的 HTTP 请求。此外,我们还快速介绍了 Guzzle 库,它使开发人员在 PHP 中处理 HTTP 请求时更加轻松。
Das obige ist der detaillierte Inhalt vonSo verwenden Sie cURL in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!