headerのAuthorizationを取得したい

authorized

おまとめ三行

Authorizationという項目を取得することができません
ヘッダ情報のAuthorizationを出力してみます
URLを任意に変えて、試してみてください

PHPでヘッダ情報を取得したければ、$_SERVERという変数の中身を見れば、たいていのものは取得できます。

でも$_SERVERだと、Authorizationという項目を取得することができません。

Authorizationを取得したい場合は、「apache_request_headers()」か「getallheaders()」を使います。

どういうときに使うかはその人次第ですけど、うーん、そうですね……自分でAPIを実装する場合のアクセストークンに使う場合、とかですかね……?

例えば、curlを使って、こんなリクエストを投げてみます。

$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'http://norm-nois.com/reference/api.php');
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: token12345'));
curl_exec($ch);
curl_close($ch);

http://norm-nois.com/reference/api.phpというURLにリクエストを送っています。curlの使い方については、ここでは省略。やっていることは、ヘッダ情報に「Authorization」をくっつけてるだけです。

http://norm-nois.com/reference/api.phpには、こんなコードを書いて、ヘッダ情報のAuthorizationを出力してみます。

$header = $_SERVER;
echo '$_SERVER:'.$header['Authorization'].'<br />';

$header = apache_request_headers();
echo 'apache_request_headers:'.$header['Authorization'].'<br />';

$header = getallheaders();
echo 'getallheaders:'.$header['Authorization'].'<br />';

実際にやってみると分かりますが、出力結果はこうなります。

$_SERVER:
apache_request_headers:token12345
getallheaders:token12345

$_SERVERだけ、Authorizationが取得できていません。他の二つは「token12345」という値が取得できました。



レンタルサーバーとかによっては、apache_request_headers()を使っても、取得できない場合があるかもしれません。とりあえず、さくらインターネットでは取得できなかった。

そういう場合は、.htaccessにこんなのを加えてみてください。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP:Authorization} ^(.*)
  RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>

これでAuthorizationを取得できるようになると思います。

ちなみに、http://norm-nois.com/reference/api.phpは実在のURLですが、上記の.htaccessの設定を外してあるので、アクセスしてもAuthorizationは取得できない状態になってます。「あれ? 言われた通りやってみたのに取得できてねーぞ」ってなります。

実際に検証してみたい場合は、URLを任意に変えて、試してみてください。よろしくお願いしゃっす。

まだコメントはいただけてないみたい……
もしかしたら何か関連しているかも?