打印 NSURLRequest body/query 总是打印 null

printing NSURLRequest body/query always prints null

我正在使用 AFNetworking 发出网络请求。我 subclassed NSURLProtocol 和 method swizzled 它以覆盖默认的 NSURLSessionConfiguration 并添加我的协议 class 来拦截网络请求。当调用 canInit 时,我尝试打印请求数据,特别是我想要 body 和查询,但它总是为两者打印 null。我知道请求已被正确拦截,它们只是没有任何 body/query 数据。有人知道为什么吗?我该如何获取 body 数据?

所以在做了一些研究之后,我发现苹果文档对 NSURLRequests body 和 bodystream 是这样说的:

The receiver will have either an HTTP body or an HTTP body stream, only one may be set for a request. A HTTP body stream is preserved when copying an NSURLRequest object, but is lost when a request is archived using the NSCoding protocol.

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

如果您在 NSURLProtocol 中这样做,它不会工作并且流永远不会打开:

[self.request.HTTPBodyStream open];

你必须这样做:

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