NSURLResponse - स्टेटस कोड कैसे प्राप्त करें?


85

मेरे पास एक सरल NSRLRequest है:

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

अनुरोध ठीक था यह सुनिश्चित करने के लिए मुझे स्थिति कोड कैसे मिलेगा?


मुझे यकीन नहीं है, लेकिन आपको 200 स्थिति-कोड की जांच करने की आवश्यकता नहीं है। यदि आपका सर्वर एक अन्य स्थिति-कोड भेजता है, तो आपको पूर्णहैंडलर में एक त्रुटि-ऑब्जेक्ट मिलेगा और जांच कर सकते हैं।
मटज़

5
वहाँ अन्य स्थिति कोड है कि परिणाम है कि त्रुटियाँ नहीं, रीडायरेक्ट या founds नहीं है, और शायद दूसरों (संबंधित प्राधिकार, आदि) है कि मैं अपने सिर के ऊपर से नहीं सोच सकते हैं की तरह का प्रतिनिधित्व कर रहे हैं
inorganik

जवाबों:


211

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:?
टिम अर्नोल्ड

@TimArnold हाँ, यह NSHTTPURLResponse का एक उदाहरण है, इसलिए इसमें उस वर्ग के सभी गुण और विधियाँ हैं।
अकार्बनिक

14
जैसा कि डॉक्स कहते हैं:Whenever you make an HTTP request, the NSURLResponse object you get back is actually an instance of the NSHTTPURLResponse class.
Pixel Elephant

30

IOS 9 के साथ स्विफ्ट में आप इसे इस तरह से कर सकते हैं:

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()
}

उद्देश्य-सी के साथ टैग किया गया प्रश्न।
ट्रोजनफॉई

5
यह वस्तुनिष्ठ-ग के समान तरीके और क्रम होंगे।
बंजारे

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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.