【问题标题】:How to get the response data out of the NSHTTPURLResponse in the callback of AFJSONRequestOperation?如何在AFJSONRequestOperation的回调中从NSHTTPURLResponse中获取响应数据?
【发布时间】:2012-05-16 22:46:56
【问题描述】:

我有一种情况,我需要从仅包含 NSHTTPURLResponse 的回调块中访问 AFJSONRequestOperation 的原始响应数据。我能够从 NSHTTPURLResponse 中获取 statusCode,但看不到任何获取原始数据的方法。有没有人知道的好方法可以从此操作的失败回调块中访问它?

【问题讨论】:

    标签: ios afnetworking afjsonrequestoperation nshttpurlresponse


    【解决方案1】:

    NSHTTPURLResponse只包含HTTP头信息;没有身体数据。所以不,这是不可能的。如果您对此代码有任何控制权,请让块或方法传递操作本身并获取responseDataresponseJSON

    【讨论】:

    • Matt,我就是这么想的,最后我确实提到了获取 responseData 的操作,但那样确实感觉很笨拙。除了返回 responseData 以及 NSHTTPURLResponse 的当前方法之外,您是否考虑过添加另一种方法?
    • 你说的是什么方法?所有具有回调的 AFN 方法都会返回您可能需要了解的有关操作状态的所有信息——即操作对象本身,以及其他一些显着部分。
    • 我特指JSONRequestOperationWithRequest:success:failure:这个方法
    • 在失败块中我可以参考 NSURLResponse 'response',但正如你之前提到的,它只包含 HTTP 标头信息,没有正文数据。但在某些情况下,即使是失败,我也需要(而且我认为其他人会需要)查看返回的实际 responseData。我知道除了通过“操作”对象之外没有其他方法可以实现它。所以,我想知道的是,您是否考虑过在 responseData 的返回块中添加一个参数......也许这对于这个来说太极端了。
    • 新的 AFHTTPSessionManager 怎么样?你没有在那里得到操作对象
    【解决方案2】:

    在来自responseJSON 的回调中,您可以使用response.result.valueString(data:response.data!, encoding: .utf8)DataResponse<Any> 对象获取正文。

    您无法从response.response 获取它,这是一个NSHTTPURLResponse 对象。这只有标题信息。

    Alamofire.request(URL(string: "https://foo.com")!).validate(statusCode: 200..<300).responseJSON() { response in
        let body = response.result.value
    }
    

    如果 http 响应未验证上述内容无效。但这确实:

    Alamofire.request(URL(string: "https://foo.com")!).validate(statusCode: 200..<300).responseJSON() { response in
        let body = String(data:response.data!, encoding: .utf8)
    }
    

    【讨论】:

      【解决方案3】:

      老问题,但无论如何......

      您不需要获取操作对象,您可以轻松地执行以下操作:

      NSData * data = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:nil]];
      

      回调接收到的 JSON id。

      【讨论】:

      • JSON 对象在失败回调块中可能为 nil,因为它可能由于不正确的 json 而失败。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2023-02-09
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      相关资源
      最近更新 更多