0

这是我需要进行身份验证的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.

}
4

3 回答 3

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 URL,因此这些数据将以明文形式发送,如今所有孩子都将其称为“坏主意”。

于 2012-06-29T12:26:50.697 回答
0

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

于 2012-06-29T09:34:31.627 回答
0

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

[您的网址]?m_username=abc&m_password=abc 然后更改

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

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

祝你好运。

于 2012-06-29T07:05:26.597 回答