Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> IOS

จะสร้างคำขอ HTTP POST บนแอพ iOS โดยใช้ Swift ได้อย่างไร


ในการสร้างคำขอ http ใน iOS เราจะใช้ประโยชน์จาก DataTask และเซสชัน เราจะสร้างออบเจ็กต์การกำหนดค่า เซสชัน url คำขอ และ dataTask มาดูขั้นตอนกันเลยดีกว่า

  • ขั้นแรกเราต้องสร้าง session object ซึ่งเป็นการกำหนดค่าเริ่มต้น

let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)
  • จากนั้นเราต้องสร้างคำขอ URL แบบที่เราต้องการ สามารถรับ โพสต์ ลบ หรือใส่ได้ ในตัวอย่างนี้ เราเห็นประเภท ”POST”

let url = URL(string: URLString)
//let url = NSURL(string: urlString as String)
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
  • เมื่อเราสร้างวัตถุคำขอแล้ว เราจำเป็นต้องดำเนินการ dataTask ด้วย URL ที่เราเพิ่งสร้างขึ้นด้านบน นี่คือลักษณะวิธีการ dataTask ที่สมบูรณ์ของเราในตอนนี้

let dataTask = session.dataTask(with: url!) { data,response,error in
   guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
   else {
      print("error: not a valid http response")
      return
   }
   switch (httpResponse.statusCode) {
      case 200: //success response.
         break
      case 400:
         break
      default:
         break
   }
}
dataTask.resume()
  • ตอนนี้เราสามารถฝังสิ่งนี้ในฟังก์ชันและใช้ในโค้ดของเราได้

func hitAPI(_for URLString:String) {
   let configuration = URLSessionConfiguration.default
   let session = URLSession(configuration: configuration)
   let url = URL(string: URLString)
   //let url = NSURL(string: urlString as String)
   var request : URLRequest = URLRequest(url: url!)
   request.httpMethod = "POST"
   request.addValue("application/json", forHTTPHeaderField: "Content-Type")
   request.addValue("application/json", forHTTPHeaderField: "Accept")
   let dataTask = session.dataTask(with: url!) {
      data,response,error in
      // 1: Check HTTP Response for successful GET request
      guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
      else {
         print("error: not a valid http response")
         return
      }
      switch (httpResponse.statusCode) {
         case 200:
            //success response.
            break
         case 400:
            break
         default:
            break
      }
   }
   dataTask.resume()
}

หมายเหตุ :คุณอาจต้องอนุญาตข้อยกเว้น Transport Security ในไฟล์ info.plist เพื่อเข้าถึง API บางตัว

ไม่มีผลลัพธ์ที่แสดงในตัวอย่างนี้ เนื่องจาก API จำเป็นต้องโพสต์ข้อมูลบางส่วน