AFNetworking 请求报错 NSCocoaErrorDomain Code=3840 查看Response数据

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x9152780 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

有时候请求后台,爆出3840的错误码,这是返回结果格式解析错误。这时候又不能在项目代码中直接查看到返回的数据。那就只能在AFNetWorking的源码中去查看返回的Response。在AFURLSessionManager.m文件中,找到代码,并插入打印日志代码,将返回的结果打印出来,

#pragma mark - NSURLSessionTaskDelegate

- (void)URLSession:(__unused NSURLSession *)session
              task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu"
    __strong AFURLSessionManager *manager = self.manager;

    __block id responseObject = nil;

    __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
    userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer;

    //Performance Improvement from #2672
    NSData *data = nil;
    if (self.mutableData) {
        data = [self.mutableData copy];
        //We no longer need the reference, so nil it out to gain back some memory.
        self.mutableData = nil;
    }

    if (self.downloadFileURL) {
        userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL;
    } else if (data) {
        userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data;
    }
    // 添加下面这两行代码查看服务器的返回是什么,(猜测是服务器的问题,所以需要服务器端,添加 try...catch 捕获异常,并返回给调用方)
    NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", dataStr);

这样可以快速的帮助我们找到问题是什么。

### 回答1: 网络请求报错 code = 1002 通常表示 WebSocket 连接关闭的异常,可能是因为网络中断、服务器关闭或其他原因导致 WebSocket 连接失败。解决此问题的方法主要有以下几种: 1. 检查网络连接是否正常,确保网络连接稳定。 2. 检查服务器是否正常工作,可以尝试使用其他网络设备或浏览器连接服务器,或联系服务器管理员排查问题。 3. 确认 WebSocket 协议是否正确,可以查看相应的文档或代码,检查协议是否符合规范。 4. 尝试使用其他 WebSocket 客户端或库进行连接,比如使用 Python 的 websocket 库或 JavaScript 的 WebSocket API 等。 5. 如果以上方法都无法解决问题,可以尝试重新启动客户端或服务器,或者重新编写代码进行调试。 ### 回答2: 网络请求报错 code = 1002 是指在进行网络请求时,服务器返回了一个错误码为1002的响应。这种错误通常表示客户端请求的参数或格式不正确,服务器无法正确处理请求。 要处理这个错误,我们可以按照以下步骤进行: 1. 检查网络连接:首先,我们需要确保设备与服务器的网络连接正常,确认网络稳定性,可以尝试重新连接网络或切换到其他网络。 2. 检查请求参数:错误码1002通常意味着客户端请求的参数或格式不正确。我们需要仔细检查请求的参数是否符合服务器的要求。可以检查请求的URL、请求方法(GET、POST等)、请求头、请求体等。确保请求参数的类型、格式、长度等都符合服务器的要求。 3. 检查请求头信息:某些情况下,服务器在处理请求时会根据请求的头信息进行判断和处理。我们需要检查请求的头信息是否正确,包括Content-Type、Authorization等。 4. 处理错误响应:在接收到错误码为1002的响应时,我们需要对错误进行处理。可以根据错误码进行相应的处理逻辑,比如重新发送请求、提示用户输入正确的参数、调整请求格式等。同时,我们也可以根据服务器返回的错误信息进行精确定位和解决问题。 5. 联系服务器管理员或开发人员:如果以上步骤都没有解决问题,我们可以联系服务器的管理员或开发人员,向他们反馈具体的错误信息和请求情况,寻求更详细的帮助和解决方案。 总之,处理网络请求报错code=1002的关键在于仔细检查请求参数和格式是否正确,并根据具体情况调整请求、处理错误响应。 ### 回答3: 网络请求报错 code = 1002 通常表示客户端请求出现了一些问题,以下是一些常见的处理方法: 1. 检查网络连接: 首先要确保网络连接正常,可以尝试刷新页面或者重新连接网络。如果使用的是Wi-Fi网络,可以尝试切换到移动数据网络或者连接其他可用的Wi-Fi网络。 2. 检查请求参数: code = 1002 可能是因为客户端发送的请求参数有误。需要仔细检查请求中的参数是否正确、完整,并且按照接口文档的要求进行填写。 3. 重新请求: 如果经过检查网络连接和请求参数之后依然出现 code = 1002 错误,可以尝试重新发送请求。有时候服务器可能会出现临时问题,重新发送请求可能会解决问题。 4. 检查服务器状态: 如果多次尝试之后仍然无法解决问题,可以考虑检查服务器的状态。可能是服务器出现了故障或者维护,导致无法正常处理请求。可以联系后端开发人员或者系统管理员进行排查和修复。 5. 查看错误日志: 如果有日志系统记录了请求错误的详细信息,可以查看相应的错误日志来获取更多的错误细节。根据错误日志提供的信息,可以更准确地判断和解决问题。 总之,处理网络请求报错 code = 1002 需要从网络连接、请求参数、重新请求、服务器状态和错误日志等方面进行综合考虑,逐一排查和解决可能的问题,最终找到引起报错的具体原因并修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值