目錄
現實世界的例子
如何在 PHP 中使用 cURL 下載檔案
如何在 PHP 中使用 cURL 發布資料
如何在 PHP 中使用 cURL 發布 JSON 資料
如何在 PHP 中使用 cURL 上传文件
什么是 Guzzle HTTP 客户端?
如何安装 Guzzle 库
如何使用 Guzzle 发出 GET 请求
如何使用 Guzzle 发出 POST 请求
结论
首頁 後端開發 php教程 PHP中使用cURL的方法

PHP中使用cURL的方法

Aug 31, 2023 am 11:41 AM
php發送http請求 php curl使用 php curl教程

PHP中使用cURL的方法

今天,我們將探討 PHP 中的 cURL 擴展,它允許您從程式碼發出 HTTP 請求。

在日常 PHP 開發中,您經常需要與外部網站進行通訊。無論是呼叫第三方 REST API 取得資料還是從外部網站下載資源,您都需要一個可以輕鬆完成的程式庫。

在 PHP 中,您可以使用不同的方法來連接不同類型的伺服器並進行通訊。最簡單的方法之一是使用 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 陣列建立 JSON 字串。

接下来,我们使用 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 请求时更加轻松。

以上是PHP中使用cURL的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

解釋PHP中晚期靜態結合的概念。 解釋PHP中晚期靜態結合的概念。 Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

自定義/擴展框架:如何添加自定義功能。 自定義/擴展框架:如何添加自定義功能。 Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? Apr 01, 2025 pm 03:09 PM

深入解讀ReactPHP的非阻塞特性ReactPHP的一段官方介紹引起了不少開發者的疑問:“ReactPHPisnon-blockingbydefault....

See all articles