자세 한 iOS-ASIHTP Request 네트워크 요청
12665 단어 iosasihttprequest
iOS SDK 의 HTTP 네트워크 를 사용 하여 API 를 요청 합 니 다.상당히 복잡 하고 호출 이 번 거 롭 습 니 다.ASIHTTPRequest 는 CFNetwork API 를 패키지 하고 사용 하기에 매우 간단 한 API 입 니 다.별명 은'HTTP 종결자'입 니 다.Objective-C 로 작성 하여 운영 효율 이 높 고 Mac OS X 시스템 과 iOS 플랫폼 의 응용 프로그램 에 잘 응용 할 수 있 습 니 다.ASIHTTPRequest 는 기본 적 인 HTTP 요청 과 REST 기반 서비스 간 의 상호작용 에 적 용 됩 니 다.안 타 깝 게 도 저 자 는 업 데 이 트 를 중단 하고 잠재 적 인 BUG 를 해결 하 는 사람 이 없 었 습 니 다.많은 회사 의 오래된 프로젝트 에 그의 모습 이 남아 있 었 습 니 다.예전 의 많은 iOS 프로젝트 는 ASI+SBJSon 이 었 습 니 다.ASI 를 사용 할 수 있 는 지 없 는 지 는 오래된 iOS 프로그래머 의 기준 중 하나 라 고 할 수 있 습 니 다.iOS 9 부터 CFNetwork 와 관련 된 클래스 와 방법 이 폐기 되 기 시 작 했 으 며,ASIHTTPRequest 의 사용 을 AFNetworking 으로 대체 할 수 있 습 니 다.iOS 9+에서 ASIHTTRequest 를 사용 하면 App Transport Security Settings 에 설정 을 추가 할 필요 가 없습니다.
1、ASIHTTPRequest
1.1 ASI 주요 특징
4.567917.간단 한 인 터 페 이 스 를 통 해 서버 에 데 이 터 를 제출 하고 서버 에서 데 이 터 를 얻 는 작업 을 완성 할 수 있 습 니 다4.567917.다운로드 한 데 이 터 는 메모리 에 저장 하거나 디스크 에 직접 저장 할 수 있 습 니 다4.567917.로 컬 파일 을 서버 에 업로드 할 수 있 습 니 다
1.밑바닥 실현
1)AFN 의 밑바닥 은 OC 기반 NSURLConnection 과 NSURLSession 을 실현 한다.
2)ASI 의 밑바닥 은 순 C 언어 를 바탕 으로 하 는 CFNetwork 프레임 워 크 를 실현 한다
3)NSURLConnection 과 NSURLSession 은 CFNetwork 위 에 있 는 패키지 이기 때문에 ASI 의 작 동 성능 은 AFN 보다 높 습 니 다.
2.서버 에 되 돌아 오 는 데이터 처리
1)ASI 는 서버 데이터 처리 방식 을 직접 제공 하지 않 고 NSData/NSstring 으로 되 돌 아 왔 다.
2)AFN 은 다양한 서버 데이터 처리 방식 을 제공 합 니 다(1)JSON 처리-NSDictionary 또는 NSArray 로 직접 되 돌려 줍 니 다.
(2)XML 처리-xml 형식 데 이 터 를 되 돌려 주 므 로 분석 이 필요 합 니 다.
(3)기타 유형의 데이터 처리
3.감청 요청 과정 1
)AFN 은 success 와 failure 두 블록 을 제공 하여 요청 을 감청 하 는 과정(성공 과 실패 만 감청 할 수 있 습 니 다)
4.567917.대리 가 되 고 협 의 를 지 키 며 협의 중의 대리 방법 을 실현 한다
4.파일 다운로드 와 파일 업로드 의 사용 난이도
1)AFN
5.네트워크 모니터링
1)AFN 은 자체 적 으로 네트워크 모니터링 클래스 를 봉 하여 사용 하기 쉽다
2)ASI 는 Reachability 를 사용 합 니 다.CocoaPods 를 사용 하여 ASI 를 다운로드 할 때 Reachability 를 동시에 다운로드 하지만 Reachability 는 네트워크 모니터링 으로 사용 하기 가 복잡 합 니 다(AFN 의 네트워크 모니터링 류 에 비해)
3)AFN 을 사용 하여 네트워크 모니터링 AFNetworkReachability Manager 를 추천 합 니 다.
6.ASI 가 제공 하 는 기타 실 용적 인 기능
1)신호 옆 에 있 는 동 그 라 미 를 제어 할 지,요청 중 에 돌 릴 지
2)요청 간 의존 도 를 쉽게 설정 할 수 있 습 니 다.모든 요청 은 NSOperation 대상 입 니 다.
3)모든 요청 을 일괄 적 으로 관리 할 수 있 습 니 다.
전체 대기 열 에서 요청 한 다운로드 진도 와 업로드 진 도 를 감청 합 니 다.
2.ASIHTTPRequest 의 사용
2.1 ASIHTTPRequest 추가
Github 사이트 주소:https://github.com/pokeb/asi-http-request
https://allseeing-i.com/ASIHTTPRequest/
ASIHTP Request 시스템 요구 사항:
ASIHTTPRequest Version
Minimum iOS Target
Target Notes
1.8.1 -> 1.8.2
iOS 3.0+
0.2 -> 1.8.0
ASIHTTPRequest 사용 MRC
Objective-C
//
CFNetwork.framework
SystemConfiguration.framework
MobileCoreServices.framework
CoreGraphics.framework
libz.1.1.3.tbd
libxml2.2.tbd
//
ASIHTTPRequest-1.8.2
// TARGETS -> Builed Settings -> Search Paths -> Header Search Paths
/usr/include/libxml2
// TARGETS -> Build Phases -> Compile Sources -> ...in .../ASIHTTPRequest
-fno-objc-arc
//
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
2.2 ASIHTP Request 설정Objective-C
//
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"]];
[request addRequestHeader:@"Referer" value:@"http://www.dreamingwish.com/"];
//
request.shouldContinueWhenAppEntersBackground = YES;
//
request.numberOfTimesToRetryOnTimeout = 3;
// KeepAlive
// Set the amount of time to hang on to a persistent connection before it should expire to 2 minutes
request.persistentConnectionTimeoutSeconds = 120;
// Disable persistent connections entirely
request.shouldAttemptPersistentConnection = NO;
// status bar
[ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:NO];
//
BOOL isNetworkInUse = [ASIHTTPRequest isNetworkInUse];
3.ASI 동기 GET 요청이것 은 ASIHTTPRequest 의 가장 간단 한 사용 모드 입 니 다.startSynchronous 메 시 지 를 보 낸 후 같은 스 레 드 에서 HTTP 요청 을 실행 하기 시 작 했 습 니 다.스 레 드 는 요청 이 끝 날 때 까지 기 다 립 니 다(요청 이 성공 하거나 실 패 했 습 니 다).error 속성 검 사 를 통 해 요청 이 성 공 했 거나 오류 가 발생 했 는 지 판단 할 수 있 습 니 다.
되 돌아 오 는 텍스트 정 보 를 가 져 오 려 면 responseString 방법 을 호출 하 십시오.그림,MP3 와 같은 바 이 너 리 파일 을 다운로드 하면 responseData 방법 을 사용 하여 NSData 대상 을 얻 을 수 있 습 니 다.
일반적인 상황 에서 동기 화 요청 대신 비동기 요청 을 우선 사용 해 야 합 니 다.주 스 레 드 에서 ASIHTTPRequest 동기 화 요청 을 사용 하면 주 스 레 드 의 실행 을 막 을 수 있 습 니 다.이 로 인해 사용자 인터페이스 가 사용자 작업 에 응답 하지 않 고 모든 애니메이션 이 요청 이 완 료 될 때 까지 렌 더 링 을 중단 합 니 다.
Objective-C
데이터 요청
NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
//
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
// , ,
request.timeOutSeconds = 5;
//
[request startSynchronous];
//
NSError *error = [request error];
//
if (error) {
//
NSLog(@" :
%@", error);
} else {
// ,
NSString *responseString = [request responseString];
NSLog(@" :
%@", responseString);
// ,NSData
NSData *responseData = [request responseData];
textView.text = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
}
파일 다운로드request 의 setDownloadDestinationPath 를 설정 하면 파일 다운로드 용 다운로드 대상 디 렉 터 리 를 설정 할 수 있 습 니 다.우선 다운로드 프로 세 스 파일 은 temporary FileDownloadPath 디 렉 터 리 에 저 장 됩 니 다.다운로드 가 완료 되면 다음 과 같은 일 을 할 것 입 니 다.
1.데이터 가 압축 된 경우 압축 을 풀 고 download DestinationPath 디 렉 터 리 에 파일 을 넣 으 면 임시 파일 이 삭 제 됩 니 다.
2.다운로드 에 실패 하면 임시 파일 은 download DestinationPath 디 렉 터 리 로 직접 이동 하고 같은 이름 의 파일 을 교체 합 니 다.
다운로드 중인 모든 데 이 터 를 가 져 오 려 면 delegate 의 request:didReceiveData:방법 을 실현 할 수 있 습 니 다.그러나 이 방법 을 실현 한다 면 request 는 다운로드 가 끝 난 후에 request 는 파일 을 download DestinationPath 에 두 지 않 고 수 동 으로 처리 해 야 합 니 다.
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com/wp-content/uploads/2011/10/asihttprequest-auth.png"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
//
[request setDownloadDestinationPath:@"/Users/JHQ0228/Desktop/asi.png"];
[request startSynchronous];
//
NSError *error = [request error];
//
if (error) {
NSLog(@" :
%@", error);
} else {
//
NSLog(@" :
");
}
4.ASI 비동기 GET 요청요청 은 배경 스 레 드 에서 실 행 됩 니 다.요청 이 끝 난 후에 호출 된 스 레 드 를 알려 주 십시오.이렇게 하면 메 인 스 레 드 가 네트워크 요청 을 할 때 인터페이스 가 잠 겨 있 는 등 상황 을 초래 하지 않 습 니 다.
1.협의 방식
여기에서 두 개의 delegate 방법 을 실 현 했 습 니 다.데이터 요청 이 성공 할 때 requestFinished 를 호출 하고 요청 이 실 패 했 을 때(예 를 들 어 네트워크 문제 나 서버 내부 오류)requestFailed 를 호출 합 니 다.
NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
//
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
// , ,
request.timeOutSeconds = 5;
// , <ASIHTTPRequestDelegate>
request.delegate = self;
//
[request startAsynchronous];
// ,
- (void)requestFinished:(ASIHTTPRequest *)request {
}
// ,
- (void)requestFailed:(ASIHTTPRequest *)request {
}
2.Block 방식플랫폼 지원 상황 에서 ASIHTTPRequest 1.8 이상 은 block 을 지원 합 니 다.
NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
// , __weak block
__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
// , ,
request.timeOutSeconds = 5;
//
[request startAsynchronous];
//
[request setCompletionBlock:^{
}];
//
[request setFailedBlock:^{
}];
5.ASI POST 요청1.POST 양식
ASIFormDataRequest,아 날로 그 폼 제출,제출 형식 과 Header 가 자동 으로 식 별 됩 니 다.파일 의 데 이 터 는 필요 할 때 디스크 에서 불 러 오기 때문에 웹 서버 가 처리 할 수만 있다 면 큰 파일 을 업로드 하 는 것 은 문제 가 없습니다.
// 'application/x-www-form-urlencoded' , , ‘multipart/form-data'。
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://www.dreamingwish.com"]];
//
[request setPostValue:@"Ben" forKey:@"first_name"];
[request setPostValue:@"Copsey" forKey:@"last_name"];
//
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];
// mime , mime , :
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://www.dreamingwish.com"]];
// Upload a file on disk
[request setFile:@"/Users/ben/Desktop/ben.jpg" withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];
// Upload an NSData instance
NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"myphoto.jpg"]);
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];
// addPostValue name :
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://www.dreamingwish.com"]];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
2,PUT 요청,사용자 정의 POST 요청PUT 요청 을 보 내 거나 POST 요청 을 사용자 정의 하려 면 appendPostData:또는 appendPostDataFromFile 을 사용 하 십시오.
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://www.dreamingwish.com"]];
[request appendPostData:[@"This is my data" dataUsingEncoding:NSUTF8StringEncoding]];
// Default becomes POST when you use appendPostData: / appendPostDataFromFile: / setPostBody:
[request setRequestMethod:@"PUT"];
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.