PHP HTTP客户端:从A到Z正确发起请求

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么需要PHP HTTP客户端?

\n\n

现代Web开发离不开与外部服务的交互。无论是向第三方API发送数据、获取汇率信息,还是集成支付网关——每个PHP开发者都会遇到执行HTTP请求的需求。创建一个可靠的PHP HTTP客户端是一项基本技能,它能让您的应用程序与外界进行通信。

\n\n

在本文中,我们将探讨两种主要方法:使用内置的cURL扩展和流行的Guzzle库。您将学习如何正确发送GET、POST、PUT和DELETE请求,处理错误以及操作请求头。本材料对新手和经验丰富的开发者均有帮助,有助于系统化相关知识。

\n\n

1. PHP HTTP客户端基础:使用cURL

\n\n

1.1. 什么是cURL及其重要性

\n\n

cURL(Client URL Library)是PHP的一个强大扩展,允许您通过HTTP、HTTPS、FTP等协议与各种服务器进行交互。它包含在PHP的标准发行版中,但有时需要在php.ini中单独启用。cURL让您完全控制请求:您可以设置任何方法、请求头、请求体和超时时间。

\n\n

1.2. 使用cURL发送简单GET请求

\n\n

我们从最常见的场景开始——从服务器获取数据。来看一个向公共API JSONPlaceholder发起请求的示例:

\n\n
<?php\n// 初始化cURL会话\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n\n// 设置选项\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_HTTPGET, true);\ncurl_setopt($ch, CURLOPT_TIMEOUT, 30);\n\n// 执行请求\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n\n// 检查错误\nif (curl_errno($ch)) {\n    echo 'cURL错误:' . curl_error($ch);\n} else {\n    echo "HTTP状态码:$httpCode\\n";\n    $data = json_decode($response, true);\n    print_r($data);\n}\n\n// 关闭会话\ncurl_close($ch);\n?>
\n\n

请注意:我们始终检查响应状态码和错误信息。CURLOPT_RETURNTRANSFER确保结果被返回到变量中,而不是直接输出。

\n\n

1.3. 发送带数据的POST请求

\n\n

要向服务器发送数据(例如创建新记录),我们使用POST方法。数据可以以数组或JSON字符串的形式传递:

\n\n
<?php\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts');\n\n$postData = [\n    'title' => '新文章',\n    'body' => '文章内容',\n    'userId' => 1\n];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_POSTFIELDS => json_encode($postData), // JSON\n    CURLOPT_HTTPHEADER => [\n        'Content-Type: application/json',\n        'Accept: application/json'\n    ],\n    CURLOPT_TIMEOUT => 30\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\necho "HTTP状态码:$httpCode\\n";\necho $response;\n?>
\n\n

关键点:如果您将数组传递给CURLOPT_POSTFIELDS,PHP会自动将其编码为application/x-www-form-urlencoded格式。对于JSON,需要使用json_encode()并显式设置Content-Type请求头。

\n\n

1.4. PUT和DELETE请求

\n\n

更新和删除资源时使用PUT和DELETE方法。在cURL中,通过CURLOPT_CUSTOMREQUEST选项设置:

\n\n
<?php\n// PUT请求(更新)\n$ch = curl_init('https://jsonplaceholder.typicode.com/posts/1');\n$updateData = ['title' => '更新后的标题'];\n\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_CUSTOMREQUEST => 'PUT',\n    CURLOPT_POSTFIELDS => json_encode($updateData),\n    CURLOPT_HTTPHEADER =>                

博客

书籍推荐