【问题标题】:How can I get NSURLResponse body?如何获得 NSURLResponse 正文?
【发布时间】:2011-03-02 03:34:18
【问题描述】:

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

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

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

如何从NSURLResponse 获取正文消息?

【问题讨论】:

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


    【解决方案1】:

    为什么要取消连接?毕竟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]);
    
    }
    

    【讨论】:

    • 但是,如果您正在执行同步调用,则您没有使用委托方法。你马上得到结果:[NSURLConnection sendSynchronousRequest:request returnedResponse:&response error:&err]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多