NSURLResponse - 如何获取状态代码?

ino*_*nik 76 objective-c ios

我有一个简单的NSURLRequest:

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

如何获取状态代码以确保请求正常?

ino*_*nik 200

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
}];
Run Code Online (Sandbox Code Playgroud)

  • 正如[docs](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLResponse_Class/index.html#//apple_ref/occ/cl/NSURLResponse)所说:`每当你发出HTTP请求,你得到的NSURLResponse对象实际上是NSHTTPURLResponse类的一个实例. (12认同)

Bja*_*rte 27

在使用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()
}
Run Code Online (Sandbox Code Playgroud)

  • 这与objective-c的方法和顺序相同. (4认同)

Har*_*dim 12

斯威夫特 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()
Run Code Online (Sandbox Code Playgroud)