在 PHP 中发送 POST 请求
-
在 PHP 中使用
stream_context_create()
和file_get_contents()
函数的无 CURL 方法发送 POST 请求 - 在 PHP 中使用 CURL 来发送 POST 请求
- 在 PHP 中创建一个用户定义的函数,该函数使用 CURL 发送 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()
函数并在函数内部创建一个数组。在数组中分别创建键 name
和 id
以及值 Robert
和 1
。为函数分配变量 $postdata
。创建一个数组以指定 HTTP 方法,标头和内容。将键值 method
、header
和 content
设置为 POST
、Content-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
变量回显 name
和 id
键。
在下面的示例中,name
和 id
是使用 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_URL
,CURLOPT_POST
和 CURLOPT_POSTFIELDS
等选项一起使用。这些选项分别设置 URL,请求 HTTP POST 请求和 POST 数据。我们可以使用 curl_setopt()
函数返回 URL 的内容,并使用 curl_exec()
函数执行 POST 请求。
例如,在数组 $fields
中创建键 name
和 id
以及值 Wayne
和 2
。将数组用作 http_build_query()
函数中的参数,并为该函数分配变量 $postdata
。使用 curl_init()
函数打开一个 CURL 连接,并将其分配给变量 $ch
。编写三个 curl_setopt()
函数,并将 $ch
变量用作所有三个函数的第一个参数。作为函数中的第二个参数,分别在第一个、第二个和第三个函数中写入选项 CURLOPT_URL
,CURLOPT_POST
和 CURLOPT_POSTFIELDS
。在这三个函数中,将第三个参数分别设置为 http://localhost/request.php
,true
和 $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
并创建键 name
和 id
以及值 Scott
和 3
。以 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 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