Computer >> 컴퓨터 >  >> 프로그램 작성 >> IOS

Swift를 사용하여 iOS 앱에서 HTTP POST 요청을 만드는 방법은 무엇입니까?

<시간/>

iOS에서 http 요청을 하기 위해 DataTask와 세션을 사용할 것입니다. 구성, 세션, URL, 요청 및 dataTask 개체를 생성합니다. 우리가 거쳐야 할 단계를 살펴보겠습니다.

  • 우선 기본 구성인 세션 개체를 만들어야 합니다.

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")
  • 요청 객체를 생성했으면 위에서 방금 생성한 URL을 사용하여 dataTask를 수행해야 합니다. 이것이 우리의 완전한 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()
}

참고 :일부 API에 액세스하려면 info.plist 파일에서 Transport Security 예외를 허용해야 할 수도 있습니다.

일부 데이터를 게시하려면 API가 필요하므로 이 예에서는 출력이 표시되지 않습니다.