仅在iPhone上获取HTTP标头字段

ami*_*mit 4 iphone url header http

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

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

谢谢.

Dan*_*erz 8

异步向有问题的URL发送HEAD请求,然后只需访问/ allHeaderFields上的属性.HTTPURLResponseNSHTTPURLResponse

斯威夫特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()
Run Code Online (Sandbox Code Playgroud)

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];
                       }];
Run Code Online (Sandbox Code Playgroud)


FKD*_*Dev 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];
Run Code Online (Sandbox Code Playgroud)

编辑添加用 NSMutableRequest 替换 NSURLRequest。

  • 您必须使用 NSMutableURLRequest 而不是 NSURLRequest,然后调用 setHTTPMethod:@"HEAD"。我没有确认这是否有效。它应该.. (3认同)