在单个 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中文网其他相关文章!