У меня есть свой 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)