ios - AFHTTPClient requestWithMethod 参数编码

标签 ios http-post afnetworking nsmutableurlrequest

我想将 AFNetworking 用于带有一些参数的 HTTP Post 方法,并且两个值具有相同的参数。我尝试过:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSDictionary *params = [NSDictionarydictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", @"value3", @"param3", @"value4", @"param3", nil];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/index.php" parameters:params];

我使用了 Charles Proxy,发现我的请求中缺少 value4。

然后我尝试了:

NSString *parameter = @"param1=value1&param2=value2&param3=value3&param3=value4";
[request setHTTPBody:[parameter dataUsingEncoding:NSUTF8StringEncoding]];

这有效。

现在我想知道我是否在使用 AFNetworking 时做错了什么,或者这是 AFNetworking 的一个错误吗?

最佳答案

您的问题不在于 AFNetworking,而在于 NSDictionary。两个条目不能使用相同的 key 。

在这种情况下,这意味着:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", @"value3", @"param3", @"value4", @"param3", nil];

应替换以下内容

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", @"value3,value4", @"param3", nil];

将两个值组合为一个键。

将参数组合到一个键中的另一种方法是使用 NSArray。例如:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"param1", @"value2", @"param2", [NSArray arrayWithObjects:@"value3",@"value4",nil], @"param3", nil];

关于ios - AFHTTPClient requestWithMethod 参数编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384568/

相关文章:

ios - 将核心数据与服务器端数据同步的最佳方式?

ios - 获取 MKMapView 以响应 touch up inside 事件

ios - 应用内购买包装

swift - Obj-C CocoaPods + Swift 框架

ios - AFHTTPSessionManager 使用基于 SOAP 的服务

ios - AFnetworking 在 Objective-C 中同步

ios - 用于检查空路径的 NSPredicate 格式

php - Android Http Post 不起作用

android - 来自Android手机的POST请求中的特殊字符消失

python - 如何通过 Python 向 eBay API 发送有效的 XML POST 请求?