2016-06-15 10 views
2

API呼び出しのヘッダー応答を取得するためにPHPでcurlを使用しています。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); 

ヘッダreturna $response

HTTP/1.1 200 OK日:水曜日、2016年6月15日午前13時48分43秒GMTサーバ:Apacheの X-Rate-Limit-Remaining:0 X-Rate-Limit-Reset:0/2レート制限-Layout:0 X-Rate-Limit-Reset: 0 X-ページネーション - 総カウント:1 X-ページネーション - ページ数:1 X-ページネーション - 現在のページ:1 X-ページネーション-Per-Page:20リンク:; rel = selfコンテンツタイプ:application/json; charset = UTF-8 1

配列のように1つのヘッダ変数にアクセスする方法はありますか?

ご協力いただきありがとうございます。

+0

スプリットの連想配列を含んでいます。すべてのhttpヘッダーは1行のテキストです。 –

答えて

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今改行上のレスポンスヘッダ