在單一PHP cURL 請求中檢索回應標頭和正文
PHP 的cURL 庫提供了執行HTTP 請求的能力,使其具有多種用途數據獲取和通信任務。然而,使用 cURL 時遇到的一個常見挑戰是需要在單一請求中檢索回應標頭和正文。
預設情況下,將 CURLOPT_HEADER 設為 true 會傳回回應中組合的標頭和正文,這需要進一步解析以提取各個元件。為了更有效和安全的方法,可以採用另一種方法:
$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); // Execute the request $response = curl_exec($ch); // Extract header and body $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size);
此方法使用 CURLINFO_HEADER_SIZE 資訊將標頭與正文分開。請注意,在處理代理伺服器或某些類型的重定向時,此方法可能有限制。在這種情況下,請考慮使用以下解決方案來提高可靠性:
function get_headers_body($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); // Execute the request and get headers only $headers = curl_exec($ch); // Close the original handle curl_close($ch); // Set the necessary header information to a new handle $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); foreach (explode("\n", $headers) as $header) { // Remove set-cookie headers if (stripos($header, 'set-cookie') !== false) { continue; } // Add it to the request curl_setopt($ch, CURLOPT_HTTPHEADER, array($header)); } // Execute the request and get the body only $body = curl_exec($ch); // Close the handle curl_close($ch); return array( 'headers' => $headers, 'body' => $body ); }
此解決方案可以更好地控制標頭檢索過程,確保結果更可靠。
以上是如何在單一 PHP cURL 請求中高效檢索回應標頭和正文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!