我有一个HTTP基本服务器,我有时需要用户在登录前进行选择。我想我会通过在HTTP正文中发送一个带有json内容的HTTP响应401来提供客户端需要显示给用户的数据。
然而,我无法理解如何在willSendRequestForAuthenticationChallenge
方法中获得响应体内容。由于我使用基本认证并直接提供usr/pwd作为http " Authorization
"标头,因此每当用户无法登录时,或者当他/她需要做出我正在谈论的选择时,该方法就会被调用。
所以…我有NSURLAuthenticationChallenge
,但我看不出任何从那个对象读取主体的方法。
如果有人能帮忙,我真的很感激!
此时无法在请求过程中获取正文数据,因为URL请求可能会要求您在下载正文数据之前决定是否取消并重试身份验证。这是时间问题。
你可以做的是:
- 允许在没有凭证的情况下完成请求。这将导致URL连接下载响应体(错误消息)。然后,您的支持代码可以识别401响应,解析正文,并在重试中提供凭据。
- 可以选择将上述逻辑包装在自定义NSURLProtocol类中,以便它对应用程序的其余部分透明
另外:
- 在自定义HTTP报头中提供附加数据。我认为你可以从保护空间的failurerresponse方法中获得一个NSURLResponse对象,并从那里获得报头。
我不是100%肯定,它是可能的,但在这一点上得到头字段。当然,您可以使用NSURLProtocol或使用前面描述的自定义包装器代码来实现。