在 PHP 中傳送 POST 請求

Subodh Poudel 2023年1月30日
  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
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