Como posso solicitar o acesso cabeçalhos que não aparecem no $ _SERVER?
-
05-07-2019 - |
Pergunta
Eu estou tentando criar uma API REST em PHP e eu gostaria de implementar um esquema de autenticação semelhante à abordagem S3 da Amazon. Isso envolve a definição de um costume header 'autorização' na solicitação.
Eu tinha pensado que eu seria capaz de acessar o cabeçalho com $ _SERVER [ 'HTTP_AUTHORIZATION'], mas é longe de ser encontrada em var_dump ($ _ SERVER). Os apache_request_headers () função seria resolver o meu problema, mas meus implementos acolhimento PHP como CGI, por isso é indisponível.
Existe outra maneira eu posso acessar os cabeçalhos de solicitação completas em PHP?
Solução
Você vai precisar fazer alguma feitiçaria mod_rewrite
para obter seus cabeçalhos passado a barreira CGI, assim:
RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<?php
$auth = $_SERVER['HTTP_AUTHORIZATION'];
?>
Note que se você estiver usando mod_rewrite
para outros fins, que poderia acabar por ser $_SERVER['REDIRECT_HTTP_AUTHORIZATION']
.
Outras dicas
Tente
$_ENV['HTTP_AUTHORIZATION']
Ao usar interface CGI em vez de interface de módulo do Apache, HTTP cabeçalhos devem estar disponíveis como variáveis ??de ambiente.
Há uma extensão PECL fantástica que permite a todos os tipos de HTTP acesso relacionado. PECL_HTTP e mais especificamente http://php.net/http e http://php.net/manual/en/function.http-get-request-headers.php .