>  기사  >  백엔드 개발  >  PHP에서 cURL을 사용하는 방법

PHP에서 cURL을 사용하는 방법

王林
王林원래의
2023-08-31 11:41:181102검색

PHP에서 cURL을 사용하는 방법

오늘은 코드에서 HTTP 요청을 할 수 있게 해주는 PHP의 cURL 확장을 살펴보겠습니다.

일상적인 PHP 개발에서는 외부 웹사이트와 통신해야 하는 경우가 많습니다. 데이터를 가져오거나 외부 웹사이트에서 리소스를 다운로드하기 위해 타사 REST API를 호출하는 경우 이를 쉽게 수행할 수 있는 라이브러리가 필요합니다.

PHP에서는 다양한 방법을 사용하여 다양한 유형의 서버에 연결하고 통신할 수 있습니다. 가장 쉬운 방법 중 하나는 file_get_contents 기능을 사용하여 원격 파일을 읽는 것입니다. 반면에 소켓은 클라이언트와 서버 간의 통신에도 사용될 수 있습니다. 하지만 이 글에서는 실제 사례를 통해 cURL 확장에 대해 자세히 논의하겠습니다.

cURL은 Client 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 파일을 생성해 보세요.

으아악

위 예에서는 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 파일을 만들어 보겠습니다.

으아악

위의 예에서는 HTTP POST 메서드를 사용하여 요청을 제출해야 한다고 가정합니다. 실제로 이는 POST 메서드를 사용하여 양식을 제출하는 것과 유사하게 작동합니다.

$fields 变量包含我们需要作为 POST 数据提交的值数组。接下来,我们使用 http_build_query URL로 인코딩된 쿼리 문자열을 준비하는 기능입니다.

다음으로 요청과 함께 제출할 POST 데이터를 설정하기 위한 CURLOPT_POST 选项设置为 TRUE 以将请求方法设置为 HTTP POST。此外,我们需要使用 CURLOPT_POSTFIELDS 옵션을 설정하겠습니다.

마지막으로 curl_exec 함수를 사용하여 cURL 요청을 수행합니다. 이렇게 하면 cURL POST 요청을 할 수 있습니다.

PHP에서 cURL을 사용하여 JSON 데이터를 게시하는 방법

일반적으로 cURL POST 요청에서 JSON 데이터를 제출해야 합니다. 이 섹션에서는 cURL 요청에서 POST 메서드를 사용하여 JSON 데이터를 제출하는 방법을 알아봅니다.

POST 요청이므로 이전 섹션에서 설명한 예제를 수정해 보겠습니다. 다음 내용으로 curl_post_json.php 파일을 생성해 보세요.

으아악

이전 섹션의 예와 비슷해 보이지만 중요한 것은 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으로 문의하세요.