gpt4 book ai didi

ios - 使用 NSURLSession 处理 HTTP 错误的最佳实践?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:11 25 4
gpt4 key购买 nike

来自 apple's doc - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error 只会通过error参数报告客户端错误。

Note: NSURLSession does not report server errors through the error parameter. The only errors your app receives through the error parameter are client-side errors, such as being unable to resolve the hostname or connect to the host. The error codes are described in URL Loading System Error Codes. Server-side errors are reported through the HTTP status code in the NSHTTPURLResponse object.

但是,当我在 iOS9 中使用 NSURLSessionDataTask 进行测试时,目前苹果似乎将一些 HTTP 错误映射到 NSURLError .例如,404 to NSURLErrorFileDoesNotExist .这个事实打破了我们之前的一些假设,并且many snippet also take the error parameter as connection error ,这将是绝对错误的。


我尝试搜索并发现 Apple 可能只在 NSURLSessionDownloadTask 中提到了这个变化。 .并且没有很好地记录这些 map 是如何应用的。

Unlike NSURLSessionDataTask or NSURLSessionUploadTask, NSURLSessionDownloadTask reports server-side errors reported through HTTP status codes into corresponding NSError objects.


我个人认为 Apple 的开发团队犯了一个大错误;并且文档仍然不一致,不真实,甚至两年过去了也没有任何更新。

任何人都有关于此更改的更多信息,何时引入? 现在区分连接错误和 HTTP 错误的最佳方法是什么。

最佳答案

答案一如既往。如果您的服务器发送带有 200 错误代码的错误(例如在 JSON 响应中),您将必须自行处理该检查。否则:

  • 如果您关心服务器发送的特定 HTTP 状态代码,请实现 didReceiveResponse 委托(delegate)方法并拦截错误。
  • 如果您只关心请求失败而不关心原因,您肯定会通过完成回调中的错误参数得到一些错误,但不能保证得到任何特定的错误。

请注意,成功定义为:

  • 结果代码 200(正常)
  • 结果代码 304(未修改)
  • 重定向到返回 200 或 304 的页面

如果您的定义不同(例如,如果您的服务器通过重定向到错误页面来响应无效 URL),您需要添加一个委托(delegate)方法来检测重定向并将其视为错误。

关于ios - 使用 NSURLSession 处理 HTTP 错误的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com