Rumah >pembangunan bahagian belakang >tutorial php >Cara menggunakan cURL dalam PHP

Cara menggunakan cURL dalam PHP

王林
王林asal
2023-08-31 11:41:181151semak imbas

Cara menggunakan cURL dalam PHP

Hari ini, kami akan meneroka sambungan cURL dalam PHP, yang membolehkan anda membuat permintaan HTTP daripada kod.

Dalam pembangunan PHP harian, anda sering perlu berkomunikasi dengan tapak web luaran. Sama ada anda memanggil API REST pihak ketiga untuk mendapatkan data atau memuat turun sumber daripada tapak web luaran, anda memerlukan perpustakaan yang boleh melakukannya dengan mudah.

Dalam PHP, anda boleh menggunakan kaedah yang berbeza untuk menyambung dan berkomunikasi dengan pelbagai jenis pelayan. Salah satu kaedah paling mudah ialah menggunakan fungsi file_get_contents untuk membaca fail jauh. Sebaliknya, soket juga boleh digunakan untuk berkomunikasi antara pelanggan dan pelayan. Walau bagaimanapun, dalam artikel ini, kami akan membincangkan sambungan cURL secara terperinci dengan contoh praktikal. file_get_contents 函数读取远程文件。另一方面,也可以使用套接字来实现客户端与服务器的通信。不过,在本文中,我们将通过实际示例详细讨论 cURL 扩展。

cURL 代表客户端 URL,它是一个允许您使用 URL 语法发送和接收信息的库。事实上,它利用了 Daniel Stenberg 创建的 libcurl 库,该库允许您使用许多不同类型的协议连接到许多不同类型的服务器并与之通信。除了 HTTP 和 HTTPS 之外,libcurl 库还支持 FTP、Gopher、Telnet、DICT、File 和 LDAP 等协议。

从下一节开始,我们将通过几个实际示例来演示如何在 PHP 中使用 cURL 函数。

现实世界的例子

在本节中,我们将构建真实示例来演示 PHP 中的各种 cURL 函数。

如何在 PHP 中使用 cURL 下载文件

读取或下载远程文件是 cURL 最常见的用例之一。这是通过 cURL GET 请求完成的,我们将在本节中讨论该请求。

继续创建包含以下内容的 curl_read_file.php 文件。

<?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);

在上面的示例中,我们使用 cURL 函数来读取 example.com 域的主页。让我们通过重要的片段来了解它是如何工作的。

首先,我们使用 curl_init 函数来初始化一个新的 cURL 会话。 $curlHandle 变量保存了一个 cURL 句柄,我们可以借助 curl_setopt 函数来设置 cURL 传输的各种选项。

当您使用 cURL 时,您最常使用的函数是 curl_setopt 函数,因为它允许您初始化各种 CURLOPT_* 请求选项。 curl_setopt 函数采用三个参数:cURL 句柄、CURLOPT_XXX 选项以及 CURLOPT_XXX 选项的值。

接下来,我们使用 CURLOPT_URL 选项通过 curl_setopt 函数将请求 URL 设置为 example.com 。此外,我们将 CURLOPT_RETURNTRANSFER 选项设置为 TRUE,因为我们希望将响应初始化到 $responseData 变量中。如果我们不将其设置为 TRUE,则响应将直接显示在屏幕上。最后,我们将 CURLOPT_HEADER 选项设置为 FALSE 以跳过输出中的标头信息。

最后,我们使用 curl_exec 函数来执行 cURL 请求。如果一切顺利,$responseData 变量应该包含 example.com 主页的源代码。

如何在 PHP 中使用 cURL 发布数据

在本节中,我们将了解如何使用 cURL 发布数据。

让我们创建包含以下内容的 curl_post_example.php 文件。

<?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);

在上面的示例中,我们假设需要使用 HTTP POST 方法提交请求。事实上,它的工作原理与使用 POST 方法提交表单类似。

$fields 变量包含我们需要作为 POST 数据提交的值数组。接下来,我们使用 http_build_query 函数来准备 URL 编码的查询字符串。

接下来,我们将 CURLOPT_POST 选项设置为 TRUE 以将请求方法设置为 HTTP POST。此外,我们需要使用 CURLOPT_POSTFIELDS 选项来设置我们要随请求一起提交的 POST 数据。

最后,我们使用 curl_exec 函数来执行 cURL 请求。这样就可以发出cURL POST请求了。

如何在 PHP 中使用 cURL 发布 JSON 数据

通常,您需要在 cURL POST 请求中提交 JSON 数据。在本部分中,我们将了解如何在 cURL 请求中使用 POST 方法提交 JSON 数据。

由于这是一个 POST 请求,我们来修改一下上一节中讨论的示例。继续创建包含以下内容的 curl_post_json.php 文件。

<?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);

尽管它看起来与上一节中的示例类似,但重要的是我们使用 json_encode 函数从 $fields

cURL bermaksud URL Pelanggan dan merupakan perpustakaan yang membolehkan anda menghantar dan menerima maklumat menggunakan sintaks URL. Malah, ia memanfaatkan perpustakaan libcurl yang dicipta oleh Daniel Stenberg, yang membolehkan anda menyambung dan berkomunikasi dengan pelbagai jenis pelayan menggunakan pelbagai jenis protokol. Selain HTTP dan HTTPS, perpustakaan libcurl menyokong protokol seperti FTP, Gopher, Telnet, DICT, Fail dan LDAP. 🎜 🎜Bermula di bahagian seterusnya, kami akan menunjukkan cara menggunakan fungsi cURL dalam PHP dengan beberapa contoh praktikal. 🎜

Contoh dunia sebenar

🎜Dalam bahagian ini, kami akan membina contoh kehidupan sebenar untuk menunjukkan pelbagai fungsi cURL dalam PHP. 🎜

Cara memuat turun fail menggunakan cURL dalam PHP

🎜Membaca atau memuat turun fail jauh ialah salah satu kes penggunaan yang paling biasa untuk cURL. Ini dilakukan melalui permintaan cURL GET, yang akan kita bincangkan dalam bahagian ini. 🎜 🎜Teruskan dan buat fail curl_read_file.php dengan kandungan berikut. 🎜
<?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);
🎜Dalam contoh di atas, kami menggunakan fungsi cURL untuk membaca halaman utama domain example.com. Mari kita lihat coretan penting untuk memahami cara ia berfungsi. 🎜 🎜Pertama, kami menggunakan fungsi curl_init untuk memulakan sesi cURL baharu. Pembolehubah $curlHandle menyimpan pemegang cURL Kita boleh menggunakan fungsi curl_setopt untuk menetapkan pelbagai pilihan untuk penghantaran cURL. 🎜 🎜Apabila anda menggunakan cURL, fungsi yang paling kerap anda gunakan ialah fungsi curl_setopt, kerana ia membolehkan anda memulakan pelbagai pilihan permintaan CURLOPT_*. Fungsi curl_setopt mengambil tiga parameter: pemegang cURL, pilihan CURLOPT_XXX dan nilai pilihan CURLOPT_XXX. 🎜 🎜Seterusnya, kami menggunakan pilihan CURLOPT_URL untuk menetapkan URL permintaan kepada example.com melalui fungsi curl_setopt. Selain itu, kami menetapkan pilihan CURLOPT_RETURNTRANSFER kepada TRUE kerana kami mahu respons dimulakan ke dalam pembolehubah $responseData. Jika kami tidak menetapkannya kepada TRUE, respons akan dipaparkan terus pada skrin. Akhir sekali, kami menetapkan pilihan CURLOPT_HEADER kepada FALSE untuk melangkau maklumat pengepala dalam output. 🎜 🎜Akhir sekali, kami menggunakan fungsi curl_exec untuk melaksanakan permintaan cURL. Jika semuanya berjalan lancar, pembolehubah $responseData harus mengandungi kod sumber untuk halaman utama example.com. 🎜

Cara menyiarkan data menggunakan cURL dalam PHP

🎜Dalam bahagian ini, kita akan belajar cara menerbitkan data menggunakan cURL. 🎜 🎜Mari buat fail curl_post_example.php dengan kandungan berikut. 🎜
$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
🎜Dalam contoh di atas, kami menganggap bahawa permintaan perlu diserahkan menggunakan kaedah HTTP POST. Malah, ia berfungsi sama seperti menghantar borang menggunakan kaedah POST. 🎜 🎜Pembolehubah $fields mengandungi tatasusunan nilai yang perlu kami serahkan sebagai data POST. Seterusnya, kami menggunakan fungsi http_build_query untuk menyediakan rentetan pertanyaan berkod URL. 🎜 🎜Seterusnya, kami menetapkan pilihan CURLOPT_POST kepada TRUE untuk menetapkan kaedah permintaan kepada HTTP POST. Selain itu, kami perlu menggunakan pilihan CURLOPT_POSTFIELDS untuk menetapkan data POST yang ingin kami serahkan bersama permintaan. 🎜 🎜Akhir sekali, kami menggunakan fungsi curl_exec untuk melaksanakan permintaan cURL. Ini akan membolehkan anda membuat permintaan CURL POST. 🎜

Cara menyiarkan data JSON menggunakan cURL dalam PHP

🎜Biasanya, anda perlu menyerahkan data JSON dalam permintaan CURL POST. Dalam bahagian ini, kita akan belajar cara menyerahkan data JSON menggunakan kaedah POST dalam permintaan cURL. 🎜 🎜Oleh kerana ini adalah permintaan POST, mari kita ubah suai contoh yang dibincangkan dalam bahagian sebelumnya. Teruskan untuk mencipta fail curl_post_json.php dengan kandungan berikut. 🎜
require 'vendor/autoload.php';
🎜Walaupun ia kelihatan serupa dengan contoh dalam bahagian sebelumnya, perkara penting ialah kami menggunakan fungsi json_encode untuk mencipta rentetan JSON daripada tatasusunan $fields. 🎜

接下来,我们使用 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 作为默认值。

如何在 PHP 中使用 cURL 上传文件

在本节中,我们将讨论如何使用 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 HTTP 客户端?

根据官方文档:

Guzzle 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求,并且可以轻松地与 Web 服务集成。

让我们快速了解一下使用 Guzzle 相对于 cURL PHP 函数的优势:

  • 适用于不同类型数据的简单界面
  • 支持同步和异步请求
  • 支持 cURL、套接字和 PHP 流
  • 符合 PSR-7
  • 还有更多

总而言之,当您想使用不同的方法进行 HTTP 调用时,它是最好的库之一。在本节中,我们将讨论如何安装 Guzzle,然后通过几个快速示例来演示该库的强大功能!

如何安装 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 请求

在本节中,我们将了解如何使用 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 对象提供了各种方法,如 getStatusCodegetBodygetReasonPhrase 等。我们使用 getBody 方法来获取响应正文内容。

这就是您如何使用 Guzzle 执行 HTTP GET 请求。

如何使用 Guzzle 发出 POST 请求

在本节中,我们将了解如何使用 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 请求时更加轻松。

Atas ialah kandungan terperinci Cara menggunakan cURL dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn