2015-01-18 4 views
0

Я пытаюсь проверить, действительно ли URL-адрес, но мой DNS возвращает 200 для всего. Поэтому я хотел бы загрузить URL-адрес, не загружая его в фактический веб-просмотр, который будет отображаться, а затем проверить URL-адрес запроса.Проверить URL-адрес загруженного WebView

Это то, что у меня есть, но он возвращает все дни 200.

let url = NSURL(string: inSecureUrl)! 
    var response: NSURLResponse? 
    var request = NSURLRequest(URL: url) 
    var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &urlErrors) as NSData? 
    if let pHttpResponse = response as? NSHTTPURLResponse { 
     isValidUrl = true 

     println("valid url. Response: \(response)") 
    } else { 
     println("url error: \(urlErrors)") 
    } 

Как бы я сделать didFinishNavigation без загрузки его в реальный взгляд в раскадровке, так что я могу проверить, что finishNavigation URL это?

ответ

1

Вы можете использовать это расширение:

import Foundation 
import UIKit 

extension NSURL 
{ 
    struct ValidationQueue { 
    static var queue = NSOperationQueue() 
    } 

    class func validateUrl(urlString: String?, completion:(success: Bool, urlString: String? , error: NSString) -> Void) 
    { 
    // Description: This function will validate the format of a URL, re-format if necessary, then attempt to make a header request to verify the URL actually exists and responds. 
    // Return Value: This function has no return value but uses a closure to send the response to the caller. 

    var formattedUrlString : String? 

    // Ignore Nils & Empty Strings 
    if (urlString == nil || urlString == "") 
    { 
     completion(success: false, urlString: nil, error: "URL String was empty") 
     return 
    } 

    // Ignore prefixes (including partials) 
    let prefixes = ["http://www.", "https://www.", "www."] 
    for prefix in prefixes 
    { 
     if ((prefix.rangeOfString(urlString!, options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil, locale: nil)) != nil){ 
     completion(success: false, urlString: nil, error: "Url String was prefix only") 
     return 
     } 
    } 

    // Ignore URLs with spaces 
    let range = urlString!.rangeOfCharacterFromSet(NSCharacterSet.whitespaceCharacterSet()) 
    if let test = range { 
     completion(success: false, urlString: nil, error: "Url String cannot contain whitespaces") 
     return 
    } 

    // Check that URL already contains required 'http://' or 'https://', prepend if it does not 
    formattedUrlString = urlString 
    if (!formattedUrlString!.hasPrefix("http://") && !formattedUrlString!.hasPrefix("https://")) 
    { 
     formattedUrlString = "http://"+urlString! 
    } 

    // Check that an NSURL can actually be created with the formatted string 
    if let validatedUrl = NSURL(string: formattedUrlString!) 
    { 
     // Test that URL actually exists by sending a URL request that returns only the header response 
     var request = NSMutableURLRequest(URL: validatedUrl) 
     request.HTTPMethod = "HEAD" 
     ValidationQueue.queue.cancelAllOperations() 

     NSURLConnection.sendAsynchronousRequest(request, queue: ValidationQueue.queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
     let url = request.URL!.absoluteString 

     // URL failed - No Response 
     if (error != nil) 
     { 
      completion(success: false, urlString: url, error: "The url: \(url) received no response") 
      return 
     } 

     // URL Responded - Check Status Code 
     if let urlResponse = response as? NSHTTPURLResponse 
     { 
      if ((urlResponse.statusCode >= 200 && urlResponse.statusCode < 400) || urlResponse.statusCode == 405)// 200-399 = Valid Responses, 405 = Valid Response (Weird Response on some valid URLs) 
      { 
      completion(success: true, urlString: url, error: "The url: \(url) is valid!") 
      return 
      } 
      else // Error 
      { 
      completion(success: false, urlString: url, error: "The url: \(url) received a \(urlResponse.statusCode) response") 
      return 
      } 
     } 
     }) 
    } 
    } 
} 

Полный проект WKWebView пример: https://github.com/ericcgu/EGWKWebBrowser

+1

Спасибо! Вот и все. – jackreichert

+1

Cheers. Рад слышать. – ericgu

Смежные вопросы