ここに私がいるところがありNSURLSessionUploadTask
ます:
- iOS アプリケーションが
NSURLSessionUploadTask
POST を使用して開始する - サーバーが HTTP POST リクエストを受け取る
- サーバーはリクエストのコンテンツを読み取り、データがアップロードされます
- サーバーは、以下で構成される HTTP 応答を iOS に送信します。
HTTP/1.1 200 OK サーバー: BaseHTTP/0.3 Python/2.7.10 日付: 2015 年 10 月 30 日 (金) 16:15:21 GMT コンテンツタイプ: text/html コンテンツの長さ: 96 <html><head><title>POST RESPONSE</title></head><body><p>ファイルがアップロードされました.</p></body></html>
- iOS アプリケーションが応答を受信し
NSLogs
、NSURLSessionTaskDelegate -> URLSession:task:didCompleteWithError:
<NSHTTPURLResponse: 0x15d95110> { URL: http://10.157.239.129:42000/} { ステータス コード: 200、ヘッダー { 「内容の長さ」= 96; "Content-Type" = "text/html"; Date = "2015 年 10 月 30 日金曜日 16:15:21 GMT"; サーバー = "BaseHTTP/0.3 Python/2.7.10"; } }
- ただし、
NSLog
メソッドの場合の応答コンテンツにしようとするとNSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
- (void)URLSession:(NSURLSession *)セッション dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)データ { // データ タスクがデータを受信したときに呼び出されます (直接のアップロードには適用されませんか?) if (データ != NULL) { NSLog(@"%s: %@", __PRETTY_FUNCTION__,[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); } そうしないと { NSLog(@"%s: しかし、実際のデータは受信されませんでした。", __PRETTY_FUNCTION__); } // 「アクティブ」またはフォアグラウンドでない場合は、背景情報をコンソールに記録します if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) { [BackgroundTimeRemainingUtility NSLog]; } }
- が呼び出され、出力用にこれを取得します:
2015-10-30 12:15:22.648 NSURLSessionUploadTaskExample[215:7286] -[ViewController URLSession:dataTask:didReceiveData:]: (null)
- これについて奇妙なのは、データが null の場合、応答が if ステートメント ブロックをトリガーするべきではないということです!
- また、応答データが Wireshark 経由で iOS アプリケーションに送信されたという証拠もあります。サーバーからの HTTP 応答のパケット キャプチャを次に示します。
iOS が HTTP 応答でコンテンツを失っているように見える理由を誰か教えてもらえますか?