将 AFNetworking 用于 x-www-form-urlencoded POST 时遇到问题
Posted
技术标签:
【中文标题】将 AFNetworking 用于 x-www-form-urlencoded POST 时遇到问题【英文标题】:Trouble using AFNetworking for x-www-form-urlencoded POST 【发布时间】:2015-07-26 15:52:41 【问题描述】:我在使用 AFNetworking 进行 x-www-form-urlencoded POST 时遇到问题。我的代码如下:
NSString *uniqueIdentifier = @"Bob's iPhone";
NSString *code = self.textField.text;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer=[AFHTTPRequestSerializer serializer];
NSDictionary *parameters = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"rw_app_id",code,@"code",uniqueIdentifier,@"device_id", nil];
[manager POST:@"http://www.somesite.co/promos/" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"JSON: %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@",error);
];
我收到错误:Error Domain=com.alamofire.error.serialization.response Code=-1011“请求失败:禁止 (403)”UserInfo=0x7f8f8bf49550 NSUnderlyingError=0x7f8f8bf59910“请求失败: 不可接受的内容类型:text/html"
我四处搜索以尝试解决此问题,并将请求序列化程序更改为:
manager.requestSerializer=[AFHTTPRequestSerializer serializer];
那里没有运气。我的服务器使用 NSURLSession 可以很好地处理这些类型的请求。但我想让它为 AFNetworking 工作。有人可以给我一些指示我可能做错了什么吗?
【问题讨论】:
【参考方案1】:这应该有帮助
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
或者用这个responseSerializer
代替requestSerializer
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
【讨论】:
我使用了第一个,如果我的服务器回显一个 JSON 字符串,它就可以工作。但是,如果它与其他任何内容相呼应,我会收到此错误:错误:错误域 = NSCocoaErrorDomain 代码 = 3840“操作无法完成。(可可错误 3840。)”(JSON 文本没有以数组或对象和允许选项开头片段未设置。)有什么办法可以解决这个问题吗? 这应该有帮助:AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; [self setResponseSerializer:responseSerializer]; 立即获取此错误:错误:错误域=NSCocoaErrorDomain Code=3840“操作无法完成。(Cocoa 错误 3840。)”(字符 0 周围的值无效。) UserInfo=0x7fc161450340 NSDebugDescription=字符 0 周围的值无效,NSUnderlyingError=0x7fc16165ea80 "请求失败:错误请求 (400)"以上是关于将 AFNetworking 用于 x-www-form-urlencoded POST 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 2.0 参数字典不适用于 GET 请求
用于 POST 的 AFNetworking 2.0 自定义标头
无法在 Today Extension 上使用 AFNetworking