2017-05-10 8 views
-1

Webサービスからデータ(JSON)を取得しようとしています。iOS基本認証を使用したWebサービスの迅速な呼び出し

この通話にユーザー名とパスワードの認証を追加する方法を教えていただけますか?以下のコードのようにはならない。あなたがスウィフト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() 
} 
+0

なぜこれが投票されましたか?それは全く正当な問題です。そうでなければ、これを解決するための正しいアプローチで多くの答えがあるはずです。 – TommyF

答えて

0

それはあなたのWebサービスに依存しますが、あなたはあなたの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

0

私の悪いです。私はこの1つにはあまりにも急いでいた。それは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() 
関連する問題