在 Objective-c 中使用 AFNetworking 对字典进行 URL 编码
Posted
技术标签:
【中文标题】在 Objective-c 中使用 AFNetworking 对字典进行 URL 编码【英文标题】:Url Encoding of dictionary with AFNetworking in Objective-c 【发布时间】:2015-06-29 19:18:08 【问题描述】:我必须以以下格式向服务器发送POST
请求:
内容类型:application/x-www-form-urlencoded
Form Key : data
表单值:
[
"email" : "test@test.com",
"password" : "test@test.com"
]
当我在网络休息客户端(邮递员/高级休息客户端)中以这种格式发送请求时,我得到了成功的响应。
那么我怎样才能用AFNetworking
发送这种类型的响应呢?
我的Objective-c
代码是
NSDictionary *dictLogin = @@"email":@"test@test.com",@"password":@"test@test.com";
NSDictionary *dictReq = @@"data":@[dictLogin];
NSData *data = [NSJSONSerialization dataWithJSONObject:dictReq options:NSJSONWritingPrettyPrinted error:nil];
NSString *strReq = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"http://test.php" parameters:dictReq success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"JSON: %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
当我将 dictReq 或 str 作为 AFNetworking 参数传递时,我得到了来自服务器的缺少参数/故障响应的响应
如果 AFNetworking
不可能或很难,NSUrlConnection/Request
也可以工作
谢谢
【问题讨论】:
您是否确保您的密钥是正确的 JSON 密钥,它们是服务器端预期的密钥?因为上面的 JSON 示例与您在 Objective-c 中的代码生成的不同 是的,参数是一样的,你发现两者req有什么区别?在休息客户端中,我将数据键和参数分开,我的代码已将其编写为字典 你解决了这个问题吗?你能分享你的解决方案吗? 【参考方案1】:试试这个方法,我在很多项目中都使用过 AFNetworking。并且不得不对参数进行编码。
NSDictionary *dictLogin = @@"email":@"test@test.com",@"password":@"test@test.com";
NSDictionary *dictReq = @@"data":@[dictLogin];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"http://test.php" parameters:dictReq success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"JSON: %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
【讨论】:
您好,我使用的是相同的代码,这与我的代码有什么不同? 除了 AFNetworking 之外,您正在尝试自己序列化数据,而不是让 AFNetworking 序列化它。不要序列化它并将其转换为 NSData。以上是关于在 Objective-c 中使用 AFNetworking 对字典进行 URL 编码的主要内容,如果未能解决你的问题,请参考以下文章