【问题标题】:NSURLConnection - Get HTTP status code on request failureNSURLConnection - 在请求失败时获取 HTTP 状态码
【发布时间】:2017-09-11 12:05:22
【问题描述】:

在 NSURLConnection 请求失败后,有什么方法可以获取 HTTP 状态码?根据文档,我可以从-connection:didReceiveResponse: 获取HTTP 状态码。但是,万一请求失败,只调用-connection:didFailedWithError:,到目前为止我还没有找到任何方法来获取该方法中的状态码。

p/s:我正在做一个非常古老、复杂的项目,而且很容易出错,所以我不能使用 AFNetworking 或 NSURLSession。

【问题讨论】:

  • 你打印出错误实例的用户信息了吗?通常它包含附加信息。
  • 我试过了,可惜没有状态码。
  • 能否添加错误实例的日志?

标签: objective-c nsurlconnection nsurlconnectiondelegate


【解决方案1】:

正如NSURLConnectionDataDelegate Protocol 的 Apple 文档中所述,仅当收到足够的数据以创建 NSURLResponse 对象时才会调用 connection:didReceiveResponse:。

虽然 NSURLResponse 对象可能在稍后才可用,但连接可以通过使用 connection:didReceiveData: 方法接收部分数据。请注意,这似乎排除了 HTTP 标头,仅包含响应的“数据”部分。可能有一种方法可以触发 didReceiveResponse: early 如果服务器提前知道将传输多少数据,尽管我对此还不够熟悉,无法确认。

请注意,响应数据通常以大约 1KiB 的数据块的形式出现,具体取决于各种网络设置,例如 MTU 以及服务器“刷新”其输出管道的频率。

祝你好运!

【讨论】:

  • 你确定状态码是-connctionDidReceiveData:收到的数据的一部分吗?
  • Hrm.. 好像你是对的,只返回实际的“数据”部分,并且 didReceiveResponse 包含实际的 .allHttpHeaders 字段。将需要更多调查。谢谢@AminNegm-Awad
  • 我研究得越多,似乎你想要实现的目标要么需要创建自己的网络流并手动处理响应,要么访问一些私有方法(不推荐!! ) 详见github.com/apportable/Foundation/blob/master/System/CFNetwork/…
  • 我很确定您可以按照我的评论中的建议通过 NSError 的实例获取 HTTP 状态代码。
  • 感谢您的cmets,但我找不到获取http代码的方法,我想我将不得不放弃这个。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 2020-03-29
  • 2018-05-04
  • 2020-07-18
  • 2011-08-02
  • 2015-06-08
  • 1970-01-01
  • 2017-06-02
相关资源
最近更新 更多