【发布时间】:2011-02-03 15:24:28
【问题描述】:
我只想获取 URL 请求的标头。到目前为止,我一直在使用 stringWithContentsOfURL() 进行所有下载,但现在我只对标题感兴趣,并且下载整个文件不可行,因为它太大了。
我找到了显示如何在收到响应后读取标头的解决方案,但是如何在请求中指定我只希望下载标头。跳过身体!
谢谢。
【问题讨论】:
我只想获取 URL 请求的标头。到目前为止,我一直在使用 stringWithContentsOfURL() 进行所有下载,但现在我只对标题感兴趣,并且下载整个文件不可行,因为它太大了。
我找到了显示如何在收到响应后读取标头的解决方案,但是如何在请求中指定我只希望下载标头。跳过身体!
谢谢。
【问题讨论】:
向相关 URL 异步发送 HEAD 请求,然后访问 HTTPURLResponse / NSHTTPURLResponse 上的 allHeaderFields 属性。
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()
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];
}];
【讨论】:
NSMutableURLRequest 正确。 ;)
我用过的。下面的代码是同步的,但您可以使用委托使其异步。
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。
【讨论】:
只实现 didReceiveResponse 委托方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSInteger statusCode = [(NSHTTPURLResponse*)response statusCode];
}
【讨论】: