首页 > 后端开发 > php教程 > 如何在单个 PHP cURL 请求中高效检索响应标头和正文?

如何在单个 PHP cURL 请求中高效检索响应标头和正文?

DDD
发布: 2024-12-16 07:36:13
原创
380 人浏览过

How Can I Efficiently Retrieve Both Response Headers and Body in a Single PHP cURL Request?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板