私はNSURLProtocol MyGreatProtocol
を持っています。私はその後、ネットワークセッション中にMyGreatProtocol
内部イベントの受信を開始URLローディングシステム、NSURLProtocolサブクラス内のリクエストのHTTPBodyが常にnilですか?
NSURLProtocol.registerClass(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()
は、私は、MyGreatProtocol
の内側に存在するように、リクエストのHTTPボディ1/3/3/7
を期待し、私は私のプロトコルを登録した後、セッションを作成したとします。
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)
HTTPBodyStreamにもデータがありません – calql8edkos
あなたはバグを発見しました。それは不可能ではありません。 – dgatwood
この質問のコードを 'canInitWithRequest:'にコピーし、 'inputStream.read'に-1の戻り値を得ました。http://stackoverflow.com/questions/25476770/swift-create-byte-buffer-holder-for- nsstream/25482541 – calql8edkos