所以我在我的本地主机上运行这个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];
答案 0 :(得分:0)
HTTP正文应为字符串,因此数据应从字符串对象转换,或者序列化为字符串的NSDictionary
。试试这个:
NSData * bodyData = [NSJSONSerialization dataWithJSONObject:yourDictionaryObj options:0 error:&error];
NSString * body = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];
然后使用NSString * body
。