1

我正在从 iOS 应用程序切换ASIHTTPRequestAFNetworking

RF2616 (HTTP/1.1)通过“状态代码”和“原因短语”的组合定义了一个“状态行”。有时服务器会在这个“原因短语”中添加一些特定信息,我发现 ASIHTTPRequest 允许我通过以下方式轻松访问它相当方便

ASIHTTPRequest *request = ...;
NSString *reason = request.responseStatusMessage;

我的问题是我找不到任何方法来做到这一点AFHTTPRequestOperation

NSMutableURLRequest *request = ...;
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

在操作的完成/失败块中,我可以通过执行以下操作获取状态代码:

int statusCode = [operation.response statusCode];

但我找不到从哪里得到“原因短语”。

StackOverflow 上的一些答案表明它将位于其中一个条目中,[operation.response allHeaderFields]但事实并非如此。

对这个问题的回答 << Can I access "Reason Phrase" from the HTTP Status-Line in NSHTTPURLResponse >> 建议更改服务器的行为方式,但这并不总是可用的选项。

任何想法?

4

1 回答 1

3

NSHTTPURLResponse没有实现公开数据的方法,HTTP RFC 也没有要求这样做。AFNetworking 使用NSURLRequest/ NSURLResponse,因此 AFNetworking 也无法将其提供给您。另一方面,ASIHTTPRequest 可以,因为它使用较低级别的CFNetwork框架。

其他答案中给出的建议是将这些信息移动到您的标题或正文中,这是最好的答案。

您还可以向 Apple 提交增强请求,和/或坚持使用 ASIHTTPRequest。

于 2013-09-19T21:19:16.860 回答