使用AFNetworking的AFHTTPRequestOperation读取状态行(状态代码和原因短语)

时间:2013-09-19 06:21:09

标签: ios afnetworking asihttprequest http-1.1 rfc2616

我正在iOS应用中从ASIHTTPRequest切换到AFNetworking

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>> 建议改变服务器的行为方式,但这并不总是一个可用的选项。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

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

您也可以file an enhancement request with Apple和/或坚持使用ASIHTTPRequest。