PHP curl获取头参数

时间:2016-06-15 14:06:14

标签: php curl

我正在使用curl和PHP来获取API调用的标头响应。

这是我的代码:

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL,            'http://localapi.com/v1/users');
curl_setopt($curl, CURLOPT_HEADER,         true);
curl_setopt($curl, CURLOPT_NOBODY,         true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT,        10);
curl_setopt($curl, CURLOPT_HTTPHEADER,     array("authorization: Basic dmt5MVVTeXg3ZXpKYXVEZGtta2phZThfQ0tXa2tTQkY6"));
$response = curl_exec($curl);

$response返回标题:

  

HTTP / 1.1 200 OK日期:2016年6月15日星期三13:48:43 GMT服务器:   Apache / 2.4.18(Unix)PHP / 5.5.31 X-Powered-By:PHP / 5.5.31   X速率限制限制:1 X速率限制 - 剩余:0 X速率限制 - 重置:0   X-Pagination-Total-Count:1 X-Pagination-Page-Count:1   X-Pagination-Current-Page:1 X-Pagination-Per-Page:20 Link :;   rel = self Content-Type:application / json; charset = UTF-8 1

是否有一种方法可以访问单个标头变量,如数组?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以为Curl分配回调,以使用 CURLOPT_HEADERFUNCTION 处理回复中的标题。通过为回调提供$headers变量来分配结果,您可以在curl_exec完成后以数组的形式访问它们。

$headers = [];

curl_setopt($curl, CURLOPT_HEADERFUNCTION, function ($ch, $header) use (&$headers) {
    $matches = array();

    if ( preg_match('/^([^:]+)\s*:\s*([^\x0D\x0A]*)\x0D?\x0A?$/', $header, $matches) )
    {
        $headers[$matches[1]][] = $matches[2];
    }

    return strlen($header);
});

curl_exec($curl);

$headers现在将包含响应标头的关联数组