30

NSURLRequestObjective-Cからすべての HTTP ヘッダーを取得するにはどうすればよいですか?

4

5 に答える 5

42

これは、iPhone プログラミングの問題の簡単ではあるが明白ではないクラスに分類されます。簡単な投稿に値する:

HTTP 接続のヘッダーはNSHTTPURLResponseクラスに含まれています。変数がある場合は、allHeaderFields メッセージを送信するNSHTTPURLResponseことで、ヘッダーを簡単に取得できます。NSDictionary

同期リクエストの場合 (ブロックされるためお勧めしません)、次のように入力するのは簡単NSHTTPURLResponseです。

NSURL *url = [NSURL URLWithString:@"http://www.mobileorchard.com"];
NSURLRequest *request = [NSURLRequest requestWithURL: url];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest: request returningResponse: &response error: nil];
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dictionary = [response allHeaderFields];
NSLog([dictionary description]);
}

非同期リクエストでは、もう少し作業を行う必要があります。コールバックが呼び出されると、2 番目のパラメータとしてconnection:didReceiveResponse:渡されます。次のようNSURLResponseにキャストできます。NSHTTPURLResponse

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;    
if ([response respondsToSelector:@selector(allHeaderFields)]) {
    NSDictionary *dictionary = [httpResponse allHeaderFields];
    NSLog([dictionary description]);
}
}
于 2012-11-05T17:03:01.913 に答える
2

YourViewController.h

@interface YourViewController : UIViewController <UIWebViewDelegate>
    @property (weak, nonatomic) IBOutlet UIWebView *yourWebView;
@end

YourViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Set the UIWebView delegate to your view controller
    self.yourWebView.delegate = self;

    //Request your URL
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://website.com/your-page.php"]];

    [self.legalWebView loadRequest:request];
}

//Implement the following method
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSLog(@"%@",[webView.request allHTTPHeaderFields]);
}
于 2012-11-05T16:33:38.810 に答える