我要做的是,从我的iOS应用程序发送带有自定义标头的HTTP请求到我的MAC机器中运行XAMPP的localhost。然后有一个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状态代码。
据我所知,问题在于我在PHP脚本中检查HTTP标头的方式
if (strcmp($value, "X-USERNAME: apiuser") == 0)
可能这不是检查标头值并将其与PHP中预定义字符串值进行比较的标准方法。有没有办法打印从PHP端收到的HTTP请求头?
答案 0 :(得分:1)
headers_list()
返回已发送或准备发送的响应标头数组。
要检查请求标头,请使用getallheaders()
。它返回标题名称和值对的关联数组,因此要检查是否存在X-USERNAME
标题且其值为apiuser
,您可以执行以下操作:
$request_headers = getallheaders();
if(isset($request_headers['X-USERNAME']) && $request_headers['X-USERNAME'] == 'apiuser') {
// do stuff
}
答案 1 :(得分:0)
你也可以使用这个函数getallheaders(),apache_request_headers(),http_get_request_headers()