在 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