仅在iPhone上获取HTTP标头字段

问题描述 投票:4回答:3

我想只获取URL请求的标头。到目前为止,我一直在使用stringWithContentsOfURL()进行所有下载,但现在我只对标题感兴趣并且下载整个文件是不可行的,因为它太大了。

我找到了解决方案,显示在收到响应后如何读取标题,但如何在请求中指定我只想下载标题。撇去身体!

谢谢。

iphone http url header
3个回答
2
投票

我用过的。下面的代码是同步的,但您可以使用委托使其异步。

    NSMutableURLRequest *newRequest = ... //init your request...
    NSURLResponse *response=nil;
    NSError *error=nil;

    [newRequest setValue:@"HEAD" forKey:@"HTTPMethod"];
    [NSURLConnection sendSynchronousRequest:newRequest returningResponse:&response error:&error];
    [newRequest release];
    //Get MIME type from the response
    NSString* MIMEType = [response MIMEType];

编辑为使用NSMutableRequest添加替换NSURLRequest。


8
投票

异步向有问题的URL发送HEAD请求,然后只访问allHeaderFields / HTTPURLResponse上的NSHTTPURLResponse属性。

Swift 4

var request = URLRequest(url: URL(string: "https://google.com/")!)
request.httpMethod = "HEAD"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let response = response as? HTTPURLResponse,
        let headers = response.allHeaderFields as? [String: String] else {
        return
    }
}
task.resume()

Objective-C

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
[request setHTTPMethod:@"HEAD"];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                           NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields];
                       }];

2
投票

只实现didReceiveResponse委托方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSInteger statusCode = [(NSHTTPURLResponse*)response statusCode];
}
© www.soinside.com 2019 - 2024. All rights reserved.