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



我在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]的一个条目中,但事实并非如此。

这个问题的答案<<我可以从NSHTTPURLResponse中的HTTP状态行访问"原因短语"吗>>建议更改服务器的行为方式,但这并不总是可用的选项。

知道吗?

NSHTTPURLResponse没有

实现公开数据的方法,HTTP RFC也不要求它这样做。 AFNetworking使用NSURLRequest/NSURLResponse,所以AFNetworking也不能给你。 另一方面,ASIHTTPRequest可以,因为它使用较低级别的CFNetwork框架。

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

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

相关内容

最新更新