Notice
Recent Posts
Recent Comments
Link
투케이2K
311. (ios/objc) NSURLSession 사용해 http 요청 수행 및 콜백 (callback) 응답 확인 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : Objc
[http 요청 : 소스 코드]
// [HTTP 통신 콜백 메소드 호출 실시]
NSString *url = @"http://jsonplaceholder.typicode.com/posts?";
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"1" forKey:@"userId"];
[params setObject:@"1" forKey:@"id"];
[self getHttpCallBack:url :params :^(BOOL returnBool, NSString *returnString) {
if (returnBool == true){
printf("\n");
printf("==================================== \n");
printf("[ViewController >> getHttpCallBack() :: HTTP 통신 콜백 결과 확인 실시] \n");
printf("[RETURN :: %s] \n", @"SUCCESS".description.UTF8String);
printf("[DATA :: %s] \n", returnString.description.UTF8String);
printf("==================================== \n");
printf("\n");
}
else {
printf("\n");
printf("==================================== \n");
printf("[ViewController >> getHttpCallBack() :: HTTP 통신 콜백 결과 확인 실시] \n");
printf("[RETURN :: %s] \n", @"FAIL".description.UTF8String);
printf("[DATA :: %s] \n", returnString.description.UTF8String);
printf("==================================== \n");
printf("\n");
}
}];
[http 메소드 : 소스 코드]
// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
-(void)getHttpCallBack:(NSString *)urlData :(NSMutableDictionary *)params :(void (^)(BOOL returnBool, NSString *returnString))completion{
printf("\n");
printf("==================================== \n");
printf("[ViewController >> getHttpCallBack() :: HTTP 통신 콜백 메소드 수행 실시] \n");
printf("==================================== \n");
printf("\n");
// [초기 주소 매핑 수행 실시]
NSString *url = urlData;
// [파라미터 삽입 실시]
if (params != nil && params.count > 0){
// [for 문을 돌면서 순차적으로 key , value 확인 실시]
for (NSString *keyData in params.allKeys){
NSString *valueData = [NSString stringWithFormat:@"%@" , params[keyData]];
// [주소 포맷 수행 실시]
url = [url stringByAppendingString:keyData];
url = [url stringByAppendingString:@"="];
url = [url stringByAppendingString:valueData];
url = [url stringByAppendingString:@"&"];
}
url = [url substringToIndex:url.length - 1];
}
printf("\n");
printf("==================================== \n");
printf("[ViewController >> getHttpCallBack() :: HTTP 통신 요청 정보] \n");
printf("[URL :: %s] \n", url.description.UTF8String);
printf("==================================== \n");
printf("\n");
// [http 통신 Request 선언]
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
// [http 통신 메소드 지정]
[urlRequest setHTTPMethod:@"GET"];
// [http 통신 Content-Type 설정]
[urlRequest setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
// [NSURLSession 생성 실시]
NSURLSession *session = [NSURLSession sharedSession];
// [NSURLSessionDataTask http 통신 요청 처리]
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// [응답 결과]
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
// [리턴 데이터 선언]
NSString * returnData = @"";
// [에러 체크]
if (error != nil){
@try
{
returnData = error.localizedDescription;
}
@catch (NSException *exception)
{
NSLog(@"Http Request Exception [Error] :: %@", exception);
}
// [콜백 반환]
completion(false, returnData);
}
else {
// [상태 코드 확인]
if(httpResponse.statusCode >= 200 && httpResponse.statusCode <= 300) {
@try
{
returnData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
@catch (NSException *exception)
{
NSLog(@"Http Request Exception [Response] :: %@", exception);
}
// [콜백 반환]
completion(true, returnData);
}
else {
// [상태 코드 에러]
returnData = [returnData stringByAppendingString:@"State Code Error : "];
returnData = [returnData stringByAppendingString:[@(httpResponse.statusCode) stringValue]];
returnData = [returnData stringByAppendingString:@" : "];
returnData = [returnData stringByAppendingString:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]];
// [콜백 반환]
completion(false, returnData);
}
}
}];
[dataTask resume];
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
313. (ios/swift) viewWillTransition 사용해 실시간 디스플레이 화면 가로 , 세로 모드 전환 상태 감지 (0) | 2022.11.21 |
---|---|
312. (ios/swift) Assets 에셋 폴더에 이미지 추가 및 imageView 이미지 뷰에 사진 설정 실시 (0) | 2022.11.21 |
310. (ios/objc) dispatch_semaphore_t 세마포어 사용해 프로그램 순차적 동기 로직 구현 (0) | 2022.11.21 |
309. (ios/objc) completion block 사용해 콜백 (callback) 메소드 구현 (0) | 2022.11.21 |
308. (ios/objc) NSTimer 타이머 사용해 실시간 카운트 실시 - timer count (0) | 2022.11.21 |
Comments