【发布时间】:2016-08-01 23:43:20
【问题描述】:
我有我的 NSURLProtocol MyGreatProtocol。我将它添加到 URL 加载系统中,
NSURLProtocol.registerClass(MyGreatProtocol)
然后我开始在网络会话期间接收 MyGreatProtocol 内部的事件。
假设我在注册协议后创建会话,
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: NSURL(string:"http://example.com")!, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 2.0) //arbitrary 404
request.HTTPBody = ([1, 3, 3, 7] as [UInt8]).toNSData
print("body data: \(request.HTTPBody)") //prints `Optional(<01030307>)`
request.HTTPMethod = "POST"
session.dataTaskWithRequest(request) { (data, response, err) in
print("data: \(data)\nresponse: \(response)\nerror\(err)")
}.resume()
我希望请求的 HTTP 正文 1/3/3/7 出现在 MyGreatProtocol 中,但它不存在。
在MyGreatProtocol 中,我重写了以下方法。
override class func canonicalRequestForRequest(request: NSURLRequest) -> NSURLRequest {
print(request.HTTPBody) //prints nil
return request
}
override class func canInitWithRequest(request: NSURLRequest) -> Bool {
print(request.HTTPBody) //prints nil
return true
}
override func startLoading() {
print(self.request.HTTPBody) //prints nil
}
似乎保留了 NSURLRequest 的其他属性。 URL、HTTP 动词、标头等都在那里。关于身体性质的一些具体情况仍然难以捉摸。
为什么 HTTP Body Nil 在自定义 NSURLProtocol 中?
之前提交的雷达似乎有一些类似的讨论(即https://bugs.webkit.org/show_bug.cgi?id=137299)
【问题讨论】:
标签: ios swift nsurlprotocol