У меня есть NSURLProtocol, слушающий запросы POST на UIWebView. Я пытаюсь захватить параметры POST и сначала прочитать здесь , что httpBody всегда равен нулю, поскольку объекты данных тела преобразуются в тела в потоковом стиле.
Затем я использую следующее расширение, чтобы открыть объект HTTPBodyStream и прочитать данные тела из него.
extension InputStream {
func readfully() -> Data {
var result = Data()
var buffer = [UInt8](repeating: 0, count: 4096)
open()
var amount = 0
repeat {
amount = read(&buffer, maxLength: buffer.count)
if amount > 0 {
result.append(buffer, count: amount)
}
} while amount > 0
close()
return result
}
}
Проблема в том, что мои данные bodyData, прочитанные из входного потока, также равны нулю. Внутри MyUrlProtocol я переопределяю следующие методы.
override class func canInit(with request: URLRequest) -> Bool
if request.httpMethod == "POST" {
print(request.url?.absoluteString) //ok show correct POST url
let bodyData = request.httpBodyStream?.readfully() //nil
print(String(data: bodyData!, encoding: String.Encoding.utf8))
return true
}
return false
}
override class func canonicalRequest(for request: URLRequest) -> URLRequest {
return request
}
override func startLoading() {
let bodyData = self.request.httpBodyStream?.readfully() //nil
}
override func stopLoading() {
let bodyData = self.request.httpBodyStream?.readfully() //nil
}
Почему httpBodyStream также является Nil внутри моего собственного NSURLProtocol?
Я могу правильно видеть параметры POST для того же URL-адреса с помощью инструмента сетевого разработчика в моем веб-браузере.