티스토리 뷰
안녕하세요 Gons 입니다.
제 블로그 통계를 보니 Alamofire 정리글 이 조회수가 가장 많아서
오늘은 URLSession 으로 알라모파이어 없이 http 통신을 해보겠습니다.
기본 Foundation 에 포함되어 있어서 따로 라이브러리 설치 안해도 됩니다.
1. GET
일단 간단하게 GET 먼저 해보겠습니다.
https://jsonplaceholder.typicode.com
이 사이트에 데이터를 가져올겁니다.
이렇게 작성하고 실행하면
func get() {
//도메인 넣어서 URL 컴포넌트 생성
var components = URLComponents(string: "https://jsonplaceholder.typicode.com")
//도메인 뒤에 API 주소 삽입
components?.path = "/comments"
//파라미터 추가할거 있으면 작성
let parameters = [URLQueryItem(name: "postId", value: "1"),
URLQueryItem(name: "id", value: "2")]
components?.percentEncodedQueryItems = parameters
//URL 생성
guard let url = components?.url else { return }
print(url)
//리퀘스트 생성
var request: URLRequest = URLRequest(url: url)
//통신 방법 지정
request.httpMethod = "GET"
//태스크 생성
let task = URLSession.shared.dataTask(with: request) { data, response, error in
//여기서 에러 체크 및 받은 데이터 가공하여 사용
guard let data,
let str = String(data: data, encoding:.utf8) else { return }
print(str)
}
//실행
task.resume()
}
데이터를 잘 가져옵니다.
https://jsonplaceholder.typicode.com/comments?postId=1&id=2
우리가 만든 이 URL을 그대로 사파리에 쳐보면 똑같은 데이터를 확인할 수 있습니다.
2. POST
이제 POST 를 해볼건데요
서버로 데이터를 보내야하기 때문에
이 사이트에 임시 서버를 만들어서 데이터를 보내보겠습니다.
사이트에 접속해서 빨간색 표시한 버튼 눌러서 서버 하나 만들어주세요.
서버가 만들어졌습니다. 빨간색 박스 표시한 주소를 복사해주세요.
설정 보기도 눌러보면
통신 성공 했을 때 이런 메시지가 나온다고 합니다. 바꿀 수도 있고요.
자 이제 서버로 보낼 데이터 모델 하나 만들고요
struct User: Codable {
var name: String
var job: String
}
아까 복사해둔 서버 주소로 아래와 같이 작성하고 실행하면
func post() {
var components = URLComponents(string: "https://ptsv2.com")
//아까 복사해둔 서버 주소
components?.path = "/t/swnuy-1664239957/post"
guard let url = components?.url else { return }
var request: URLRequest = URLRequest(url: url)
request.httpMethod = "POST"
//헤더 지정
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
//타임아웃 시간 지정. (5초 이상 걸리면 중지)
request.timeoutInterval = 5
//Codable 모델 생성
let bodyModel = User(name: "Gons", job: "iOS")
//Codable 모델을 JSON 인코딩하여 데이터로 만든 후 http 바디에 추가
request.httpBody = try? JSONEncoder().encode(bodyModel)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data,
let str = String(data: data, encoding:.utf8) else { return }
print(str)
}
task.resume()
}
아까 컨피그에 적혀있던 내용이 잘 프린트 됩니다.
사이트에서 새로고침을 해보면 Dumps 에 목록이 하나 생겼습니다. 우리가 보낸겁니다.
view 를 눌러서 상세하게 보면 우리가 보낸 데이터가 바디에 잘 들어가 있는것을 확인할 수 있습니다.
끝입니다.
URLSession 으로 이렇게 간단하게 http 통신을 할 수 있습니다.
잘못 작성한 내용이 있거나 궁금하신 점 있으면 있으면 댓글로 알려주세요.
감사합니다 ㅎㅎ
iOS
Swift
Xcode
'iOS Swift + UIKit' 카테고리의 다른 글
iOS Swift 사용자 정의 연산자 Custom Operator (0) | 2023.01.01 |
---|---|
원티드 프리온보딩 iOS 챌린지 1차 (Wanted Free Onboarding iOS Challenge) (0) | 2022.11.16 |
iOS Swift UISheetPresentationController.Detent (하프 모달 Half screen size custom modal drag bottom sheet present) (3) | 2022.09.01 |
iOS Swift Email Masking (이메일 마스킹 * 표시 ID 아이디 가리기) (0) | 2022.06.01 |
iOS Swift 웹뷰 html 바디 가져오기 (get webview html body tag) (0) | 2022.05.04 |
- Total
- Today
- Yesterday
- Reject
- Localizations
- Language
- 심사
- 프로그레스
- SWIFT
- 스위프트
- TabView
- AppStore
- Localized
- indicator
- 리젝
- SKProductsRequestDelegate
- Authorization
- 엑스코드
- SKPaymentTransactionObserver
- ios
- localizing
- custom segment
- permission
- 아이오에스
- 다국어
- presentationcompactadaptation
- 인디케이터
- 로컬라이징
- SKPayment
- 테이블뷰
- swiftUI
- Xcode
- TabBar
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |