Получить поля заголовка HTTP только на iPhone - PullRequest
4 голосов
/ 02 апреля 2010

Я хочу получить только заголовки запроса URL. До сих пор я использовал stringWithContentsOfURL () для всех загрузок, но теперь меня интересуют только заголовки, и загрузка всего файла невозможна, поскольку он слишком большой.

Я нашел решения, которые показывают, как читать заголовки после получения ответа, но как указать в запросе, что я хочу загружать только заголовки. Пропустить тело!

Спасибо.

Ответы [ 3 ]

8 голосов
/ 29 июня 2013

Асинхронно отправляет запрос HEAD на соответствующий URL, а затем просто получает доступ к свойству 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 голосов
/ 02 апреля 2010

Что я использовал. Приведенный ниже код является синхронным, но вы можете сделать его асинхронным с помощью делегата.

    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.

2 голосов
/ 02 апреля 2010

реализует только метод didReceiveResponse делегата

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSInteger statusCode = [(NSHTTPURLResponse*)response statusCode];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...