如何在NSURLConnectionDelegate中获取http主体willSendRequestForAuthenticationChallenge

时间:2016-06-28 21:31:35

标签: ios objective-c nsurlconnection nsurlconnectiondelegate

我有一个HTTP Basic服务器,我有时需要用户在登录前进行选择。我想我是通过在HTTP正文中发送带有json内容的HTTP响应401来提供数据的。客户需要向用户展示。

然而,我不能让世界了解我如何在willSendRequestForAuthenticationChallenge方法中获得响应正文内容。因为我使用Basic Auth并直接将usr / pwd作为http" Authorization" header,只要用户无法登录,或者他/她需要进行我正在讨论的选择,就会调用此方法。

所以...我有NSURLAuthenticationChallenge,但是我看不到从那个物体读取身体的任何方法。

如果有人能提供帮助,我真的很感激!

1 个答案:

答案 0 :(得分:0)

您无法在请求过程中获取正文数据,因为URL请求可能会要求您在下载正文数据之前决定是否取消并重试身份验证。这是一个时间问题。

你能做的是:

  • 允许请求在没有凭据的情况下完成。这将导致URL连接下载响应正文(错误消息)。然后,您的支持代码可以识别401响应,解析正文,并在重试时提供凭据。
  • 可选择将上述逻辑包装在自定义NSURLProtocol类中,以使其对应用程序的其余部分变得透明

可替换地:

  • 在自定义HTTP标头中提供其他数据。我想你可以从保护空间的failureResponse方法中获取一个NSURLResponse对象,并从那里获取标题。

我并不是100%确定在那个时候可以获得标题字段。当然,您可以使用NSURLProtocol或自定义包装器代码执行此操作,如前所述。