3. ASIHTTPREquest - 데이터 다운로드
서버 응답 데이터를 파일로 직접 다운로드
만약 당신이 요청한 자원이 매우 크다면, 데이터를 파일에 직접 다운로드해서 메모리를 절약할 수 있습니다.이 경우 ASIHTTPREquest는 한 번에 반환된 데이터를 모두 메모리에 유지하지 않습니다.
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];
우리가 데이터를 다운로드Destination Path에 다운로드할 때, 데이터는 우선 임시 파일에 존재합니다.이 때 파일의 경로 이름은temporaryFileDownloadPath에 저장됩니다. (드림비트: 이 값을 설정하지 않으면 자동으로 파일 이름이 생성됩니다. 아날로그에서 $TMPDIR에 파일이 생성됩니다.)request가 완료되면 다음 두 가지 중 하나가 발생합니다.
서버 응답 데이터가 비어 있으면 파일이 생성되지 않습니다.만약 당신의 반환 데이터가 비어 있을 수 있다면, 다운로드 파일이 존재하는지 확인한 다음에 파일을 조작해야 합니다.
수신된 서버 응답 데이터 처리
서버 응답 데이터를 처리하려면 (예를 들어 다운로드 중인 데이터 흐름을 흐름 분석기로 처리하고 싶다면) 프록시 함수request:didReceiveData:를 실행해야 합니다.만약 당신이 이렇게 한다면, ASIHTTPREquest는responseData를 메모리에 채우지 않을 것이며, 데이터를 파일에 쓰지 않을 것입니다. (downloadDestination Path) 두 가지 일 중 하나를 스스로 처리해야 합니다.
HTTP 상태 코드 가져오기
ASIHTTPREquest는 HTTP 상태 코드에 대해 어떠한 처리도 하지 않기 때문에 (리디렉션과 권한 부여 상태 코드를 제외하고는 아래에 설명할 것입니다) 상태 값을 검사하고 정확하게 처리해야 합니다.
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
int statusCode = [request responseStatusCode];
NSString *statusMessage = [request responseStatusMessage];
읽기 응답 헤더
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSString *poweredBy = [[request responseHeaders] objectForKey:@"X-Powered-By"];
NSString *contentType = [[request responseHeaders] objectForKey:@"Content-Type"];
텍스트 인코딩 작업
ASIHTTPREquest는 데이터로 되돌아오는 인코딩 정보(Content-Type 헤더 정보)를 읽으려고 시도합니다.인코딩 정보가 발견되면 인코딩 정보를 적절한 NSStringEncoding으로 설정합니다.인코딩 정보를 찾지 못하면 인코딩을 기본 인코딩(NSISOLATIN1StringEncoding)으로 설정합니다.
[request responseString]을 호출하면 ASIHTTPREquest는 responseEncoding으로 되돌아오는 데이터를 NSString으로 변환하려고 시도합니다.
리디렉션 처리
다음 HTTP 상태 코드 중 하나가 발생하면 ASIHTTPREquest가 자동으로 새 URL로 리디렉션됩니다.
리디렉션이 발생하면 응답 데이터의 값(responseHeaders,responseCookies,responseData,responseString 등)은 최종 주소의 상응하는 반환 데이터로 비칩니다.
URL이 순환 리디렉션될 때, 이 URL에 설정된 쿠키는 전체 영역에 저장되며, 적당한 때에 리디렉션 요청에 따라 서버에 전송됩니다.
Cookies set on any of the urls encountered during a redirection cycle will be stored in the global cookie store, and will be represented to the server on the redirected request when appropriate.
자동 리디렉션을 닫을 수 있습니다. shouldRedirect를 NO로 설정합니다.
기본적으로 자동 리디렉션에는 GET 요청이 사용됩니다(요청은 비어 있음).이러한 비헤이비어는 대부분의 브라우저 비헤이비어에 해당하지만 HTTP 스펙은 301 및 302 리디렉션에 대해 기존 방법을 사용해야 한다고 규정하고 있습니다.
301, 302 리디렉션에 대해 원래 방법(요청체 포함)을 사용하려면 요청을 시작하기 전에 shouldUseRFC2616RedirectBehaviour를 YES로 설정합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.