Я пытаюсь отправить 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?
headers_list()
возвращает массив ответ Заголовки, которые уже были отправлены или готовы к отправке.
Проверить запрос заголовки, используйте getallheaders()
. Он возвращает ассоциативный массив пар имени и значения заголовка, поэтому для проверки X-USERNAME
заголовок присутствует и его значение apiuser
, вы бы сделали что-то вроде:
$request_headers = getallheaders();
if(isset($request_headers['X-USERNAME']) && $request_headers['X-USERNAME'] == 'apiuser') {
// do stuff
}
Вы также можете использовать эти функции getallheaders (), apache_request_headers (), http_get_request_headers ()