Как получить начало запроса HTTP в php

Я хочу создать API и аутентифицировать пользователей API, я предоставил API KEY, App-id и App-Secret. Проблема в том, что я хочу знать, откуда приходит запрос http, чтобы я мог знать, является ли Хост, делающий запрос que, зарегистрированным Хостом. Например: www.someone.com имеет app-id: 0001, app-secret: 1200 и api-key: 458. Если эти учетные данные используются для запроса A, я хочу знать, действительно ли запросчик www.someone.com

Используйте $_SERVER['HTTP_REFERER'] . Это адрес страницы (если есть), которая ссылалась на пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты установят это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию.

Для дальнейших ограничений вы можете выполнить следующее. example.com должен быть изменен на ваш домен.

IIS приведен ниже в веб-конфигурации :

 add name="Access-Control-Allow-Origin" value="http://www.example.com" 

Apache установлен в httpd.conf / apache.conf

 Header add Access-Control-Allow-Origin "http://www.example.com" 

Как правило, этот заголовок должен выполнять эту работу. Наличие имени домена в этом заголовке

 header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN'] . ""); // use domain name instead of $_SERVER['HTTP_ORIGIN'] above 

но если вы хотите проверить дополнительную информацию, используйте что-то вроде следующего фрагмента

 $allowed = array('domain1', 'domain2', 'domain3'); if(isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $allowed)){ // SELECT credentials for this user account from database if(isset($_GET['api_key'], $_GET['app_secret']) && $_GET['api_key'] == 'api_key_from_db' && $_GET['app_secret'] == 'app_secret_from_db' ){ // all fine }else{ // not allowed } }else{ // not allowed } 

Если пользователям необходимо передать больше данных в вашу службу, используйте POST вместо GET

Я думаю, что вы имеете в виду, что хотите получить доступ к заголовку «Origin» в заголовках запроса (в отличие от установки его в заголовках ответов).

Для этого самым простым способом является доступ к встроенной функции getallheaders (), которая является псевдонимом для apache_request_headers () – NB, предполагается, что вы используете php в качестве модуля.

Это возвращает массив, поэтому заголовок Origin должен быть доступен следующим образом:

 $request_headers = getallheaders(); $origin = $request_headers['Origin']; 

Если вы используете php через что-то вроде fastcgi, то я считаю, что он будет доступен в среде – обычно с заглавной буквы и с префиксом «HTTP_», поэтому он должен быть $_SERVER['HTTP_ORIGIN'] .

Надеюсь, что это поможет кому-то еще найти это 🙂

Используя var_dump вы можете увидеть все, что может предложить request .

 var_dump($_REQUEST); 

Сделайте var_dump на server глобальным. Он содержит много полезной информации.

 var_dump($_SERVER);