【问题标题】:iOS swift web service call with basic authentication带有基本身份验证的 iOS swift Web 服务调用
【发布时间】:2017-05-10 21:02:49
【问题描述】:

我想从 Web 服务获取一些数据 (JSON) 快疯了。

有人可以告诉我如何在此通话中添加用户名和密码身份验证吗?它不能像下面的代码。如果您有一些适用于 swift 3.0 的代码,我会很乐意看到它。

func downloadData()
{
    let url = NSURL(string: "https://www.someurl.com")
    let request = NSMutableURLRequest(url: url! as URL)

    let task = URLSession.shared.dataTask(with: request as URLRequest) { data,response,error in
        guard error == nil && data != nil else
        {
            print("Error:",error!)
            return
        }

        let httpStatus = response as? HTTPURLResponse

        if httpStatus!.statusCode == 200
        {
            if data?.count != 0
            {
                let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary //because JSON data started with dictionary. Not an array
                let status = responseString["status"] as! String

                if status == "ok"
                {
                    print("Status is :", status)

                    //Ok, so far so good. Now let's get the data...
                }
                else
                {
                    print("Status is not Okay!")
                }
            }
            else
            {
                print("No data got from url!")
            }
        }
        else
        {
            print("error httpstatus code is :",httpStatus!.statusCode)
        }
    }
    task.resume()
}

【问题讨论】:

  • 为什么会被否决?这是一个完全合法的问题。如果没有,应该有很多答案,正确的方法是如何解决这个问题。

标签: ios json swift web-services


【解决方案1】:

这取决于您的网络服务,但您需要将这些值添加到您的Request

例如向标题添加值:

let request = NSMutableURLRequest(url: url! as URL)
request.addValue("An_Authentication_String", forHTTPHeaderField: "MyField")

或者您可能需要将正文添加到您的 Request: How to make HTTP Post request with JSON body in Swift

【讨论】:

    【解决方案2】:

    我的错。我对这个有点太仓促了。我回来的不是 JSON,而是 XML。如果有人想知道,这就是带有基本身份验证的代码......

        let config = URLSessionConfiguration.default
        let userPasswordString = "myusername:mypassword"
        let userPasswordData = userPasswordString.data(using: String.Encoding.utf8)
        let base64EncodedCredential = userPasswordData!.base64EncodedString()
        let authString = "Basic \(base64EncodedCredential)"
        config.httpAdditionalHeaders = ["Authorization" : authString]
        let session = URLSession(configuration: config)
    
        let url = URL(string: "theWebServiceUrl")!
        var dataString = ""
    
        let task = session.dataTask(with: url, completionHandler: {
            (data, response, error) in
    
            if error != nil {
                print(error!.localizedDescription)
            } else {
                 //this is the XML, now go to town with an XML parser
                 dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) as! String
            }
        })
        task.resume()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多