2016-04-11 5 views
1

私は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

答えて

3

IIRC、身体データオブジェクトを透過的にURLローディングシステムにより、ストリーミング形式の体に変換します。あなたは、データを読み取るために必要がある場合:

  • オープンHTTPBodyStreamオブジェクト
  • 1つの注意点があり、それから

を身体データを読む:ストリームはrewindableではないかもしれないので、合格しませんそのオブジェクトを後で身体にアクセスする必要のある他のコードに要求します。残念ながら、新しいボディストリームを要求するメカニズムはありません(AppleのWebサイトのCustomHTTPProtocolサンプルコードプロジェクトのREADMEファイルを参照してください)。

+0

HTTPBodyStreamにもデータがありません – calql8edkos

+0

あなたはバグを発見しました。それは不可能ではありません。 – dgatwood

+0

この質問のコードを 'canInitWithRequest:'にコピーし、 'inputStream.read'に-1の戻り値を得ました。http://stackoverflow.com/questions/25476770/swift-create-byte-buffer-holder-for- nsstream/25482541 – calql8edkos

関連する問題