我在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。