我想要获取一个URL请求的头部信息。到目前为止,我一直使用stringWithContentsOfURL()进行下载,但现在我只对头部感兴趣,而且由于文件太大,下载整个文件是不可行的。
我已经找到了一些解决方案,可以在响应接收后显示如何读取头部信息,但是我该如何在请求中指定仅下载头部信息?跳过正文!
谢谢。
我已经找到了一些解决方案,可以在响应接收后显示如何读取头部信息,但是我该如何在请求中指定仅下载头部信息?跳过正文!
谢谢。
异步发送HEAD请求到相关URL,然后仅访问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];
}];
仅实现didReceiveResponse代理方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSInteger statusCode = [(NSHTTPURLResponse*)response statusCode];
}
我使用的是以下代码。虽然下面的代码是同步的,但是你可以使用委托使它变成异步的。
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];
编辑以更换NSURLRequest为NSMutableRequest。
NSMutableURLRequest
。;) - CouchDeveloper