NSURLResponse-상태 코드를 얻는 방법?


86

간단한 NSURLRequest가 있습니다.

[NSURLConnection sendAsynchronousRequest:myRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    // do stuff with response if status is 200
}];

요청이 정상인지 확인하는 상태 코드는 어떻게 얻습니까?


잘 모르겠지만 200 상태 코드를 확인할 필요는 없습니다. 서버가 다른 상태 코드를 보내면, completeHandler에서 오류 객체를 얻고 확인할 수 있습니다.
Matz

5
리디렉션 또는 찾을 수 없음과 같이 오류가 아닌 결과를 나타내는 다른 상태 코드가 있으며, 내 머릿속에서 생각할 수없는 다른 것 (인증 관련 등)도 있습니다
inorganik

답변:


212

NSHTTPURLResponse응답에서의 인스턴스를 캐스팅하고 해당 statusCode메서드를 사용합니다 .

[NSURLConnection sendAsynchronousRequest:myRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
    NSLog(@"response status code: %ld", (long)[httpResponse statusCode]);
    // do stuff
}];

1
이것이 실제로의 인스턴스가 될 것임을 확신 할 수 있습니까 ? 아니면 또는 NSHTTPURLResponse검사 할 가치가 있습니까? isKindOfClass:respondsToSelector:
Tim Arnold

@TimArnold 예, NSHTTPURLResponse의 인스턴스이므로 해당 클래스의 모든 속성과 메서드가 있습니다.
inorganik

14
는 AS 문서는 말 :Whenever you make an HTTP request, the NSURLResponse object you get back is actually an instance of the NSHTTPURLResponse class.
픽셀 코끼리

30

iOS 9가 설치된 Swift에서는 다음과 같이 할 수 있습니다.

if let url = NSURL(string: requestUrl) {
    let request = NSMutableURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 300)
    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: config)

    let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        if let httpResponse = response as? NSHTTPURLResponse {
            print("Status code: (\(httpResponse.statusCode))")

            // do stuff.
        }
    })

    task.resume()
}

목표 -c로 태그가 지정된 질문.
trojanfoe

5
목표 -c에 대해서도 동일한 방법과 순서가 될 것입니다.
Bjarte

11

스위프트 4

let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in

    if let httpResponse = response as? HTTPURLResponse {
        print("Status Code: \(httpResponse.statusCode)")
    }

})

task.resume()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.