Проверьте пользовательский HTTP-заголовок в PHP, отправленный iOS

Я пытаюсь отправить HTTP-запрос с настраиваемым заголовком из приложения iOS на мой локальный хост, который запускает XAMPP на моем компьютере MAC. Затем есть страница PHP, которая проверяет мой конкретный заголовок и отвечает в соответствии с этим.

Ниже приводится часть iOS

NSString *urlStr = @"http://127.0.0.1/restapi/index.php?name=anuja";

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

[request setURL:[NSURL URLWithString:urlStr]];

[request setHTTPMethod:@"GET"];

[request addValue:@"apiuser" forHTTPHeaderField:@"X-USERNAME"];

NSLog(@"%s - %d # allHTTPHeaderFields = %@", __PRETTY_FUNCTION__, __LINE__, [request allHTTPHeaderFields]);

NSURLResponse *response;
NSError *error;

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"%s - %d # responseStr = %@", __PRETTY_FUNCTION__, __LINE__, responseStr);

И вот как я проверяю этот конкретный заголовок из моего скрипта PHP

        if (isset($_GET["name"])) {

foreach (headers_list() as $name => $value) {

if (strcmp($value, "X-USERNAME: apiuser") == 0) {

$name = $_GET["name"];

$result = json_encode(array('name' => $name), JSON_FORCE_OBJECT);

sendResponse(200, json_encode($result));

return true;
}
}

sendResponse(203, 'Non-Authoritative Information');
return false;
}

Я всегда получаю «Неавторизованную информацию» в ответ. Но мне нужно получить ответ с моим именем в коде 200 статуса.

Насколько я понимаю, проблема в том, как я проверил заголовок HTTP внутри моего скрипта PHP

if (strcmp($value, "X-USERNAME: apiuser") == 0)

Возможно, это не стандартный способ проверить значения заголовка и сравнить его с заранее заданным строковым значением в PHP. Есть ли способ напечатать заголовок HTTP-запроса, который он получает со стороны PHP?

1

Решение

headers_list() возвращает массив ответ Заголовки, которые уже были отправлены или готовы к отправке.

Проверить запрос заголовки, используйте getallheaders(). Он возвращает ассоциативный массив пар имени и значения заголовка, поэтому для проверки X-USERNAME заголовок присутствует и его значение apiuser, вы бы сделали что-то вроде:

$request_headers = getallheaders();
if(isset($request_headers['X-USERNAME']) && $request_headers['X-USERNAME'] == 'apiuser') {
// do stuff
}
1

Другие решения

Вы также можете использовать эти функции getallheaders (), apache_request_headers (), http_get_request_headers ()

0

По вопросам рекламы [email protected]