【问题标题】:printing NSURLRequest body/query always prints null打印 NSURLRequest 正文/查询总是打印 null
【发布时间】:2023-03-28 15:12:01
【问题描述】:

我正在使用 AFNetworking 发出 Web 请求。我对 NSURLProtocol 进行了子类化,并对其进行了调配以覆盖默认的 NSURLSessionConfiguration 并添加我的协议类来拦截 Web 请求。当调用 canInit 时,我尝试打印请求数据,特别是我想要正文和查询,但它总是为两者打印 null。我知道请求被正确拦截,它们只是没有任何正文/查询数据。有人知道为什么是这样吗?如何获取身体数据?

【问题讨论】:

  • 您能给我们看一些代码吗? :)
  • 那将是相当乏味的,但我很高兴地说我发现了这个问题并正在写下来! =)

标签: ios objective-c http afnetworking


【解决方案1】:

所以在做了一些研究之后,我发现苹果文档是关于 NSURLRequests 正文和 bodystream 的:

接收者将有一个 HTTP 正文或一个 HTTP 正文流,只能为请求设置一个。复制 NSURLRequest 对象时会保留 HTTP 主体流,但使用 NSCoding 协议归档请求时会丢失。

所以,在检查了 httpbodystream 之后,我发现这是存储实际身体的地方。我必须复制输入流,将其转换为数据,将其转换为字符串并打印。以下是我如何做到这一点的参考:

How to convert NSInputStream to NSString or how to read NSInputStream

【讨论】:

    【解决方案2】:

    如果你在 NSURLProtocol 中这样做,它就不起作用,并且永远不会打开流:

    [self.request.HTTPBodyStream open];
    

    你必须这样做:

    NSInputStream* stream = self.request.HTTPBodyStream;
    [stream open];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-09
      • 2020-11-09
      • 2016-03-27
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多