我正在研究iOS应用程序并面临一个奇怪的问题。我正在使用AFNetworking框架与服务器进行通信(HTTPS通信)。我正在使用" getStudentData"从服务器检索学生数据。 Web服务API。这是邮寄请求。它适用于除一个用户ID之外的所有用户ID。当我们有超过450名学生的数据时,它会失败。以下是错误详情
Error Domain=NSURLErrorDomain Code=-1017 "cannot parse response" UserInfo=0x7bf9c7d0 {NSErrorFailingURLStringKey=https://www.fdmobileservices.com/mAccountsWeb/services/speedpass/rpc, _kCFStreamErrorCodeKey=-1, NSErrorFailingURLKey=https://www.fdmobileservices.com/mAccountsWeb/services/speedpass/rpc, NSLocalizedDescription=cannot parse response, _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x7bf9a380 "cannot parse response"}
根据错误描述,它告诉"无法解析",所以我认为这可能是由于服务器正在返回" nil"或JSON格式以外的一些数据。
但我无法追踪它,因为从应用程序方面它直接进入下面的方法,
- (void)connection:(NSURLConnection __unused *)connection
didFailWithError:(NSError *)error
从应用程序端到跟踪根本原因有什么办法吗?除了一个用户登录之外,此方法适用于其他用户登录。
我尝试使用Web客户端通过相同的用户登录访问此服务,它运行良好并返回450名学生的数据。我认为由于某种原因,iOS网络层拒绝这一点。我想知道。
提前致谢。
答案 0 :(得分:0)
您可以看到here,kCFURLErrorCannotParseResponse = -1017
。所以可能这就是说参数有问题。
如果您正在使用AFNetworking 2.0,我建议您使用多个断点深度调试响应流。
特别是尝试在方法开头的AFURLResponseSerialization.m
设置断点:
- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError *__autoreleasing *)error;
在方法内部,如果以下条件为真,则可能存在错误(但您可以进入validateResponse:data:error:
以更好地理解错误):
if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error])
如果上述条件为假,您可以检查生成的responseString
:
NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding];
如果您期待json数据,请检查responseString
不是nil
且data
数据是否有效,也可以是stringEncoding
。
同时确保您收到的contentType是您期望的内容类型。