NSURLProtocol MyGreatProtocol
kullanıyorum. BenNSURLProtocol Alt Sınıfı içindeki bir isteğin HTTPBody'si neden her zaman sıfırdır?
NSURLProtocol.registerClass(MyGreatProtocol)
Sonra ağ oturumları sırasında MyGreatProtocol
içindeki olayları almaya başlamak URL Yükleme sisteme ekleyin.
varsayalım ben
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()
Ben olmadığı isteğin HTTP gövde
1/3/3/7
,
MyGreatProtocol
içindeki mevcut olmasını bekliyoruz, benim protokolü kaydettikten sonra oturumu oluşturun.
MyGreatProtocol
İçinde, aşağıdaki yöntemleri geçersiz kılıyorum.
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'in diğer özellikleri korunmuş gibi görünüyor. URL, HTTP fiili, başlıklar vb. Hepsi burada. Vücudun doğasıyla ilgili belirli bir şey zor kalmaktadır.
HTTP Gövde Nil neden özel bir NSURLProtocol? size ulaşmadan önce
önce dosyalanmış radarlarında bazı benzer tartışmalar var gibi görünüyor (yani https://bugs.webkit.org/show_bug.cgi?id=137299)
HTTPBodyStream ayrıca içinde veri bulunmamaktadır – calql8edkos
Sonra bir hata buldunuz. Bu mümkün olmamalı. – dgatwood
Bu sorudaki kodu 'canInitWithRequest:' içine kopyaladım ve 'inputStream.read' için bir dönüş değeri aldım http://stackoverflow.com/questions/25476770/swift-create-byte-buffer-holder-for- nsstream/25482541 – calql8edkos