iOS 의 http 요청:get,post 및 동기 화,비동기
view source print ?
01.
"font-size:14px;"
>NSString * URLString = @
"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode= "
;
02.
NSURL * URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
03.
04.
NSURLRequest * request = [[NSURLRequest alloc]initWithURL:URL];
05.
NSURLResponse * response = nil;
06.
NSError * error = nil;
07.
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
08.
if
(error) {
09.
NSLog(@
"error: %@"
,[error localizedDescription]);
10.
}
else
{
11.
NSLog(@
"response : %@"
,response);
12.
NSLog(@
"backData : %@"
,[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
13.
}
14.
get URL , , , , 。 URL , , 。
NSURL, URLWithString UTF8 , , 。 NSURL NSURLRequest, NSURLConnection , request get 。
NSError , , , , 。
2、post:
01.
NSString * URLString = @
"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityString"
;
02.
NSURL * URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
03.
04.
NSString * postString = @
"theRegionCode= "
;
05.
NSData * postData = [postString dataUsingEncoding:NSUTF8StringEncoding];
// NSData
06.
07.
NSMutableURLRequest * request = [[NSMutableURLRequest alloc]init];
08.
[request setHTTPMethod:@
"post"
];
//
09.
[request setURL:URL];
//
10.
[request setHTTPBody:postData];
//
11.
12.
NSURLResponse * response;
13.
NSError * error;
14.
NSData * backData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
15.
16.
if
(error) {
17.
NSLog(@
"error : %@"
,[error localizedDescription]);
18.
}
else
{
19.
NSLog(@
"response : %@"
,response);
20.
NSLog(@
"backData : %@"
,[[NSString alloc]initWithData:backData encoding:NSUTF8StringEncoding]);
21.
}
post 방식 의 경우 인 자 는 HTTPBody 에 놓 여 있 고 문자열 을 응답 하 는 NSData 형식 으로 바 꿔 야 합 니 다.인터페이스 문서 에 서 는 일반적으로 디 코딩 방식 을 지적 합 니 다.지정 한 방식 으로 디 코딩 해 야 합 니 다.여기 UTF 8 도 gb 2312 가 있 습 니 다.request 가 구축 되면 get 방법 과 같이 NSURLConnection 요청 데 이 터 를 사용 합 니 다.
3.동기 화 및 비동기 요청:
일반 네트워크 요청 은 데이터 가 아무리 적 고 네트워크 가 아무리 좋아 도 시간 이 걸 리 며 네트워크 가 좋 지 않 을 때 app 상 태 를 고려 해 야 할 때 가 많 습 니 다.동기 화 요청 을 사용 하면 안심 하고 데 이 터 를 기다 리 면 됩 니 다.추가 작업 을 하지 않 아 도 됩 니 다.위의 두 가지 예 는 동기 화 요청 입 니 다.connection 호출 방법 후 요청 한 데 이 터 를 되 돌려 주 고 다른 일 을 하지 않 아 도 됩 니 다.그러나 동기 화 는 스 레 드 를 막 을 수 있 습 니 다.button 을 누 르 면 요청 이 끝 날 때 까지 하 이 라이트 상태 에 머 물 러 app 이 걸 리 고 다운 되 는 느낌 을 줄 수 있 습 니 다.좋 지 않 습 니 다.
비동기 get:
view source print ? 1.
NSString * URLString = @
"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode= "
;
2.
NSURL * URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
3.
4.
NSURLRequest * request = [[NSURLRequest alloc]initWithURL:URL];
5.
6.
_connection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; (
1
)
비동기 post 와 유사 합 니 다.NSURLConnection 호출 방법 으로 데 이 터 를 직접 얻 는 것 이 아니 라(1)위치 방법 으로 NSURLConnection 대상 을 구축 합 니 다.이 방법 은 기본적으로 데 이 터 를 요청 합 니 다.다음은 의뢰 가 관건 이 야.요청 한 시간 이 알 수 없 기 때문에 의뢰 모드 의 리 셋 작용 을 사용 하고 데이터 에서 돌아 오 는 것 은 프로 토 콜 을 호출 하 는 방법 입 니 다.post 는 get 의뢰 방법 과 같 습 니 다.
프로 토 콜 방법:
주의해 야 할 것 은 두 가지 의뢰 가 있 습 니 다.NSURLConnection DataDelegate 와 NSURLConnection Delegate 는 이전 의뢰 에 정 의 된 것 이 므 로 NSURLConnection DataDelegate 를 따 르 면 됩 니 다.
보통 네 가지 의뢰 방법 을 사용 합 니 다.
view source print ? 01.
"code"
class
=
"objc"
>
// respone, HTTP , 、
02.
-(
void
)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@
"response = %@"
,response); _backData = [[NSMutableData alloc]init];
03.
}
04.
05.
// , , , NSData ,
06.
-(
void
)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
07.
[_backData appendData:data];
08.
}
09.
10.
// , ,
11.
-(
void
)connectionDidFinishLoading:(NSURLConnection *)connection{
12.
NSLog(@
"%@"
,[[NSString alloc]initWithData:_backData encoding:NSUTF8StringEncoding]);
13.
}
14.
15.
// ,
16.
-(
void
)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
17.
if
(error.code == NSURLErrorTimedOut) {
18.
NSLog(@
" "
);
19.
}
20.
NSLog(@
"%@"
,[error localizedDescription]);
21.
}
1.
view source print ? 1.
view source print ? 1.
마지막 으로 요청 시간 초과 설정 가능:
view source print ? 1.
NSURLRequest * request = [[NSURLRequest alloc]initWithURL:URL cachePolicy:
0
timeoutInterval:
8.0
];
또는:
view source print ? 1.
NSMutableURLRequest * request = [[NSMutableURLRequest alloc]initWithURL:URL];
2.
[request setTimeoutInterval:
8.0
];
요청 시간 이 설정 한 시간 초과 시간 을 초과 하면 자동 으로 호출 됩 니 다.
view source print ? 1.
-(
void
)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
그러나 문 제 는 시간 초과 로 인 한 요청 실 패 를 어떻게 판단 하 느 냐 하 는 것 이다.위의 예 에 이미 쓰 여 있 으 며,되 돌아 오 는 error 의 code 에 따라 판단 할 수 있다.서로 다른 상황 을 알 아 보 는 요청 이 실 패 했 습 니 다.사용자 에 게 더 좋 은 힌트 를 줄 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iOS 아리운 대상 저장 OSS 파일 업로드/다운로드 실현이전 프로젝트에서 이미지 음성 등 자원 파일은 서버에 직접 데이터를 업로드하고 서버에 처리하고 저장했다.최근의 이 프로젝트는 서버가 직접 OSS를 열고 클라이언트가 아리운이 제공하는 업로드 다운로드 기능을 사용하여 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.