验证由iOS发送的PHP中的自定义HTTP标头

时间:2015-03-16 03:29:28

标签: php ios http-headers localhost nsmutableurlrequest

我要做的是,从我的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请求头?

2 个答案:

答案 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()