在 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-urlencodedForm 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);
];

当我将 dictReqstr 作为 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 编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在c++中,调用objective-c

在 Objective-C 中使用异常

使用 SDWebImage 而不是 AFNetworking 进行图像加载有很大的优势吗?

在objective-c中使用swift代码时的问题

在 Swift 中使用 Objective-C 扩展类

Objective-C 观察者 - 如何在 Swift 中使用