2

UIWebView認証が必要なWebサーバーからファイル(PDF、Word、Excel)をダウンロードするものがあります。これを行うためにNSMutableData、Appleの推奨事項に従って、認証を処理し、オブジェクトにデータを入力しました。

データをロードするときにUIWebView、Mime Typeをハードコーディングしたくないのですが、これを回避する方法について何かアイデアはありますか?

[_webView loadData:data MimeType: @"application/msword" textEncodingName: @"UTF-8" baseURL:[NSURL URLWithString: @""]];

以下を試しましたが、常に「text/html」が返されます。

- (void)connection:(NSURLConnection *)connection didRecieveResponse:(NSURLResponse *)response {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
    NSString *mimeType = [httpResponse MIMEType];
    NSLog(@"MIMETYPE: %@",mimeType);
}

応答ヘッダーは次のとおりです。

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 50176
Content-Type: application/msword
Expires: -1
Server: Microsoft-IIS/7.5
Content-Disposition: attachment; filename=test.doc
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET

編集: ヘッダーで何か奇妙なことが起こっています。

私が最初に投稿したヘッダーはChromeとFiddler2で検証されましたが、NSURLConnectionは実際に次のものを受信して​​います。

"Content-Type" = "text / html; charset = us-ascii、application / msword";
"Content-Length" = "341、79360";

以下のスニペットは、これを確認するために使用されました。

- (void)connection:(NSURLConnection *)connection didRecieveResponse:(NSURLResponse *)response {

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
    if ([response respondsToSelector:@selector(allHeaderFields)]) {
        NSDictionary *dictionary = [httpResponse allHeaderFields];
    NSLog([dictionary description]);
    }
}

なぜこの無効なヘッダーを受け取っているのか、私は困惑していますか?

4

3 に答える 3

0

使用

[[httpReponse allHeaderFields] objectForKey:@"Content-Type"] isEqualToString:@"application/msword"]

応答ヘッダーを確認します。

リクエスト中に複数のリダイレクトが発生するという事実を見逃している可能性があります。

于 2013-02-28T09:35:30.260 に答える
0

IISがその特定のヘッダーを生成している理由について他の誰かが答えを見つけられなかった場合に備えて、アプリケーション/ヘッダーが存在する場合にtext / htmlを無視するように、ヘッダー用の小さなパーサーをコーディングする必要がありました。

于 2013-03-07T23:28:04.383 に答える
0

mimeタイプを回避するための私の方法:connectionDidFinishLoadingで

[webView loadHTMLString:[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] baseURL:[[connection currentRequest] URL]];
于 2014-03-08T23:16:37.743 に答える