2016-04-12 19 views
0

私はこの質問の投稿にあるさまざまなアイデアを何度も成功させようと多くの時間を費やしてきました。 私がcurlを使うと、希望のヘッダ:Content-Lengthが得られます。サーバーからContent-Length(httpヘッダー)を返すようにNSURLSessionを取得する方法。 Objective-c、ios

キー::ヴァリ:

- (void) trythis { 

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myURL]; 
    request.HTTPMethod = @"HEAD"; 


    NSURLSessionDownloadTask *uploadTask 
     = [session downloadTaskWithRequest:request 
       completionHandler:^(NSURL *url,NSURLResponse *response,NSError *error) { 
        NSLog(@"handler size: %lld", response.expectedContentLength); 
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; 
        NSDictionary* headers = [httpResponse allHeaderFields]; 
        NSArray *keys = [headers allKeys]; 
        for(NSString *key in keys){ 
         NSLog(@"key: %@ : %@", key, [headers valueForKey:key]); 
        } 
        NSLog(@""); 

       }]; 

    // 5 
    [uploadTask resume]; 
} 

それはこれらのヘッダを返します。ここでは

は(SO上のどこかにあります)私の最新の試みであるのAccept-エンコーディングを、ユーザーエージェント キー:サーバー: Apache/2.4.12 キー:接続:キープアライブ キー:最終更新日:土曜日、2015年6月13日23:03:46 GMT キー:コンテンツタイプ:オーディオ/ MPEG キー:受け入れ範囲:バイト キー:日付:火曜、2016年4月12日17時59分21秒GMT キー:コンテンツエンコード:gzipで(のMacBook上の)カールを使用して

私が手:

-I http://boulderhomegrown.com/fiddletunes/JerusalemRidge-100.mp3

カールHTTP/1.1 200 OK 日付:Tue、12 Apr 2016 14:55:17 GMT サーバー:Apache/2.4.12 最終更新日:2015年6月13日23:03:46 GMT ETag: "2ec0bc0-1a172e -5186e3ca6b55f " 受け入れ範囲:バイト のContent-Length:1709870 は異なります、ユーザーエージェント のContent-Type-エンコーディング受け入れ:オーディオ/ MPEG

NOTEのContent-Lengthを!!もちろん、URLは両方とも同じです。これは私の目的のインスタンス変数です.c。

+0

「response.expectedContentLength」で何を使いましたか? – jtbandes

+0

それは-1に戻った。 –

+0

curlコマンドがGETリクエストを実行していて、NSURLSessionがHEADリクエストを行っているようです。 'request.HTTPMethod = @" HEAD ";'を削除するとどうなりますか? – EricS

答えて

1

デフォルトでは、送信するリクエストにAccept-Encoding:gzip、deflateがあり、この場合のサーバーのapacheはヘッダーcontent-length(デフォルトでは大きなファイル)を追加しません。したがって、そのヘッダーをvalue:identityに置き換えるとします。これは、ファイルの正しいサイズを提供します。ここで

はコードです:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myURL]; 
request.HTTPMethod = @"HEAD"; 
[request addValue:@"identity" forHTTPHeaderField:@"Accept-Encoding"]; 

ただ、フィールドを追加する必要がカール-Iがないようにあなたが反応して右のヘッダーを持つことになります。

+0

Kaloyan、これはレスポンスにヘッダーのContent-Lengthが含まれるようにします。ありがとう、フォローアップの質問:完了ハンドラのNSURL *は、デバイス上のtmpファイルを指しています。ファイルはアップロードされましたか?そのディレクトリを表示するツールはありません。 –

関連する問題