仅在iPhone上获取HTTP标头字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅在iPhone上获取HTTP标头字段相关的知识,希望对你有一定的参考价值。

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

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

谢谢。

答案

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

    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。

另一答案

异步向有问题的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];
                       }];
另一答案

只实现didReceiveResponse委托方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSInteger statusCode = [(NSHTTPURLResponse*)response statusCode];
}

以上是关于仅在iPhone上获取HTTP标头字段的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Cloud9 上出现错误“发送后无法设置标头”

在 HTTP 请求 c# 的授权标头中获取签名的 OAuth 请求

403 仅在我的机器上 - Angular 2 和 Tomcat 8.5

如何仅在 iPhone 上旋转照片?

Cors 仅在移动浏览器上

从路径获取 UIImage 仅在调试器中单步执行时有效