AFNetworking错误信息解析

最近在做文件上传功能的时候遇到了一些问题,有关AFNetworking失败的一些错误码,这里整理一下,以免以后再踩坑:

【1】错误码-999,错误信息具体如下:

Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://test.com/xxxxxx, NSLocalizedDescription=cancelled, NSErrorFailingURLKey=https://test.com/xxxxxx}

原因和代码如下:

AFHTTPSessionManager *manage = [[AFHTTPSessionManager alloc] init];;
        AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//报错时使用的证书校验方式为AFSSLPinningModeCertificate,但此时访问的url证书校验并未成功,所以更改为AFSSLPinningModeNone即可
        policy.validatesDomainName = YES;
        manage.securityPolicy = policy;

【2】错误码-1011,404,错误信息如下:

Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: not found (404)" UserInfo={NSLocalizedDescription=Request failed: not found (404), NSErrorFailingURLKey=https://test.com/xxxxxx, com.alamofire.serialization.response.error.data=<>, com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x60400c03ee80> { URL: https://test.com/xxxxxx } { Status Code: 404, Headers {
	Content-Type : [
	application/octet-stream
],
	Content-Length : [
	0
],
	Server : [
	nginx
],
	Date : [
	Wed, 16 May 2018 10:22:10 GMT
]
} }}

看到这个错误码请不要怀疑,这个就是你要访问的url访问不到所导致的,请检查你的URL

【3】错误码3840,400,错误信息如下

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set., NSUnderlyingError=0x6000058569e0 {Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo={NSLocalizedDescription=Request failed: bad request (400), NSErrorFailingURLKey=https://test.com/xxxxxx , com.alamofire.serialization.response.error.data=<3c68746d 6c3e0a3c 68656164 3e0a3c6d 65746120 68747470 2d657175 69763d22 436f6e74 656e742d 54797065 2220636f 6e74656e 743d2274 6578742f 68746d6c 3b206368 61727365 743d4953 20343030 3c2f6832 3e0a3c70 3e50726f 626c656d 20616363 65737369 6e67202f 772f6578 7465726e 616c2f75 706c6f61 6466696c 652e2052 6561736f 6e3a0a3c 7072653e 20202020 52657175 69726564 204d756c 74697061 72744669 6c652070 6172616d 65746572 20276669 6c652720 6973206e 6f742070 72657365 6e743c2f 7072653e 3c2f703e 3c687220 2f3e3c69 3e3c736d 616c6c3e 506f7765 72656420 6279204a 65747479 3a2f2f3c 2f736d61 6c6c3e3c 2f693e3c 62722f3e 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 0a3c6272 2f3e2020 >, com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x60400c62b5a0> { URL: https://test.com/xxxxxx  } { Status Code: 400, Headers {
	Date : [
	Tue, 15 May 2018 01:22:33 GMT
],
	Content-Type : [
	text/html;charset=ISO-8859-1
],
	Content-Length : [
	1476
],
	Cache-Control : [
	must-revalidate,no-cache,no-store
],
	Server : [
	nginx
]
} }}}}

这是是你填充数据的问题,请检查你的数据设置是否正确,刚出现这个问题的时候看描述以为是服务器端返回的格式不是约定的json所以不能解析造成的,但是请服务端同事核对了返回数据确实是json,然后怀疑以下返回数据可解析格式未设置@"text/json",检查后发现也设置了

AFHTTPSessionManager *manage = [[AFHTTPSessionManager alloc] init];
        manage.responseSerializer = [[AFJSONResponseSerializer alloc] init];
        manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"application/x-www-form-urlencoded", @"multipart/form-data", @"text/plain", @"image/jpeg", @"image/png", @"application/octet-stream",nil];

后来经过进一步的查阅资料发现,因为是文件上传,所以直接使用了NSData拼接导致的问题,错误代码示例如下:

NSData *data = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMapped error:nil];
    [[AFHTTPSessionManager shareInstance] POST:URL_KANO_UPLOADFILE parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        [formData appendPartWithFormData:data name:@"file"];//此处不可这样拼接
    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)    {
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    }];

而应该使用对应的mimeType类型做区分拼接

[[AFHTTPSessionManager shareInstance] POST:URL_KANO_UPLOADFILE parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        NSError *error;
        NSURL *fileURL = [NSURL fileURLWithPath:filePath];
        [formData appendPartWithFileURL:fileURL
                                   name:@"file"
                               fileName:fileName
                               mimeType:@"image/jpeg"
                                  error:&error];
    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    }];

具体的mimeType类型此处不再赘述,请读者自行查阅学习。

原文地址:https://www.cnblogs.com/xiaobaichangan/p/9047850.html

时间: 2024-11-10 15:19:23

AFNetworking错误信息解析的相关文章

解析内核错误信息

BUG: sleeping function called from invalid context at mm/slub.c:795in_atomic(): 1, irqs_disabled(): 128, pid: 0, name: swapper[<c0038d70>] (unwind_backtrace+0x0/0xe4) from [<c00a0400>] (__kmalloc+0x6c/0xf4)[<c00a0400>] (__kmalloc+0x6c/0x

SxsTrace程序追踪 &amp;&amp; 错误信息分析

先贴错误:应用程序无法运行,并行配置不正确 ,使用命令行sxstrace.exe.百度解决版本. 起因:同事给我一 EXE,然后基于 其进行开发 dll和模块,但是无法加入进程,无法运行. SxsTrace使用 1.程序无法运行, sxstrace.exe进行追踪. 1.测试本地命令能否成功执行. cmd 下,任意目录,c:\> sxstrace 回车: 2.转(cd)至程序所在目录,运行命令:SxsTrace Trace -logfile:SxsTrace.etl,启动跟踪: 3.运行程序(可

MySQL主从多种架构部署及常见错误问题解析

本文的主要内容有mysql复制原理,mysql一主多从.双主架构的示例解读,以及mysql在主从复制架构实践中的常见错误问题和解决方法. 一 mysql复制原理 1 原理解读 mysql的复制(replication)是异步复制,即从一个mysql实列或端口(Master)复制到另一个mysql实列的或端口(slave):复制操作由3个进程完成,其中2个(SQL进程和I/O进程)在Slave上,另一个在Master上:要实现复制,必须打开Master端的二进制日志(log-bin),log-bi

PHP error_log()将错误信息写入日志文件

error_log() 是发送错误信息到某个地方的一个函数,在程序编程中比较常见,尤其是在程序调试阶段. bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) 把错误信息发送到 web 服务器的错误日志,或者到一个文件里. message 应该被记录的错误信息.信息长度限制:The default seem to be 1024

Android错误信息的汇总

犯过的错给自己提个醒 [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requirement! [2011-01-19 16:39:10 - ApiDemos] Device API version is 8 (Android 2.2) 原因: 不影响正常运行.在AndroidManifest.xml文件中没有加API的版本号,在<manifest> </

PHP中的错误信息

PHP中的错误信息 php.ini中配置错误消息 在PHP4中,没有异常 Exception这个概念,只有 错误Error.我们可以通过修改php.ini 文件来配置用户端输出的错误信息. 在php.ini 中,一个分号 : 表示注释.Php.ini 将能够显示的错误类型分为如下种类.; E_ALL -所有的错误和警告,(不包含E_STRICT). ; E_ERROR -致命的运行时错误; E_RECOVERABLE_ERROR -可由异常处理机制所捕捉 (catch/handle) 的错误;

[转]Jquery中AJAX错误信息调试参考

下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持. timeout Number 设置请求超时时间(毫秒).此设置将覆盖全局设置. async

错误信息 NSError

一.获取系统的错误信息 比如移动文件时,获取文件操作错误: NSError *e = nil;[[NSFileManager defaultManager] moveItemAtPath:sourcePath toPath:targetPath error:&e];if (e) { NSLog(@"move failed:%@", [e localizedDescription]);} 先定一个空的错误信息 NSError *e = nil; 取地址 &e 如果有错误信

ajax异步参数详解及alax错误信息error分析

一.$.ajax()的参数列表 ↑ 下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持. timeout Number 设置请求超时时间(毫秒).