我正在使用AFNetworking制作网络请求。我继承了NSURLProtocol,并且方法调整它以覆盖默认的NSURLSessionConfiguration并添加我的协议类来拦截Web请求。当调用canInit时,我尝试打印请求数据,特别是我想要正文和查询,但它总是为两者打印null。我知道请求被正确拦截,他们只是没有任何正文/查询数据。有人知道为什么吗?我如何获取身体数据?
答案 0 :(得分:2)
因此,在做了一些研究之后,我发现苹果文档对NSURLRequests主体和体流说了这个:
接收方将拥有HTTP正文或HTTP正文流,只能为请求设置一个。复制NSURLRequest对象时会保留HTTP正文流,但在使用NSCoding协议存档请求时会丢失。
因此,在检查了httpbodystream之后,我发现这是存储实际身体的地方。我不得不复制输入流,将其转换为数据,将其转换为字符串并打印。以下是我如何做到这一点的参考:
How to convert NSInputStream to NSString or how to read NSInputStream
答案 1 :(得分:0)
如果您在NSURLProtocol中这样做,它将无法正常工作,并且流将永远不会被打开:
[self.request.HTTPBodyStream open];
您必须这样做:
NSInputStream* stream = self.request.HTTPBodyStream;
[stream open];