从iOS / iphone应用程序验证php脚本

时间:2012-06-29 06:46:20

标签: iphone objective-c ios xcode

这是我需要验证的php:

<?php

        $username=$_POST["m_username"];
        $password=$_POST["m_password"];
/*      
        $username=$_GET["m_username"];
        $password=$_GET["m_password"];
*/

?>

我使用以下代码从我的iPhone应用程序进行身份验证。但它不是在验证。我不知道它不起作用的问题是什么。它表示发送了空参数/值。

NSString *urlAsString =[NSString stringWithFormat:@"http://www.myurl.com/abc/authenticate.php"];

NSURL *url = [NSURL URLWithString:urlAsString];

NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; 

[urlRequest setTimeoutInterval:30.0f];

[urlRequest setHTTPMethod:@"POST"];

[urlRequest addValue:@"test" forHTTPHeaderField:@"m_username" ];

[urlRequest addValue:@"123" forHTTPHeaderField:@"m_password" ];

[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response,NSData *data, NSError *error) {

    if ([data length] >0 && error == nil){

        html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"HTML = %@", html);

        receivedData = [NSMutableData data];

    }
    else if ([data length] == 0 && error == nil){

        NSLog(@"Nothing was downloaded."); 

    }

    else if (error != nil){

        NSLog(@"Error happened = %@", error);
    } 
}];

// Start loading data
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
if (theConnection) 
{
    // Create the NSMutableData to hold the received data
    receivedData = [NSMutableData data];

} 
else {
    // Inform the user the connection failed.

}

3 个答案:

答案 0 :(得分:1)

[urlRequest addValue:@"test" forHTTPHeaderField:@"m_username" ];

[urlRequest addValue:@"123" forHTTPHeaderField:@"m_password" ];

这是你的问题。您将值作为HTTP标头字段发送,而不是作为发布数据发送。发布数据位于请求正文中,而不是标题中。因此PHP不会将其视为要在$_POST数组中查看的传入帖子字段。 (那些字段可能会出现在$_SERVER数组中,但是......我从来没有尝试过。无论如何,它不是发送帖子数据的首选方法。)

请改为:

NSString *myRequestString = @"m_username=test&m_password=123";
NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] 
                                        length: [myRequestString length]];

[urlRequest setHTTPBody: myRequestData];

显然,您可以将myRequestString组合为格式化字符串,如果需要,可以删除用户提供的值。

另请注意,由于您正在点击非SSL网址,因此这些数据将以明文形式发送,现在所有孩子都知道这是一个坏主意。

答案 1 :(得分:0)

尝试像这样调用你的php页面网址

[你的网址]?m_username = abc&amp; m_password = abc然后改变

$_POST['m_username'] to $_REQUEST['m_username'] 
and 
$_POST['m_password'] to $_REQUEST['m_password'] 

看看你得到了什么...如果它对json数据没问题,那么问题在于你的可可代码。

祝你好运。

答案 2 :(得分:0)

在iPhone中,您传递HTTP标头中的参数,但在PHP脚本中,您正在从POST数据中检索参数。尝试同步数据传输。