有没有一种简单的方法可以从 AFHTTPClient 获取失败块中的 http 状态代码?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以从 AFHTTPClient 获取失败块中的 http 状态代码?【英文标题】:is there an easy way to get the http status code in the failure block from AFHTTPClient? 【发布时间】:2011-12-12 03:02:46 【问题描述】:我看到有一个可以修改的接受的http状态码列表,但我认为如果我能在失败块中获得http状态码会更简洁..
好的,用操作对象找到答案了
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"error code %d",[operation.response statusCode]);
];
【问题讨论】:
【参考方案1】:好的,用操作对象找到答案了
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"error code %d",[operation.response statusCode]);
];
【讨论】:
这可能也有帮助[operation.request HTTPMethod]
我知道这已经过时了,但@wilhelmbot -- HTTPMethod 会给你类似 GET/POST/PUT... 之类的东西,可能对检查响应状态没有帮助。【参考方案2】:
在较新版本的 AFNetworking 中,您可以从错误中检索响应对象:
[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]
如果您正在进一步处理错误并且不想传递响应对象,这很方便。
【讨论】:
您可能需要先获取底层错误。NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
【参考方案3】:
对于 AFNetworking 3.0,使用
failure:^(NSURLSessionTask *operation, NSError *error)
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
httpResponse.statusCode;
NSLog(@"status code: %li", (long)httpResponse.statusCode);
【讨论】:
【参考方案4】:NSInteger operationStatusCode = [operation.error code];
NSInteger httpStatusCode = operation.response.statusCode;
如果请求被取消/无法访问/超时,httpStatusCode
将始终为0
。
或者,您可以通过了解operationStatusCode
来确定问题。这是一个NSError
对象。
operationStatusCode
将是-1009
。
如果取消操作队列,operationStatusCode
将变为 -999
。
您可以在Apple's documentation 中查看所有其他NSError
代码及其描述
【讨论】:
【参考方案5】:我已经能够使用 Swift 3 获得状态码:
((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
as! HTTPURLResponse).statusCode
【讨论】:
【参考方案6】:这对我有用 在您的请求中添加以下行
manager.requestSerializer = [AFJSONRequestSerializer 序列化器];
【讨论】:
以上是关于有没有一种简单的方法可以从 AFHTTPClient 获取失败块中的 http 状态代码?的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种简单的方法可以从布尔表达式中从 pandas DataFrame 中提取行?
有没有一种简单的方法可以从 AFHTTPClient 获取失败块中的 http 状态代码?
有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?