iOS JSON身份验证令牌请求表示缺少参数

时间:2012-05-22 03:13:16

标签: objective-c ios json

我一直在寻找,似乎无法解决这个问题。 我看到的JSON示例中没有一个在url中有方法名称,所以我认为这可能是一个问题。 这是我的代码:

NSString *username = @"xxxx";
NSString *password = @"xxxx";
NSString *loginURL = @"http://www.xxxxxx.com/services/api/rest/json?method=xxxxxx.auth.gettoken";

NSURL *url = [NSURL URLWithString:loginURL];

NSString *JSONString = [NSString stringWithFormat:@"{\"username\":\"%@\",\"password\":\"%@\"}", username, password];

NSData *JSONBody = [JSONString dataUsingEncoding:NSUTF8StringEncoding];

NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] initWithURL:url];
loginRequest.HTTPMethod = @"POST";
loginRequest.HTTPBody = JSONBody;

NSOperationQueue *queue = [NSOperationQueue new];

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

                           // Manage the response here.
                           NSString *txt = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
                           NSLog(@"%@", txt);
                       }];

我正在使用SquidMan窥探reuest,我注意到访问日志列出: www.xxxxx.com/services/api/rest/json? - DIRECT / ..... 方法名称不存在,这是我第一次使用SquidMan,但我认为它会在那里。

我收到的消息是缺少参数用户名。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我发现了这个问题,我没有写web服务,显然发送它的JSON格式的数据是错误的。 如果我以“& param = value& param2 = value2”的格式发布数据,那就可以了。

    NSString *JSONString = [NSString stringWithFormat:@"&username=%@&password=%@",
                      [username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                      [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *JSONBody = [JSONString dataUsingEncoding:NSUTF8StringEncoding];

NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] initWithURL:url];
loginRequest.HTTPMethod = @"POST";
loginRequest.HTTPBody = JSONBody;

答案 1 :(得分:0)

可能是因为您没有为请求指定Content-Type,因此服务器不知道如何解释数据。在分配loginRequest

后,请尝试将此行添加到代码中
[loginRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

希望有所帮助。