Notice
Recent Posts
Recent Comments
Link
투케이2K
52. (Objective-C/objc) NSURLSession 사용해 http 통신 및 response header 확인 실시 본문
Objective-C
52. (Objective-C/objc) NSURLSession 사용해 http 통신 및 response header 확인 실시
투케이2K 2022. 8. 21. 18:32[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : OBJECTIVE-C
[호출 방법]
// [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");
}
}];
[소스 코드]
// 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;
// [Response Header 확인]
NSDictionary *headerDictionary = [httpResponse allHeaderFields];
printf("\n");
printf("==================================== \n");
printf("[ViewController >> getHttpCallBack() :: HTTP 통신 Response Header 확인] \n");
printf("[headerDictionary :: %s] \n", headerDictionary.description.UTF8String);
printf("==================================== \n");
printf("\n");
// [리턴 데이터 선언]
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];
}
[결과 출력]
반응형
'Objective-C' 카테고리의 다른 글
Comments