當前位置: 首頁> 最新文章列表> curl_close 關閉會話後,如何獲取請求的HTTP 狀態碼?

curl_close 關閉會話後,如何獲取請求的HTTP 狀態碼?

gitbox 2025-05-20

在使用PHP 進行HTTP 請求時, cURL是一種非常常見的工具,能夠幫助開發者發送請求並獲取響應。而在使用cURL發送請求並處理響應時,可能會遇到一個問題——如何在調用curl_close()關閉cURL 會話後,還能獲取到請求的HTTP 狀態碼?

在PHP 中, curl_close()用於關閉cURL 會話,這意味著該函數會釋放與當前會話相關的所有資源。通常,在調用curl_close()後,所有的會話信息都會被銷毀,因此不能直接再獲取請求的HTTP 狀態碼。不過,我們仍然有一些方法可以在關閉會話之前或之後獲取狀態碼。

一、通過curl_getinfo()獲取HTTP 狀態碼

在執行完請求後,可以使用curl_getinfo()函數來獲取包括HTTP 狀態碼在內的請求信息。這個函數可以返回一個包含多種請求信息的數組,其中有一個字段就是http_code ,它表示HTTP 狀態碼。

在關閉cURL 會話之前,我們可以調用curl_getinfo()獲取狀態碼。下面是一個示例:

 <?php
// 初始化 cURL 會話
$ch = curl_init();

// 設置請求的 URL
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/example");

// 設定 cURL 選項
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 執行 cURL 請求
$response = curl_exec($ch);

// 獲取 HTTP 狀態碼
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 關閉 cURL 會話
curl_close($ch);

// 輸出 HTTP 狀態碼
echo "HTTP 狀態碼是: " . $http_code;
?>

在這個示例中,我們首先使用curl_init()初始化了一個cURL 會話,然後設置了請求URL,並執行了請求。接著,使用curl_getinfo()獲取了HTTP 狀態碼,並將狀態碼存儲在$http_code變量中。在會話結束後,我們調用curl_close()來關閉cURL 會話。

二、為何不能在curl_close()後獲取HTTP 狀態碼?

curl_close()會關閉當前的cURL 會話,並釋放其占用的資源。一旦調用了curl_close() ,所有與該會話相關的狀態信息都會被銷毀,因此無法再通過cURL 函數獲取到請求的詳細信息,包括HTTP 狀態碼。

正因為如此,想要獲取HTTP 狀態碼的正確時機是在curl_exec()執行完並在curl_close()之前調用curl_getinfo() 。這樣可以確保在關閉會話前獲取到請求的狀態信息。

三、通過curl_getinfo()獲取其他信息

除了HTTP 狀態碼外, curl_getinfo()還可以返回許多其他有用的信息。例如,返回請求的最終URL、請求花費的時間、內容長度等信息。以下是如何獲取更多的請求信息的示例:

 <?php
// 初始化 cURL 會話
$ch = curl_init();

// 設置請求的 URL
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/example");

// 設定 cURL 選項
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 執行 cURL 請求
$response = curl_exec($ch);

// 獲取 cURL 請求信息
$request_info = curl_getinfo($ch);

// 關閉 cURL 會話
curl_close($ch);

// 輸出請求信息
echo "HTTP 狀態碼: " . $request_info['http_code'] . "\n";
echo "請求的 URL: " . $request_info['url'] . "\n";
echo "請求耗时: " . $request_info['total_time'] . "秒\n";
?>

通過上述代碼,你可以獲取到HTTP 狀態碼、最終請求的URL,以及請求的總時間等信息。

四、總結

儘管curl_close()會關閉會話並釋放資源,但我們仍然可以在關閉會話之前,通過curl_getinfo()獲取到HTTP 狀態碼以及其他有用的請求信息。因此,確保在調用curl_close()之前調用curl_getinfo() ,以便能夠成功獲取HTTP 狀態碼。

希望通過本文的講解,你能更好地理解如何在PHP 中使用cURL 獲取HTTP 狀態碼,並避免在關閉會話後無法獲取信息的問題。