一种简单的解决方案,用于检查Web服务器上是否存在文件迅速

问题描述

检查服务器上是否存在资源需要发送HTTP请求并接收响应。TCP通信可能会花费一些时间,例如,如果服务器繁忙,客户端和服务器之间的某些路由器无法正常工作,网络断开等。

这就是为什么总是首选异步请求的原因。即使您认为请求只需要几毫秒,由于某些网络问题,有时有时也可能只有几秒钟。而且-众所周知-将 主线程 阻塞几秒钟是一个很大的禁忌。

综上所述,这是一种fileExists()方法的可能实现 。您已被警告!不要在主线程上使用它!

HTTP请求 方法 设置为“ HEAD”,以便服务器仅发送响应头,而不发送数据。

func fileExists(url : NSURL!) -> Bool {

    let req = NSMutableURLRequest(URL: url)
    req.HTTPMethod = "HEAD"
    req.timeoutInterval = 1.0 // Adjust to your needs

    var response : NSURLResponse?
    NSURLConnection.sendSynchronousRequest(req, returningResponse: &response, error: nil)

    return ((response as? NSHTTPURLResponse)?.statusCode ?? -1) == 200
}

解决方法

关于此的讨论很多,我了解使用委托方法并检查响应“ 404”的解决方案:

var request : NSURLRequest = NSURLRequest(URL: url)

var connection : NSURLConnection = NSURLConnection(request: request,delegate: self,startImmediately: false)!
connection.start()

    func connection(didReceiveResponse: NSURLConnection!,didReceiveResponse response: NSURLResponse!) {
//...
}

但我想有一个简单的解决方案,例如:

var exists:Bool=fileexists(sURL);

因为与委托在同一类中会有很多请求,并且我只想使用函数fileexists()检查响应。

有什么提示吗?

更新 我想我必须像下面这样做一个同步请求,但是我总是得到0x0000000000000000作为响应:

   let urlPath: String = sURL;
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSURLRequest = NSURLRequest(URL: url)
    var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?
    >=nil
    var error: NSErrorPointer = nil
    var dataVal: NSData =  NSURLConnection.sendSynchronousRequest(request1,returningResponse: response,error:nil)!
    var err: NSError
    println(response)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...