এনএসআরএল রিস্পনস - স্থিতি কোডটি কীভাবে পাবেন?


86

আমার একটি সাধারণ এনএসআরএল অনুরোধ রয়েছে:

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

অনুরোধটি ঠিক ছিল কিনা তা নিশ্চিত করার জন্য আমি স্থিতি কোডটি কীভাবে পাব?


আমি নিশ্চিত নই, তবে আপনার 200 স্ট্যাটাস-কোড পরীক্ষা করার দরকার নেই। যদি আপনার সার্ভারটি অন্য একটি স্থিতি-কোড প্রেরণ করে তবে আপনি সমাপ্তি হ্যান্ডলারটিতে একটি ত্রুটি-বস্তু পাবেন এবং চেক করতে পারেন।
ম্যাটজ

4
অন্যান্য স্থিতি কোড রয়েছে যা ফলাফলগুলি প্রতিনিধিত্ব করে যা ত্রুটিগুলি নয়, যেমন পুনর্নির্দেশগুলি বা পাওয়া যায় না, এবং সম্ভবত অন্যরা (লেখক সম্পর্কিত, ইত্যাদি) যা আমি আমার মাথার উপরের অংশের কথা ভাবতে পারি না
অজৌবিক

উত্তর:


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
}];

4
আমরা নিশ্চিত এই সত্যিই একটি দৃষ্টান্ত হতে যাচ্ছে হতে পারে NSHTTPURLResponse, বা এটির সাথে মূল্য চেক করা হয় isKindOfClass:বা respondsToSelector:?
টিম আর্নল্ড

@ টিমআরনল্ড হ্যাঁ, এটি এনএসএইচটিটিপিআরএল রিস্পনসের উদাহরণ, সুতরাং এতে that শ্রেণীর সমস্ত বৈশিষ্ট্য এবং পদ্ধতি রয়েছে।
অজৈবিক

14
যেমন দস্তাবেজগুলি বলেছেন:Whenever you make an HTTP request, the NSURLResponse object you get back is actually an instance of the NSHTTPURLResponse class.
পিক্সেল এলিফ্যান্ট

30

আইওএস 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()
}

উদ্দেশ্য-সি সহ প্রশ্নযুক্ত।
ট্রোজানফো

4
এটি উদ্দেশ্য-সি এর জন্য একই পদ্ধতি এবং ক্রম হবে।
বার্জারে

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.