在 PHP 中发送 POST 请求

Subodh Poudel 2023年1月30日 2021年4月29日
  1. 在 PHP 中使用 stream_context_create()file_get_contents() 函数的无 CURL 方法发送 POST 请求
  2. 在 PHP 中使用 CURL 来发送 POST 请求
  3. 在 PHP 中创建一个用户定义的函数,该函数使用 CURL 发送 POST 请求
在 PHP 中发送 POST 请求

我们将介绍一种使用无 CURL 的方法通过 http_build_query()stream_context_create()file_get_contents() 函数在 PHP 中发送 POST 请求的方法。

我们将向你展示一种使用 CURL 在 PHP 中发送 POST 请求的方法。CURL 用于将 HTTP 请求发送到 Web 服务器。CURL 模块通常预装 PHP。如果尚未安装,我们应该手动安装它,以便使用 PHP 发送服务器的请求。

我们将向你展示一个示例,该示例通过创建一个函数来使用 CURL 使用 PHP 发送 POST 请求。此方法与第二种方法非常相似。它使用用户定义的函数来发送请求。我们可以重复使用提供不同发布数据和 URL 的代码。

在 PHP 中使用 stream_context_create()file_get_contents() 函数的无 CURL 方法发送 POST 请求

我们可以使用 http_build_query()stream_context_create()file_get_contents() 之类的函数在 PHP 中发送 POST 请求,而无需使用 CURL。我们可以使用 http_build_query() 函数创建查询参数以发送 POST 请求。我们可以创建一个数组来指定 http 标头,方法和内容。我们使用 stream_context_create() 函数来处理流数据。file_get_contents() 函数将 URL 的内容读取为字符串。我们使用 $_POST 全局变量读取数据。

例如,创建 http_build_query() 函数并在函数内部创建一个数组。在数组中分别创建键 nameid 以及值 Robert1。为函数分配变量 $postdata。创建一个数组以指定 HTTP 方法,标头和内容。将键值 methodheadercontent 设置为 POSTContent-type: application/x-www-form-urlencoded 和变量 $postdata。将此数组包装在另一个数组 http 中。将数组分配给变量 $opts。将 $opts 作为 stream_context_create() 函数的参数,并将其分配给变量 $context。使用 file_get_contents() 函数并将 URL http://localhost/request.php 用作第一个参数。使用布尔值 false 和变量 $context 作为第二和第三个参数。将函数分配给变量 $result 并打印。创建一个 PHP 文件 request.php 并使用 $_POST 变量回显 nameid 键。

在下面的示例中,nameid 是使用 POST 方法发布的数据。request.php 文件使用 $_POST 变量读取查询参数。

示例代码:

# php 7.*
<?php
$postdata = http_build_query(
    array(
        'name' => 'Robert',
        'id' => '1'
    )
);
$opts = array('http' =>
    array(
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
$context = stream_context_create($opts);
$result = file_get_contents('http://localhost/request.php', false, $context);
echo $result;
?>
# php 7.*
<?php
echo "Name: ". $_POST['name']. "<br>";
echo "ID: ". $_POST['id'];
?>

输出:

Name: Robert
ID: 1

在 PHP 中使用 CURL 来发送 POST 请求

CURL 代表客户端 URL。我们可以使用 CURL 通过 PHP 脚本发送 POST 请求。PHP 版本需要 curl 模块才能执行不同的 curl 函数。在这种方法中,我们像上面的方法一样使用 http_build_query() 函数作为查询参数。我们可以使用 curl_init() 函数在脚本中初始化 CURL 连接。我们将 curl_setopt() 函数与 CURLOPT_URLCURLOPT_POSTCURLOPT_POSTFIELDS 等选项一起使用。这些选项分别设置 URL,请求 HTTP POST 请求和 POST 数据。我们可以使用 curl_setopt() 函数返回 URL 的内容,并使用 curl_exec() 函数执行 POST 请求。

例如,在数组 $fields 中创建键 nameid 以及值 Wayne2。将数组用作 http_build_query() 函数中的参数,并为该函数分配变量 $postdata。使用 curl_init() 函数打开一个 CURL 连接,并将其分配给变量 $ch。编写三个 curl_setopt() 函数,并将 $ch 变量用作所有三个函数的第一个参数。作为函数中的第二个参数,分别在第一个、第二个和第三个函数中写入选项 CURLOPT_URLCURLOPT_POSTCURLOPT_POSTFIELDS。在这三个函数中,将第三个参数分别设置为 http://localhost/request.phptrue$postdata。调用函数 curl_setopt() 并使用 $ch 变量作为第一个参数,使用 CURLOPT_RETURNTRANSFER 选项作为第二个参数,并使用布尔值 true 作为第三个参数。从 $result 变量调用 curl_exec($ch) 函数并打印 $result。使用与第一种方法相同的 request.php 文件。

示例代码:

#php 7.x
<?php
$fields = [
    'name' => 'Wayne',
    'id' => 2,
];
$postdata = http_build_query($fields);
$ch = curl_init()
curl_setopt($ch,CURLOPT_URL, 'http://localhost/request.php');
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo $result;
?>

输出:

Name: Wayne 
ID: 2

在 PHP 中创建一个用户定义的函数,该函数使用 CURL 发送 POST 请求

我们可以创建一个方法来获取 URL 输入和 POST 数据以发送 POST 请求。此方法还使用 CURL 作为第二种方法。它像以前一样使用所有 curl 功能。此方法旨在将代码重用于多个 URL 和数据。

例如,创建一个函数 httpPost() 并将变量 $url$data 用作参数。使用 curl_init() 函数打开 curl 连接,并以变量 $url 作为参数。与第二种方法一样,使用三个 curl_setopt() 函数。使用 curl_exec() 方法执行 POST 数据。创建数组 $data 并创建键 nameid 以及值 Scott3。以 http://localhost/request.php 作为 URL,以 $data 数组作为数据来调用 httpPost() 方法。此方法还使用 request.php 文件作为上述两种方法。

代码示例:

#php 7.x
<?php
function httpPost($url, $data){
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    echo $response;
}
$data = [
    'name' => 'Scott',
    'id' => 3
];
httpPost('http://localhost/request.php', $data);
?>

输出:

Name: Scott 
ID: 3
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn