将 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 请求

AFNetworking 的摘要访问身份验证 [关闭]

用于 POST 的 AFNetworking 2.0 自定义标头

无法在 Today Extension 上使用 AFNetworking

无法在 Today Extension 上使用 AFNetworking

AFNetworking 2.0:POST 返回成功响应但服务器未更新