将NSDictionary作为NSURLResponse HTTP Body发送到Web服务

时间:2014-06-20 04:07:36

标签: php ios web-services backend nsurlrequest

所以我在我的本地主机上运行这个php脚本作为我的iOS应用程序的API。我正在将NSURLRequest发送到我服务器上正在运行的脚本,但是我遇到了将NSDictionary作为HTTPBody的问题。

以下是我对字典对象进行编码的方法:

NSData* data = [NSJSONSerialization dataWithJSONObject:@{@"command": @"login", @"username": username, @"password": password} options:0 error:nil];

所以这不起作用,或者说,当我在PHP脚本中var_dump() $_POST变量时,我得到一个空响应。

现在,就此而言,

NSData * data = [[NSString stringWithFormat:@"command=login&username=%@&password=%@", username, password] dataUsingEncoding: NSUTF8StringEncoding];

有效。但我认为发送字典对象而不是丑陋的格式化字符串会更清晰。

我能做些什么吗?我想只生成一个包含上述所有参数的字符串会很好,但我认为通过字典对象发送并让PHP脚本处理后端的数据会更容易。

我很擅长实现后端服务以及互联网协议,还有更多涉及网络开发,但我想我可以通过一个关于这个主题的简单问题得到一些澄清。

修改

以下是构建的请求:

NSString *preferredLanguageCodes = [[NSLocale preferredLanguages] componentsJoinedByString:@", "];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", kAPIHost, kAPIPath]]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:[NSString stringWithFormat:@"%@, en-us;q=0.8", preferredLanguageCodes] forHTTPHeaderField:@"Accept-Language"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSData* data = [NSJSONSerialization dataWithJSONObject:@{@"command": @"login", @"username": username, @"password": password} options:0 error:nil];
[request setHTTPBody:data];

1 个答案:

答案 0 :(得分:0)

HTTP正文应为字符串,因此数据应从字符串对象转换,或者序列化为字符串的NSDictionary。试试这个:

NSData * bodyData = [NSJSONSerialization dataWithJSONObject:yourDictionaryObj options:0 error:&error];

NSString * body = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];

然后使用NSString * body