ASIHTTPREquest에서 받은 서버 응답 데이터 처리

1875 단어

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로 리디렉션됩니다.
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other

  • 리디렉션이 발생하면 응답 데이터의 값(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로 설정합니다.

    좋은 웹페이지 즐겨찾기