AFNetworking 2.0:多部分 POST 时出现错误 503

Posted

技术标签:

【中文标题】AFNetworking 2.0:多部分 POST 时出现错误 503【英文标题】:AFNetworking 2.0 : error 503 when multipart POST 【发布时间】:2014-02-13 15:47:05 【问题描述】:

我正在使用 AFNetworking 2.1.0 在我的 iPad 应用程序和服务器之间进行通信。

我继承了 AFHTTPSessionManager 并毫无问题地使用以下内容:

[self POST:kAPIPath
parameters:params
   success:^(NSURLSessionDataTask *task, id responseObject) 
                  successBlock(responseObject[@"result"]);
              
   failure:^(NSURLSessionDataTask *task, NSError *error) 
                  failureBlock(error);
              ];

但是当我添加多部分时,我的服务器返回

请求失败。错误:请求失败:服务不负责任(503)

所以这不起作用:

[self POST:kAPIPath
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
                [formData appendPartWithFileData:uploadFile
                                            name:@"file"
                                        fileName:@"photo.jpg"
                                        mimeType:@"image/jpeg"];
                
   success:^(NSURLSessionDataTask *task, id responseObject) 
                  successBlock(responseObject[@"result"]);
              
   failure:^(NSURLSessionDataTask *task, NSError *error) 
                  failureBlock(error);
              ];

但是当我这样做时它也会返回错误 503(没有修改 formData):

[self POST:kAPIPath
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 

                
   success:^(NSURLSessionDataTask *task, id responseObject) 
                  successBlock(responseObject[@"result"]);
              
   failure:^(NSURLSessionDataTask *task, NSError *error) 
                  failureBlock(error);
              ];

或者这个(块为零):

[self POST:kAPIPath
parameters:params
constructingBodyWithBlock:nil
   success:^(NSURLSessionDataTask *task, id responseObject) 
                  successBlock(responseObject[@"result"]);
              
   failure:^(NSURLSessionDataTask *task, NSError *error) 
                  failureBlock(error);
              ];

我读了很多帖子,但不明白这是从哪里来的。错误 503 的意思是

503 服务不可用 服务器当前不可用(因为它超载或停机维护)。 [2]通常,这是一种临时状态。有时,这在测试服务器上也可能是永久性的。

但是如果我使用没有多部分的 POST,我没有问题。有谁知道这可能来自哪里?

非常感谢!!!

【问题讨论】:

500个家庭错误显示服务器端存在问题 【参考方案1】:

你说的没错,multiform的使用方法如下。我建议你检查你的服务器。尝试使用Postman 直接在浏览器中调试您的多窗体。

 [self POST:kAPIPath
parameters:params
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
                [formData appendPartWithFileData:uploadFile
                                            name:@"file"
                                        fileName:@"photo.jpg"
                                        mimeType:@"image/jpeg"];
                
   success:^(NSURLSessionDataTask *task, id responseObject) 
                  successBlock(responseObject[@"result"]);
              
   failure:^(NSURLSessionDataTask *task, NSError *error) 
                  failureBlock(error);
              ];

【讨论】:

【参考方案2】:

我解决了我的问题。

我认为这与there 所述和评论的问题相同。这似乎是 AFNetworking 2.0 中的一个(最近)已知问题,具有多部分形式:issue 1398。我使用了底部 Matt 提出的解决方法,它正在工作。

感谢您的回答。

【讨论】:

以上是关于AFNetworking 2.0:多部分 POST 时出现错误 503的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 多部分/表单数据上传到 mySQL

为啥 AFNetworking POST 多部分请求必须在主队列上同步运行?

使用 AFNetworking 2.0 发送 POST 数据

AFNetworking 2.0 POST 请求无法快速工作

使用 AFNetworking 2.0 的 POST 请求 - AFHTTPSessionManager

AFNetworking 2.0 HTTP POST 进展