我怎样才能获得NSURLResponse身体?

时间:2010-06-10 12:16:48

标签: objective-c http-status-code-404 nsurlconnection nsurlrequest

我正在编写一个使用NSURLConnection与服务器连接的应用程序。

在委托方法didreceiveresponse中,如果状态代码为404,我取消连接,并且我希望显示一条消息,其中包含在服务器中生成的自定义错误。

问题在于,从响应对象,我只能获取状态码,标题,mimetype等,但没有正文。

如何从NSURLResponse获取正文消息?

1 个答案:

答案 0 :(得分:27)

为什么取消连接?毕竟,404也可以拥有内容正文。只是不要取消它,让程序调用下一个委托NSURLConnection方法。 当调用[内容正文]发送数据- (void)connection:(NSURLConnection *) didReceiveData:(NSData *)时,您需要在那里检索数据。 Read corresponding part in the docs

服务器对请求的响应可以视为两部分:描述内容的元数据和URL内容数据。 大多数协议通用的元数据由NSURLResponse类封装,包含MIME类型,预期内容长度,文本编码(如果适用)以及提供响应的URL。

NSURLConnection和NSURLDownload类提供了一个接口,用于建立由NSURLRequest对象指定的连接并下载内容。 NSURLConnection对象在从发起源接收代理时向其提供数据,而NSURLDownload对象将请求数据直接写入磁盘。这两个类都为响应重定向,身份验证挑战和错误条件提供了广泛的委托支持。

关于代表实现的示例:

-   (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData{
    NSLog(@"String sent from server %@",[[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding]);

}