iOS - POST请求中的额外参数

时间:2014-05-22 21:38:14

标签: ios objective-c json request

我是iOS开发的新手。我尝试将POST JSON发送到我的RoR服务器。 这是我的代码:

params - some NSDictionary - > {uid = 123}

NSData *postData = [NSJSONSerialization dataWithJSONObject:params 
    options:NSJSONWritingPrettyPrinted error:&jsonSerializationError]; 

NSString *urlString = [[NSString alloc] initWithFormat:@"%@%@", API_URL, url];
NSURL *nsUrl = [NSURL URLWithString:urlString];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:nsUrl];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%lu", 
    (unsigned long)postData.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData];

在服务器的最后,我看到:

{"uid"=>"123",
 "action"=>"mAction",
 "controller"=>"mController",
 "token"=>{"uid"=>"123"}}

为什么我会看到额外的令牌'以及我如何删除它?

2 个答案:

答案 0 :(得分:0)

没有理由我可以看到额外的"令牌"在那里,所以我建议令牌一直在 param 中,或者服务器上的接收脚本(PHP?)正在添加数据。

我建议你用

打印参数的内容
NSLog(@"param: %@", param); 

只是为了确定,并将postData转换为NSString,例如:

NSString *myString = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding]; 

并打印出来,只是为了安全起见,一旦你确定你没有发送"令牌"参数,开始调试接收端。

希望这有帮助

答案 1 :(得分:0)

NSDictionary是一个神奇的问题。当我发送NSMutableString时 - 没问题。

NSMutableString *stringData = [[NSMutableString alloc] init];
[params enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
    [stringData appendString:[NSString stringWithFormat:@"%@=%@", key, value]];
    [stringData appendString:[NSString stringWithFormat:@"&"]];
}];
NSData *postData = [stringData dataUsingEncoding:NSUTF8StringEncoding];

我不知道会发生什么以及为什么:(