凭据请求无法在swift中运行

时间:2015-06-07 06:59:30

标签: ios macos swift

我将一些Objective-c代码(带有一些更改)移植到swift中,并且没有“private”的链接有效,而另一个则没有。这就是我所拥有的:

import Cocoa

class MasterViewController: NSViewController, NSURLSessionDataDelegate {
  var session: NSURLSession!
  var courses: JSON!

  override func viewDidLoad() {
    super.viewDidLoad()

    let config: NSURLSessionConfiguration? =
    NSURLSessionConfiguration.defaultSessionConfiguration()

    session = NSURLSession(configuration: config, delegate: self, delegateQueue: nil )
    fetchFeed()
  }

  func fetchFeed() {
    let requestString: String = "https://bookapi.bignerdranch.com/courses.json"
    // let requestString: String = "https://bookapi.bignerdranch.com/private/courses.json"
    if let url: NSURL? = NSURL(string: requestString) {
      let request: NSURLRequest = NSURLRequest(URL: url!)
      let dataTask : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
        var jsonObject: [JSON] = JSON(data: data).arrayValue

        self.courses = JSON(data: data)

        dispatch_async(dispatch_get_main_queue(), { _ in
          println( self.courses?.debugDescription )
        })
      });
      dataTask.resume()
    }
  }

  func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void) {
    var userIdString: String = "BigNerdRanch"
    var passwordString: String = "AchieveNerdvana"
    println( "Received challenge, responding with UID: \(userIdString) PWD: \(passwordString)")
    var cred: NSURLCredential = NSURLCredential(user: userIdString,
      password: passwordString,
      persistence: NSURLCredentialPersistence.ForSession)
    completionHandler( NSURLSessionAuthChallengeDisposition.UseCredential, cred )
  }

}

有什么想法吗? 谢谢

1 个答案:

答案 0 :(得分:0)

如果您在没有"私有"的情况下注释掉该网址在其中并取消注释URL机智"私人"在它,它不起作用。如果您是通过网络浏览器(Chrome,Firefox,Safari等)" https://bookapi.bignerdranch.com/private/courses.json"输入凭证" BigNerdRanch"用户ID" AchieveNerdvana"对于密码,它返回预期的JSON