2016-06-15 3 views
2

Я использую curl с PHP для получения ответа заголовка вызова API.PHP curl get header parameters

Это мой код:

$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 returna заголовка:

HTTP/1.1 200 OK Date: Wed, 15 Jun 2016 13:48:43 GMT Сервер: Apache /2.4.18 (Unix) PHP/5.5.31 X-Powered-By: PHP/5.5.31 X-Rate-Limit-Limit: 1 X-Rate-Limit-Remaining: 0 X-Rate-Limit-Reset: 0 X-Pagination-Total-Count: 1 X-Pagination-Page-Count: 1 X-Pagination-Current-Page: 1 X-Pagination -Пер-Страница: 20 Ссылка:; rel = self Content-Type: application/json; charset = UTF-8 1

Есть ли способ доступа к одиночным переменным заголовка, таким как массив?

Заранее благодарим за помощь.

+0

расщепленных на разрывов строк. каждый HTTP-заголовок представляет собой одну строку текста. –

ответ

1

Вы можете назначить обратный вызов для 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 теперь будет содержать ассоциативный массив заголовков ответа