আমি কীভাবে সুইফটে এইচটিটিপি অনুরোধ করব?


371

আমি আইবুকগুলিতে অ্যাপল দ্বারা প্রোগ্রামিং ল্যাঙ্গুয়েজ সুইফটটি পড়েছি, তবে কীভাবে সুইফটে এইচটিটিপি অনুরোধ (সিআরএল এর মতো কিছু) করা যায় তা বুঝতে পারি না। আমার কি ওবজে-সি ক্লাস আমদানি করা দরকার বা আমাকে কেবল ডিফল্ট লাইব্রেরি আমদানি করতে হবে? বা নেটিভ সুইফট কোডের ভিত্তিতে এইচটিটিপি অনুরোধ করা সম্ভব নয় কি?


2
ব্যবহারের URLSession (পান, পোষ্ট, মুছুন পদ্ধতি): stackoverflow.com/a/48306950/6898523
মহীপাল সিং

উত্তর:


550

আপনি ব্যবহার করতে পারেন URL, URLRequestএবং URLSessionঅথবা NSURLConnectionহিসাবে আপনি সাধারণতঃ উদ্দেশ্য সি না চাই। নোট করুন যে আইওএস 7.0 এবং তারপরের URLSessionজন্য পছন্দসই।

ব্যবহার URLSession

একটি URLঅবজেক্ট এবং একটি URLSessionDataTaskথেকে আরম্ভ করুন URLSession। তারপরে টাস্কটি চালাও resume()

let url = URL(string: "http://www.stackoverflow.com")!

let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
    guard let data = data else { return }
    print(String(data: data, encoding: .utf8)!)
}

task.resume()

ব্যবহার NSURLConnection

প্রথমে একটি URLএবং একটি শুরু করুন URLRequest:

let url = URL(string: "http://www.stackoverflow.com")!
var request = URLRequest(url: url)
request.httpMethod = "POST" 

তারপরে, আপনি অনুরোধটি এটিকে সংশ্লেষ সহ লোড করতে পারেন:

NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main) {(response, data, error) in
    guard let data = data else { return }
    print(String(data: data, encoding: .utf8)!)
}

অথবা আপনি একটি সূচনা করতে পারেন NSURLConnection:

let connection = NSURLConnection(request: request, delegate:nil, startImmediately: true)

কেবলমাত্র আপনার প্রতিনিধিকে সেটাকে বাদ দিয়ে অন্য কিছুতে সেট করা নিশ্চিত করুন nilএবং প্রাপ্ত প্রতিক্রিয়া এবং প্রাপ্ত ডেটা নিয়ে কাজ করার জন্য প্রতিনিধি পদ্ধতিগুলি ব্যবহার করুন।

আরও বিশদের জন্য, প্রোটোকলের জন্য ডকুমেন্টেশন চেক করুনNSURLConnectionDataDelegate

একটি এক্সকোড খেলার মাঠে পরীক্ষা করা

আপনি যদি এই কোডটি একটি এক্সকোড খেলার মাঠে চেষ্টা করতে চান তবে import PlaygroundSupportআপনার খেলার মাঠের পাশাপাশি নীচের কলটিতে যুক্ত করুন:

PlaygroundPage.current.needsIndefiniteExecution = true

এটি আপনাকে খেলার মাঠে অ্যাসিক্রোনাস কোড ব্যবহার করতে দেয়।


2
এক্সসিপ্লেগ্রাউন্ড সমর্থিত না হওয়ায় কোনও খেলার মাঠে আইওএস 8 বিটা 2 এ আপনার সময় নষ্ট করবেন না। আপনি একটি হ্যাক চেষ্টা করতে চান অপেক্ষা করতে একটি চতুর এবং কুৎসিত উপায় নেই: stackoverflow.com/a/24058337/700206
whitneyland

7
আপনি এনএসআরএলসেশন ব্যবহার করে কীভাবে পোষ্ট ডেটা প্রেরণ করবেন?
ফার্নান্দো সান্তিয়াগো

2
এই উদাহরণটি 6.1: টেস্ট.সুইফ্ট: 5: 57: ত্রুটি: Nচ্ছিক ধরণের মান 'এনএসআরএল? আবদ্ধ না; আপনার ব্যবহারের অর্থ ছিল '!' বা '?'? টাস্ক = এনএসআরএলসেশন.সারেডসেশন ()। ডেটা টাস্কউইথ URL (ইউআরএল) in (ডেটা, প্রতিক্রিয়া, ত্রুটি) -এ
এমকিউড্রো

2
একটি বিস্ময়বোধক চিহ্ন যুক্ত করে @ এমকিউড্রোসের ত্রুটি বার্তা সংশোধন করা হচ্ছে ... .ডাটা টাস্কউইথ URL (url!)
সান ম্যাকক্লোরি

3
আপনি কি দয়া করে কোড স্নিপেটগুলি ঠিক করতে পারেন? এখানে সুইফ্ট 4print(String(data: data!, encoding: String.Encoding.utf8))
নট

101

কোড নীচে চেক করুন:

1. সিঙ্কনাস রিকোয়েস্ট

সুইফট ১.২

    let urlPath: String = "YOUR_URL_HERE"
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSURLRequest = NSURLRequest(URL: url)
    var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?>=nil
    var dataVal: NSData =  NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)!
    var err: NSError
    println(response)
    var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSDictionary
    println("Synchronous\(jsonResult)")

সুইফট ২.০ +

let urlPath: String = "YOUR_URL_HERE"
    let url: NSURL = NSURL(string: urlPath)!
    let request1: NSURLRequest = NSURLRequest(URL: url)
    let response: AutoreleasingUnsafeMutablePointer<NSURLResponse?>=nil


    do{

        let dataVal = try NSURLConnection.sendSynchronousRequest(request1, returningResponse: response)

            print(response)
            do {
                if let jsonResult = try NSJSONSerialization.JSONObjectWithData(dataVal, options: []) as? NSDictionary {
                    print("Synchronous\(jsonResult)")
                }
            } catch let error as NSError {
                print(error.localizedDescription)
            }



    }catch let error as NSError
    {
         print(error.localizedDescription)
    }

2. অ্যাসিচোনাস রিকোয়েস্ট

সুইফট ১.২

let urlPath: String = "YOUR_URL_HERE"
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSURLRequest = NSURLRequest(URL: url)
    let queue:NSOperationQueue = NSOperationQueue()
    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var err: NSError
        var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        println("Asynchronous\(jsonResult)")
       })

সুইফট ২.০ +

let urlPath: String = "YOUR_URL_HERE"
    let url: NSURL = NSURL(string: urlPath)!
    let request1: NSURLRequest = NSURLRequest(URL: url)
    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in

        do {
            if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
                print("ASynchronous\(jsonResult)")
            }
        } catch let error as NSError {
            print(error.localizedDescription)
        }


    })

৩. যথারীতি ইউআরএল সংযোগ

সুইফট ১.২

    var dataVal = NSMutableData()
    let urlPath: String = "YOUR URL HERE"
    var url: NSURL = NSURL(string: urlPath)!
    var request: NSURLRequest = NSURLRequest(URL: url)
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)!
    connection.start()

তারপর

 func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
    self.dataVal?.appendData(data)
}


func connectionDidFinishLoading(connection: NSURLConnection!)
{
    var error: NSErrorPointer=nil

    var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal!, options: NSJSONReadingOptions.MutableContainers, error: error) as NSDictionary

    println(jsonResult)



}

সুইফট ২.০ +

   var dataVal = NSMutableData()
    let urlPath: String = "YOUR URL HERE"
    var url: NSURL = NSURL(string: urlPath)!
    var request: NSURLRequest = NSURLRequest(URL: url)
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)!
    connection.start()

তারপর

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
    dataVal.appendData(data)
}


func connectionDidFinishLoading(connection: NSURLConnection!)
{

    do {
        if let jsonResult = try NSJSONSerialization.JSONObjectWithData(dataVal, options: []) as? NSDictionary {
            print(jsonResult)
        }
    } catch let error as NSError {
        print(error.localizedDescription)
    }

}

4. অ্যাসিচোনাস পোস্ট অনুরোধ

সুইফট ১.২

    let urlPath: String = "YOUR URL HERE"
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request1.HTTPMethod = "POST"
     var stringPost="deviceToken=123456" // Key and Value

    let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)

    request1.timeoutInterval = 60
    request1.HTTPBody=data
    request1.HTTPShouldHandleCookies=false

    let queue:NSOperationQueue = NSOperationQueue()

     NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in


        var err: NSError

        var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        println("AsSynchronous\(jsonResult)")


        })

সুইফট ২.০ +

let urlPath: String = "YOUR URL HERE"
    let url: NSURL = NSURL(string: urlPath)!
    let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request1.HTTPMethod = "POST"
    let stringPost="deviceToken=123456" // Key and Value

    let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)

    request1.timeoutInterval = 60
    request1.HTTPBody=data
    request1.HTTPShouldHandleCookies=false

    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in

        do {
            if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
                print("ASynchronous\(jsonResult)")
            }
        } catch let error as NSError {
            print(error.localizedDescription)
        }


    })

5. অ্যাসিচোনাস জিইটি অনুরোধ

সুইফট ১.২

    let urlPath: String = "YOUR URL HERE"
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request1.HTTPMethod = "GET"
    request1.timeoutInterval = 60
    let queue:NSOperationQueue = NSOperationQueue()

     NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in


        var err: NSError

        var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        println("AsSynchronous\(jsonResult)")


        })

সুইফট ২.০ +

let urlPath: String = "YOUR URL HERE"
    let url: NSURL = NSURL(string: urlPath)!
    let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request1.HTTPMethod = "GET"
    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in

        do {
            if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
                print("ASynchronous\(jsonResult)")
            }
        } catch let error as NSError {
            print(error.localizedDescription)
        }


    })

Image. চিত্র (ফাইল) আপলোড করুন

সুইফট ২.০ +

  let mainURL = "YOUR_URL_HERE"

    let url = NSURL(string: mainURL)
    let request = NSMutableURLRequest(URL: url!)
    let boundary = "78876565564454554547676"
    request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")


    request.HTTPMethod = "POST" // POST OR PUT What you want
    let session = NSURLSession(configuration:NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: nil)

    let imageData = UIImageJPEGRepresentation(UIImage(named: "Test.jpeg")!, 1)





    var body = NSMutableData()

    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)

    // Append your parameters

    body.appendData("Content-Disposition: form-data; name=\"name\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    body.appendData("PREMKUMAR\r\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)

    body.appendData("Content-Disposition: form-data; name=\"description\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    body.appendData("IOS_DEVELOPER\r\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)


    // Append your Image/File Data

    var imageNameval = "HELLO.jpg"

    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    body.appendData("Content-Disposition: form-data; name=\"profile_photo\"; filename=\"\(imageNameval)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    body.appendData("Content-Type: image/jpeg\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
    body.appendData(imageData!)
    body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)

    body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)

    request.HTTPBody = body




    let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

        if error != nil {

            //handle error


        }
        else {




            let outputString : NSString = NSString(data:data!, encoding:NSUTF8StringEncoding)!
            print("Response:\(outputString)")


        }
    }
    dataTask.resume()

93

আর একটি বিকল্প অ্যালামোফায়ার লাইব যা চেইনযোগ্য অনুরোধ / প্রতিক্রিয়া পদ্ধতি সরবরাহ করে।

https://github.com/Alamofire/Alamofire

একটি অনুরোধ করা

import Alamofire

Alamofire.request(.GET, "http://httpbin.org/get")

প্রতিক্রিয়া হ্যান্ডলিং

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
         .response { request, response, data, error in
              print(request)
              print(response)
              print(error)
          }

125
আমি মনে করি যে একটি বাহ্যিক lib পরামর্শ দিয়ে জবাব দেওয়া, যখন কার্যকারিতা কাঠামোর দ্বারা সরবরাহ করা এটি করার সঠিক উপায় নয়।
তুরস্ক ওয়েবে

9
@ তুরকিশ্বেব ঠিক আছে। সেজারের উত্তর আরও সম্পূর্ণ এবং বাহ্যিক লাইব্রেরি ব্যবহার করে না। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ফ্রেডম্যাগিওস্কি

11
Cezar এর উত্তর (SWIFT 3 থেকে) পুরোনো সংস্করণের এবং Alamofire এর ইন্টারফেস অনেক যে এর চেয়ে সুন্দর URLSessionএবং স্ত্রীদেরকে। এছাড়াও, গ্রহণযোগ্যতা হ'ল ধার্মিকতার কিছু বিমূর্ত পরিমাপের একটি পরিমাপ নয় (তবে আপনার নিজেরাই ছেড়ে দিন!)) তবে ওপিকে সবচেয়ে বেশি কী সাহায্য করেছে of ("খাঁটি" সমাধানগুলির জন্য, তাই ডকুমেন্টেশন আছে!) যদি এটি উত্তর ছিল, নিখুঁত - এটি প্রথম নীতিগুলি ব্যবহার করে না, তবে তবে এটি সর্বদা "সঠিক" সমাধান নয়, তাই না?
রাফেল

9
তৃতীয় পক্ষের গ্রন্থাগারগুলি অফার করবেন না যতক্ষণ না এসও নির্দেশিকাগুলি অনুসারে বিশেষভাবে জিজ্ঞাসা করা হয়
আলেক ও

1
অ্যালামোফায়ার সেরা
টানিয়া_১১

36

4 ও ততোধিক সুইফট: ইউআরএলসেশন এপিআই ব্যবহার করে ডেটা অনুরোধ

   //create the url with NSURL
   let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1")! //change the url

   //create the session object
   let session = URLSession.shared

   //now create the URLRequest object using the url object
   let request = URLRequest(url: url)

   //create dataTask using the session object to send data to the server
   let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

       guard error == nil else {
           return
       }

       guard let data = data else {
           return
       }

      do {
         //create json object from data
         if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
            print(json)
         }
      } catch let error {
        print(error.localizedDescription)
      }
   })

   task.resume()

4 এবং ততোধিক সুইফট, ডিকোডেবল এবং ফলাফল এনাম

//APPError enum which shows all possible errors
enum APPError: Error {
    case networkError(Error)
    case dataNotFound
    case jsonParsingError(Error)
    case invalidStatusCode(Int)
}

//Result enum to show success or failure
enum Result<T> {
    case success(T)
    case failure(APPError)
}

//dataRequest which sends request to given URL and convert to Decodable Object
func dataRequest<T: Decodable>(with url: String, objectType: T.Type, completion: @escaping (Result<T>) -> Void) {

    //create the url with NSURL
    let dataURL = URL(string: url)! //change the url

    //create the session object
    let session = URLSession.shared

    //now create the URLRequest object using the url object
    let request = URLRequest(url: dataURL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60)

    //create dataTask using the session object to send data to the server
    let task = session.dataTask(with: request, completionHandler: { data, response, error in

        guard error == nil else {
            completion(Result.failure(AppError.networkError(error!)))
            return
        }

        guard let data = data else {
            completion(Result.failure(APPError.dataNotFound))
            return
        }

        do {
            //create decodable object from data
            let decodedObject = try JSONDecoder().decode(objectType.self, from: data)
            completion(Result.success(decodedObject))
        } catch let error {
            completion(Result.failure(APPError.jsonParsingError(error as! DecodingError)))
        }
    })

    task.resume()
}

উদাহরণ:

// যদি আমরা স্থানধারক এপিআই থেকে টুডু পেতে চাই, তবে আমরা টুডো স্ট্রাক্ট সংজ্ঞায়িত করি এবং ডেটা রিকোয়েস্ট কল করি এবং " https://jsonplaceholder.typicode.com/todos/1 " স্ট্রিং url পাস করি ।

struct ToDo: Decodable {
    let id: Int
    let userId: Int
    let title: String
    let completed: Bool

}

dataRequest(with: "https://jsonplaceholder.typicode.com/todos/1", objectType: ToDo.self) { (result: Result) in
    switch result {
    case .success(let object):
        print(object)
    case .failure(let error):
        print(error)
    }
}

// এটি ফলাফল মুদ্রণ করে:

ToDo(id: 1, userId: 1, title: "delectus aut autem", completed: false)

21

বেসিক সুইফট 3+ সমাধান

guard let url = URL(string: "http://www.stackoverflow.com") else { return }

let task = URLSession.shared.dataTask(with: url) { data, response, error in

  guard let data = data, error == nil else { return }

  print(NSString(data: data, encoding: String.Encoding.utf8.rawValue))
}

task.resume()

3
তোমার উদাহরণস্বরূপ হয় সুইফট 3 , তাই আপনি ব্যবহার করা উচিত URL(string: "http://www.stackoverflow.com")পরিবর্তেNSURL
FelixSFD

ইউআরএল থেকে ইউআরএল কাস্ট করা কোনও URLSession.shared.dataTask(with: url!)
অর্থবোধ করে

আমি এই ত্রুটিটি App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

@YumYumYum আপনি কনফিগার পোস্টটি অনুযায়ী অ্যাপ্লিকেশন পরিবহন নিরাপত্তা stackoverflow.com/questions/30731785/...
বেন সুলিভান

লিও ডাবস ভেরিয়েবল ইউআরএল টাইপ ইউআরএল?
টম শুল্জ

14

আমি এখনও অবধি ভাল ফলাফল সহ এই ছেলের র‍্যাপার ব্যবহার করছি https://github.com/daltoniam/swiftHTTP । এখন পর্যন্ত কোনও বড় ফুটো বিমূর্ততা নেই

উদাহরণ

    do {
        let opt = try HTTP.GET("https://google.com")
        opt.start { response in
            if let err = response.error {
                print("error: \(err.localizedDescription)")
                return //also notify app of failure as needed
            }
            print("opt finished: \(response.description)")
            //print("data is: \(response.data)") access the response of the data with response.data
        }
    } catch let error {
        print("got an error creating the request: \(error)")
    }

3
আপনি ভিউটি দেখানোর আগে অনুরোধটি শেষ করার জন্য অপেক্ষা করার কোনও উপায় খুঁজে পেয়েছেন? @AlexanderN
Reshad

9

বিস্তারিত

  • এক্সকোড 9.2, সুইফট 4
  • এক্সকোড 10.2.1 (10E1001), সুইফট 5

Info.plist

NSAppTransportSecurity

তথ্য plist যোগ করুন:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

আলমোফায়ার নমুনা

Alamofire

import Alamofire

class AlamofireDataManager {
    fileprivate let queue: DispatchQueue
    init(queue: DispatchQueue) { self.queue = queue }

    private func createError(message: String, code: Int) -> Error {
        return NSError(domain: "dataManager", code: code, userInfo: ["message": message ])
    }

    private func make(session: URLSession = URLSession.shared, request: URLRequest, closure: ((Result<[String: Any]>) -> Void)?) {
        Alamofire.request(request).responseJSON { response in
            let complete: (Result<[String: Any]>) ->() = { result in DispatchQueue.main.async { closure?(result) } }
            switch response.result {
                case .success(let value): complete(.success(value as! [String: Any]))
                case .failure(let error): complete(.failure(error))
            }
        }
    }

    func searchRequest(term: String, closure: ((Result<[String: Any]>) -> Void)?) {
        guard let url = URL(string: "https://itunes.apple.com/search?term=\(term.replacingOccurrences(of: " ", with: "+"))") else { return }
        let request = URLRequest(url: url)
        make(request: request) { response in closure?(response) }
    }
}

আলামোফায়ার নমুনার ব্যবহার

private lazy var alamofireDataManager = AlamofireDataManager(queue: DispatchQueue(label: "DataManager.queue", qos: .utility))
//.........

alamofireDataManager.searchRequest(term: "jack johnson") { result in
      print(result.value ?? "no data")
      print(result.error ?? "no error")
}

ইউআরএলসেশন নমুনা

import Foundation

class DataManager {

    fileprivate let queue: DispatchQueue
        init(queue: DispatchQueue) { self.queue = queue }

    private func createError(message: String, code: Int) -> Error {
        return NSError(domain: "dataManager", code: code, userInfo: ["message": message ])
    }

    private func make(session: URLSession = URLSession.shared, request: URLRequest, closure: ((_ json: [String: Any]?, _ error: Error?)->Void)?) {
        let task = session.dataTask(with: request) { [weak self] data, response, error in
            self?.queue.async {
                let complete: (_ json: [String: Any]?, _ error: Error?) ->() = { json, error in DispatchQueue.main.async { closure?(json, error) } }

                guard let self = self, error == nil else { complete(nil, error); return }
                guard let data = data else { complete(nil, self.createError(message: "No data", code: 999)); return }

                do {
                    if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
                        complete(json, nil)
                    }
                } catch let error { complete(nil, error); return }
            }
        }

        task.resume()
    }

    func searchRequest(term: String, closure: ((_ json: [String: Any]?, _ error: Error?)->Void)?) {
        let url = URL(string: "https://itunes.apple.com/search?term=\(term.replacingOccurrences(of: " ", with: "+"))")
        let request = URLRequest(url: url!)
        make(request: request) { json, error in closure?(json, error) }
    }
}

ইউআরএলসেশন নমুনার ব্যবহার

private lazy var dataManager = DataManager(queue: DispatchQueue(label: "DataManager.queue", qos: .utility))
// .......
dataManager.searchRequest(term: "jack johnson") { json, error  in
      print(error ?? "nil")
      print(json ?? "nil")
      print("Update views")
}

ফলাফল

এখানে চিত্র বর্ণনা লিখুন


searchRequest? শব্দটি? ওরা কোথা থেকে আসে?
এল টমেটো

এটি অনুরোধের সম্পূর্ণ নমুনা। class func searchRequest(term: String, ...itunes.apple.com থেকে ডেটা ডাউনলোড করার নমুনা। এই নমুনাটি অনুসন্ধান করবে, সুতরাং, আমি searchRequestফাংশনটির নামটি আবিষ্কার / আবিষ্কার করেছি । termঅংশ " itunes.apple.com/search ?" অনুরোধ। আপনি আপনার ফাংশনগুলির কোনও নাম চয়ন করতে পারেন যা আপনার লজিকের মডেলটি বর্ণনা করবে।
ভ্যাসিলি বোদনারচুক

সুন্দর সমাধান। আমি বদলে গেছি closureক্ষেত্রে সঙ্গে একটি enum ফিরে যাওয়ার successএবং error
নিউনি

7

আমি এইচএসটিপি অনুরোধ দুটি পদ্ধতিই জেএসওনকে এইভাবে পার্সিংয়ের সাথে পেতে এবং পোস্ট করতে পারি :

উপর viewDidLoad () :

override func viewDidLoad() {
super.viewDidLoad()

    makeGetRequest()
    makePostRequest()

}

func makePostRequest(){

    let urlPath: String = "http://www.swiftdeveloperblog.com/http-post-example-script/"
    var url: NSURL = NSURL(string: urlPath)!
    var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request.HTTPMethod = "POST"
    var stringPost="firstName=James&lastName=Bond" // Key and Value

    let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)

    request.timeoutInterval = 60
    request.HTTPBody=data
    request.HTTPShouldHandleCookies=false

    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
        let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

         if (jsonResult != nil) {
            // Success
           println(jsonResult)

           let message = jsonResult["Message"] as! NSString

           println(message)
         }else {
            // Failed
            println("Failed")
        }

    })

}

func makeGetRequest(){
    var url : String = "http://api.androidhive.info/contacts/"
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: url)
    request.HTTPMethod = "GET"
    request.timeoutInterval = 60

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
        let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

        if (jsonResult != nil) {
            // Success
            println(jsonResult)

            let dataArray = jsonResult["contacts"] as! NSArray;

            for item in dataArray { // loop through data items

                let obj = item as! NSDictionary

                for (key, value) in obj {

                    println("Key: \(key) - Value: \(value)")

                    let phone = obj["phone"] as! NSDictionary;

                    let mobile = phone["mobile"] as! NSString
                    println(mobile)
                    let home = phone["home"] as! NSString
                    println(home)
                    let office = phone["office"] as! NSString
                    println(office)
                }
            }

        } else {
            // Failed
            println("Failed")
        }

    })
}

সম্পন্ন


'প্রেরণের অ্যাসিনক্রোনাসআরকুইস্ট' কে প্রকারের আর্গুমেন্টের তালিকা দিয়ে আটকানো যাবে না (NSMutable URLRequest, সারি: NSOperationQueue, সমাপ্তি হ্যান্ডলার: (NSURLResponse!, NSrror!) -> বাতিল) '
বিমালাম

4

ইউআরএলসেশন + সুইফ্ট 5 ব্যবহার করা

কেবল সিজারের উত্তরে যুক্ত করা , আপনি যদি অ্যাপলের ইউআরএলসেশন ক্লাসটি ব্যবহার করে ওয়েব অনুরোধ করতে চান তবে টাস্কটি করার একাধিক উপায় রয়েছে

  1. ইউআরএল সহ সহজ জিইটি অনুরোধ
  2. ইউআরএল এবং পরামিতিগুলির সাথে সরল জিইটি অনুরোধ
  3. ত্রুটি হ্যান্ডলিং সহ URL সহ সাধারণ জিইটি অনুরোধ
  4. ইউআরএল সহ সহজ পোষ্ট অনুরোধ, ত্রুটি হ্যান্ডলিংসের সাথে পরামিতি

1. ইউআরএল সহ সহজ অনুরোধ

func simpleGetUrlRequest()
    {
        let url = URL(string: "https://httpbin.org/get")!

        let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
            guard let data = data else { return }
            print("The response is : ",String(data: data, encoding: .utf8)!)
            //print(NSString(data: data, encoding: String.Encoding.utf8.rawValue) as Any)
        }
        task.resume()
    }

দ্রষ্টব্য : নিশ্চিত হয়ে নিন যে আপনাকে HTTP অনুরোধের জন্য পিএলিস্টে "NSappTransportSecurity" কী যুক্ত করতে হবে

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

২. ইউআরএল এবং পরামিতিগুলির সাথে সহজ জিইটি অনুরোধ

func simpleGetUrlWithParamRequest()
    {
        let url = URL(string: "https://www.google.com/search?q=peace")!

        let task = URLSession.shared.dataTask(with: url) {(data, response, error) in

            if error != nil || data == nil {
                print("Client error!")
                return
            }
            guard let response = response as? HTTPURLResponse, (200...299).contains(response.statusCode) else {
                print("Server error!")
                return
            }
            print("The Response is : ",response)
        }
        task.resume()
    }

3. ত্রুটি হ্যান্ডলিং সহ ইউআরএল দিয়ে সরল জিইটি অনুরোধ

func simpleGetUrlRequestWithErrorHandling()
    {
        let session = URLSession.shared
        let url = URL(string: "https://httpbin.org/get")!

        let task = session.dataTask(with: url) { data, response, error in

            if error != nil || data == nil {
                print("Client error!")
                return
            }

            guard let response = response as? HTTPURLResponse, (200...299).contains(response.statusCode) else {
                print("Server error!")
                return
            }

            guard let mime = response.mimeType, mime == "application/json" else {
                print("Wrong MIME type!")
                return
            }

            do {
                let json = try JSONSerialization.jsonObject(with: data!, options: [])
                print("The Response is : ",json)
            } catch {
                print("JSON error: \(error.localizedDescription)")
            }

        }
        task.resume()
    }

৪. ইউআরএল সহ সাধারণ পোষ্ট অনুরোধ, ত্রুটি হ্যান্ডলিংসের সাথে পরামিতি।

func simplePostRequestWithParamsAndErrorHandling(){
        var session = URLSession.shared
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 30
        configuration.timeoutIntervalForResource = 30
        session = URLSession(configuration: configuration)

        let url = URL(string: "https://httpbin.org/post")!

        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        let parameters = ["username": "foo", "password": "123456"]

        do {
            request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
        } catch let error {
            print(error.localizedDescription)
        }

        let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

            if error != nil || data == nil {
                print("Client error!")
                return
            }

            guard let response = response as? HTTPURLResponse, (200...299).contains(response.statusCode) else {
                print("Oops!! there is server error!")
                return
            }

            guard let mime = response.mimeType, mime == "application/json" else {
                print("response is not json")
                return
            }

            do {
                let json = try JSONSerialization.jsonObject(with: data!, options: [])
                print("The Response is : ",json)
            } catch {
                print("JSON error: \(error.localizedDescription)")
            }

        })

        task.resume()
    }

আপনার পরামর্শ প্রশংসা করা হয় !!


আপনি var session = URLSession.sharedযখন এটি ব্যবহার করছেন না, তবে কেবল ভেরিয়েবলটি ওভাররাইট করছেন তখন কেন আপনি ব্যবহার করবেন ? এটা কি দরকার?
vrwim

3

আমি লগইন বোতাম ক্লিক করে জসন কল করছি

@IBAction func loginClicked(sender : AnyObject) {

    var request = NSMutableURLRequest(URL: NSURL(string: kLoginURL)) // Here, kLogin contains the Login API.

    var session = NSURLSession.sharedSession()

    request.HTTPMethod = "POST"

    var err: NSError?
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(self.criteriaDic(), options: nil, error: &err) // This Line fills the web service with required parameters.
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")

    var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
        var err1: NSError?
        var json2 = NSJSONSerialization.JSONObjectWithData(strData.dataUsingEncoding(NSUTF8StringEncoding), options: .MutableLeaves, error:&err1 ) as NSDictionary

        println("json2 :\(json2)")

        if(err) {
            println(err!.localizedDescription)
        }
        else {
            var success = json2["success"] as? Int
            println("Success: \(success)")
        }
    })

    task.resume()
}

এখানে, আমি পরামিতিগুলির জন্য একটি পৃথক অভিধান তৈরি করেছি।

var params = ["format":"json", "MobileType":"IOS","MIN":"f8d16d98ad12acdbbe1de647414495ec","UserName":emailTxtField.text,"PWD":passwordTxtField.text,"SigninVia":"SH"]as NSDictionary
    return params
}

// You can add your own sets of parameter here.

2

আপনি জাস্ট , একটি python-requestsস্টাইলের এইচটিটিপি লাইব্রেরি ব্যবহার করতে পারেন ।

জাস্ট সহ HTTP অনুরোধ প্রেরণের কয়েকটি উদাহরণ:

// synchronous GET request with URL query a=1
let r = Just.get("https://httpbin.org/get", params:["a":1])

// asynchronous POST request with form value and file uploads
Just.post(
    "http://justiceleauge.org/member/register",
    data: ["username": "barryallen", "password":"ReverseF1ashSucks"],
    files: ["profile_photo": .URL(fileURLWithPath:"flash.jpeg", nil)]
) { (r)
    if (r.ok) { /* success! */ }
}

উভয় ক্ষেত্রেই, অনুরোধের ফলাফলের rঅনুরূপ উপায়ে অ্যাক্সেস করা যায় python-request:

r.ok            // is the response successful?
r.statusCode    // status code of response
r.content       // response body as NSData?
r.text          // response body as text?
r.json          // response body parsed by NSJSONSerielization

আপনি এই খেলার মাঠে আরও উদাহরণ খুঁজে পেতে পারেন

কোনও খেলার মাঠে এই লাইব্রেরিটিকে সিঙ্ক্রোনাস মোডে ব্যবহার করা স্যুইফ্টের কাছে পেতে পারে সিআরএল-এর নিকটতম জিনিস।


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
dimo414

দেখে মনে হচ্ছে এই লাইব্রেরিটি হ্রাস পেয়েছে। সুইফট 4 সমর্থন নেই এবং কেউ খোলার বিষয়ে সাড়া দেয় না।
হেইনিরিশ

2

সুইফটে 4.1 এবং এক্সকোড 9.4.1 এ।

JSON পোষ্ট পদ্ধতির উদাহরণ। ইন্টারনেট সংযোগ যাচাই করতে https://developer.apple.com/library/archive/samplecode/Reachability/Intrication/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2

func yourFunctionName {
    //Check internet connection
    let networkReachability = Reachability.forInternetConnection()
    let networkStatus:Int = (networkReachability?.currentReachabilityStatus())!.rawValue
    print(networkStatus)
    if networkStatus == NotReachable.rawValue {
        let msg = SharedClass.sharedInstance.noNetMsg//Message
        //Call alert from shared class
        SharedClass.sharedInstance.alert(view: self, title: "", message: msg)
    } else {
        //Call spinner from shared class
        SharedClass.sharedInstance.activityIndicator(view: self.view)//Play spinner

        let parameters = "Your parameters here"
        var request = URLRequest(url: URL(string: url)!)

        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.httpMethod = "POST"

        print("URL : \(request)")

        request.httpBody = parameters.data(using: .utf8)

        let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error
            //Stop spinner
            SharedClass.sharedInstance.stopActivityIndicator() //Stop spinner
            //Print error in alert
            SharedClass.sharedInstance.alert(view: self, title: "", message: "\(String(describing: error!.localizedDescription))")
            return
            }

            SharedClass.sharedInstance.stopActivityIndicator() //Stop spinner

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(String(describing: response))")
            }

            do {
                let response = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject]
                print(response!)
                //Your code here                    
            } catch let error as NSError {
                print(error)
            }
        }

        task.resume()

    }

}

আপনার যদি আগ্রহ থাকে তবে এই ফাংশনটি শেয়ারডক্লাসে ব্যবহার করুন

//My shared class
import UIKit
class SharedClass: NSObject {

static let sharedInstance = SharedClass()

func postRequestFunction(apiName: String , parameters: String, onCompletion: @escaping (_ success: Bool, _ error: Error?, _ result: [String: Any]?)->()) {

    var URL =  "your URL here/index.php/***?"

    URL = URL.replacingOccurrences(of: "***", with: apiName)

    var request = URLRequest(url: URL(string: URL)!)
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.httpMethod = "POST"
    print("shared URL : \(request)")
    request.httpBody = parameters.data(using: .utf8)

    var returnRes:[String:Any] = [:]
    let task = URLSession.shared.dataTask(with: request) { data, response, error in

        if let error = error {
            onCompletion(false, error, nil)
        } else {
            guard let data = data else {
                onCompletion(false, error, nil)
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode == 200 {
                do {
                   returnRes = try JSONSerialization.jsonObject(with: data, options: []) as! [String : Any]
                    onCompletion(true, nil, returnRes)

                } catch let error as NSError {
                   onCompletion(false, error, nil)
                }
            } else {
                onCompletion(false, error, nil)
            }
        }
    }
    task.resume()
}


private override init() {

}

এবং অবশেষে এই ফাংশনটি এভাবে কল করুন ...

SharedClass.sharedInstance.postRequestFunction(apiName: "Your API name", parameters: parameters) { (success, error, result) in
    print(result!)
    if success {
        //Your code here
    } else {
        print(error?.localizedDescription ?? "")
    }
}

1

এইচটিটিপি জিইটি অনুরোধ করার জন্য একটি সাধারণ সুইফট ২.০ পদ্ধতি

এইচটিটিপি অনুরোধটি অবিচ্ছিন্ন তাই আপনাকে এইচটিটিপি অনুরোধ থেকে ফেরত মান পাওয়ার একটি উপায় প্রয়োজন। এই পদ্ধতির নোটিফায়ার ব্যবহার করে এবং দুটি শ্রেণিতে বিস্তৃত।

উদাহরণটি হ'ল http://www.example.com/handler.php?do=CheckUserJson&json= ওয়েবসাইটটি ব্যবহার করে সনাক্তকারী টোকেনের জন্য ব্যবহারকারীর নাম এবং পাসওয়ার্ড পরীক্ষা করা That ফাইলটিকে হ্যান্ডেলআরপিপি বলা হয় এবং এতে একটি সুইচ স্টেটমেন্ট রয়েছে বিশ্রামের পদ্ধতির জন্য প্যারামিটার করুন।

ভিউডিডলয়েডে আমরা নটিফায়ারঅবার্সার সেটআপ করি, জসন সেট আপ করি এবং getHTTPRequest ফাংশনে কল করি। এটি http অনুরোধ থেকে ফেরত প্যারামিটারের সাথে চেক করা ব্যবহারকারী নাম এবং পাসপাওয়ার্ড ফাংশনে ফিরে আসবে।

override func viewDidLoad() {
    super.viewDidLoad()
    // setup the Notification observer to catch the result of check username and password
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkedUsernameAndPassword:", name: CHECK_USERNAME_AND_PASSWORD, object: nil)        
    let username = GlobalVariables.USER_NAME
    let password = GlobalVariables.PASSWORD
    // check username and password
    if let jsonString = Utility.checkUsernameAndPasswordJson(username, password:password){
        print("json string returned = \(jsonString)")
        let url = CHECKUSERJSON+jsonString
        // CHECKUSERJSON = http://www.example.com/handler.php?do=CheckUserJson&json=
        // jsonString = {\"username\":\"demo\",\"password\":\"demo\"}"
        // the php script handles a json request and returns a string identifier           
        Utility.getHTTPRequest(url,notifierId: CHECK_USERNAME_AND_PASSWORD)
        // the returned identifier is sent to the checkedUsernaeAndPassword function when it becomes availabel.
    }
}

ইউটিলিটি.সুইফ্টে দুটি স্ট্যাটিক ফাংশন রয়েছে প্রথমে জসনকে এনকড করতে এবং তারপরে এইচটিটিপি কল করতে।

    static func checkUsernameAndPasswordJson(username: String, password: String) -> String?{
    let para:NSMutableDictionary = NSMutableDictionary()
        para.setValue("demo", forKey: "username")
        para.setValue("demo", forKey: "password")
    let jsonData: NSData
    do{
        jsonData = try NSJSONSerialization.dataWithJSONObject(para, options: NSJSONWritingOptions())
        let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding) as! String
        return jsonString
    } catch _ {
        print ("UH OOO")
        return nil
    }
}

এবং এইচটিটিপি অনুরোধ

    static func getHTTPRequest (url:String , notifierId: String) -> Void{
    let urlString = url
    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: nil)
    let safeURL = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
    if let url = NSURL(string: safeURL){
        let request  = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "GET"
        request.timeoutInterval = 60
        let taskData = session.dataTaskWithRequest(request, completionHandler: {
            (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
            if (data != nil) {
                let result = NSString(data: data! , encoding: NSUTF8StringEncoding)
                sendNotification (notifierId, message: String(result), num: 0)
            }else{
                  sendNotification (notifierId, message: String(UTF8String: nil), num: -1)                    }
        })
    taskData.resume()
    }else{
        print("bad urlString = \(urlString)")
    }
}

সেন্ডনোটিকেশন ফাংশনটি বৃত্তটি সম্পূর্ণ করে। লক্ষ্য করুন যে তেহ পর্যবেক্ষকটিতে নির্বাচক স্ট্রিংয়ের শেষে একটি ":" রয়েছে। এটি নোটিফিকেশনটিকে ইউজারআইএনফোতে পে-লোড বহন করতে দেয়। আমি এটি একটি স্ট্রিং এবং একটি int প্রদান।

    static func sendNotification (key: String, message:String?, num: Int?){
    NSNotificationCenter.defaultCenter().postNotificationName(
        key,
        object: nil,
        userInfo:   (["message": message!,
                      "num": "\(num!)"])
    )
}

নোট করুন যে এইচটিটিপি ব্যবহার করা পুরানো ফ্যাশনযুক্ত, এইচটিটিপিএসকে পছন্দ করুন দেখুন আমি আইওএস 9 এ সক্ষম হওয়া অ্যাপ ট্রান্সপোর্ট সুরক্ষা সহ কোনও এইচটিটিপি ইউআরএল কীভাবে লোড করব?


0
 var post:NSString = "api=myposts&userid=\(uid)&page_no=0&limit_no=10"

    NSLog("PostData: %@",post);

    var url1:NSURL = NSURL(string: url)!

    var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!

    var postLength:NSString = String( postData.length )

    var request:NSMutableURLRequest = NSMutableURLRequest(URL: url1)
    request.HTTPMethod = "POST"
    request.HTTPBody = postData
    request.setValue(postLength, forHTTPHeaderField: "Content-Length")
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.setValue("application/json", forHTTPHeaderField: "Accept")

    var reponseError: NSError?
    var response: NSURLResponse?

    var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)

    if ( urlData != nil ) {
        let res = response as NSHTTPURLResponse!;

        NSLog("Response code: %ld", res.statusCode);

        if (res.statusCode >= 200 && res.statusCode < 300)
        {
            var responseData:NSString  = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!

            NSLog("Response ==> %@", responseData);

            var error: NSError?

            let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary

            let success:NSInteger = jsonData.valueForKey("error") as NSInteger

            //[jsonData[@"success"] integerValue];

            NSLog("Success: %ld", success);

            if(success == 0)
            {
                NSLog("Login SUCCESS");

                self.dataArr = jsonData.valueForKey("data") as NSMutableArray
                self.table.reloadData()

            } else {

                NSLog("Login failed1");
                ZAActivityBar.showErrorWithStatus("error", forAction: "Action2")
            }

        } else {

            NSLog("Login failed2");
            ZAActivityBar.showErrorWithStatus("error", forAction: "Action2")

        }
    } else {

        NSLog("Login failed3");
        ZAActivityBar.showErrorWithStatus("error", forAction: "Action2")
}

এটা অবশ্যই আপনাকে সাহায্য করবে


0

// এখানে একটি উদাহরণ যা আমার পক্ষে কাজ করেছিল

// সুইফট ফাংশন যা মূল মান সহ একটি সার্ভারে একটি অনুরোধ পোস্ট করে

func insertRecords()
{



    let usrID = txtID.text
    let checkin = lblInOut.text
    let comment = txtComment.text



    // The address of the web service
    let urlString = "http://your_url/checkInOut_post.php"

    // These are the keys that your are sending as part of the post request
    let keyValues = "id=\(usrID)&inout=\(checkin)&comment=\(comment)"




    // 1 - Create the session by getting the configuration and then
    //     creating the session

    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: nil)


    // 2 - Create the URL Object

    if let url = NSURL(string: urlString){


        // 3 - Create the Request Object

        var request  = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"

        // set the key values
        request.HTTPBody = keyValues.dataUsingEncoding(NSUTF8StringEncoding);


        // 4 - execute the request

        let taskData = session.dataTaskWithRequest(request, completionHandler: {

            (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in

            println("\(data)")

            // 5 - Do something with the Data back

            if (data != nil) {

                // we got some data back
                println("\(data)")

                let result = NSString(data: data , encoding: NSUTF8StringEncoding)
                println("\(result)")

                if result == "OK" {

                    let a = UIAlertView(title: "OK", message: "Attendece has been recorded", delegate: nil, cancelButtonTitle: "OK")

                    println("\(result)")

                    dispatch_async(dispatch_get_main_queue()) {


                    a.show()


                    }


                } else {
                  // display error and do something else

                }


            } else

            {   // we got an error
                println("Error getting stores :\(error.localizedDescription)")

            }


        })

        taskData.resume()



    }


}

মূল মানগুলি পেতে পিএইচপি কোড

$ এমপিআইডি = $ _POST ['আইডি'];

$ ইনআউট = $ _POST ['ইনআউট'];

$ মন্তব্য = $ _POST ['মন্তব্য'];


0

খেলার মাঠে এখানে একটি খুব সাধারণ সুইফট 4 উদাহরণ রয়েছে:

import UIKit
// run asynchronously in a playground
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

// create a url
let url = URL(string: "http://www.stackoverflow.com")

// create a data task
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
    if error != nil {
        print("there's a problem")
    }
    print(String(data: data!, encoding: String.Encoding.utf8) ?? "")
}

//running the task w/ resume
task.resume()

0

XCUITest এর জন্য async অনুরোধটি এটি ব্যবহারের আগে পরীক্ষা শেষ হওয়া বন্ধ করতে পারে (সম্ভবত 100 টি টাইমআউট হ্রাস করুন):

func test_api() {
    let url = URL(string: "https://jsonplaceholder.typicode.com/posts/42")!
    let exp = expectation(description: "Waiting for data")
    let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
        guard let data = data else { return }
        print(String(data: data, encoding: .utf8)!)
        exp.fulfill()
    }
    task.resume()
    XCTWaiter.wait(for: [exp], timeout: 100)
}


-2

একটি নমুনা "জিইটি" অনুরোধের উদাহরণ নীচে দেওয়া হয়েছে।

let urlString = "YOUR_GET_URL"
let yourURL = URL(string: urlstring)
let dataTask = URLSession.shared.dataTask(with: yourURL) { (data, response, error) in
do {
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
    print("json --- \(json)")
    }catch let err {
    print("err---\(err.localizedDescription)")
    }
   }
dataTask.resume()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.