NSURLSession: 没有身份验证 NSURLSession ( Swift )

NSURLSession: It is possible with no authentication NSURLSession ( Swift )

我想要一个 API -Key 并验证用户。我在控制台中收到消息“Session URL Task Succeeded: HTTP 200”。不幸的是,我总是收到页面“{”消息“:”的消息。此请求“}”的授权已被拒绝。我花了几个小时寻找并找到了解决方案。我请求你的帮助。这是我的代码:

    let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()


    let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)


    let URL = NSURL(string: "https://api.testhomepage.com/api/contact")
    let request = NSMutableURLRequest(URL: URL!)

    // Headers

    request.addValue("ARRAffinity=259dfjiehfs315d7249df8805c7895a98c4cbd3327ffdcb82aaa16317f2e6", forHTTPHeaderField: "Cookie")
    request.addValue("Basic dWVzQGp1bGl0ZafdgfvcfgeDcyZS1hZWEyLTQzYmVmMjFhNDMxZQ==", forHTTPHeaderField: "Authorization")
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("api.testhomepage.com", forHTTPHeaderField: "Host")
    request.addValue("//api.testhomepage.com/api/contact: POST", forHTTPHeaderField: "https")
    request.HTTPMethod = "GET"
    // JSON Body


    /* Start a new Task */
    let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
        if (error == nil) {
            // Success
            let statusCode = (response as! NSHTTPURLResponse).statusCode
            print("URL Session Task Succeeded: HTTP \(statusCode)")
            let myURLString = "https://api.testhomepage.com/api/contact"

            if let myURL = NSURL(string: myURLString) {
                var error: NSError?
                let myhtml = try! NSString(contentsOfURL: myURL, encoding: NSUTF8StringEncoding)

                if let error = error {
                    print("Error : \(error)")
                } else {
                    print("HTML : \(myhtml)")
                }
            } else {
                print("Error: \(myURLString) doesn't seem to be a valid URL")
            }

        }
        else {
            // Failure
            print("URL Session Task Failed: %@", error!.localizedDescription);
        }
    }

    task.resume()

        }

这是在控制台中:

URL 会话任务成功:HTTP 200 HTML : {"Message":"Authorization has been denied for this request."}

使用request.setvalue("", forHTTPHeaderField: "")代替request.addValue("", forHTTPHeaderField: "")

不能 自己填充身份验证 header,句号。 header 归 URL 加载系统所有,并根据用户钥匙串中的凭据填充。

您可以通过阅读URL Session Programming Guide的身份验证章节来了解如何进行身份验证。请注意,这些示例适用于 NSURLConnection,但其余文本适用于两者。

或者,您可以将凭据作为 Internet 密码项存储在钥匙串中,如 Keychain Services Programming Guide 中所述。