2011-05-28 19 views
81

मेरे पास एक एपीआई कॉल है जिसके लिए मुझे कुछ चेक चलाने और संभावित रूप से विभिन्न स्टेटस कोड वापस करने में सक्षम होना चाहिए। मुझे कस्टम विचारों या कुछ भी की आवश्यकता नहीं है, मुझे बस उचित कोड वापस करने की आवश्यकता है। यदि उपयोगकर्ता ने उचित प्रमाण-पत्र पास नहीं किए हैं, तो मुझे 401 स्थिति वापस करने की आवश्यकता है। अगर उन्होंने एक समर्थित अनुरोध प्रारूप नहीं भेजा है, तो मुझे 400 स्थिति वापस करने की आवश्यकता है।सेट प्रतिक्रिया स्थिति कोड

क्योंकि यह एक एपीआई है, मैं वास्तव में प्रतिक्रिया करना चाहता हूं और अनुरोध विफल रहा है (शायद exit का उपयोग कर) के बारे में एक सरल, बेवकूफ संदेश के साथ बाहर निकलना है। काम पूरा करने के लिए बस पर्याप्त है, लेकिन मैं इसे सही काम करने में सक्षम नहीं हूं। मैंने PHP के header() और केक के $this->header() (यह सब नियंत्रक में है) का उपयोग करने का प्रयास किया है, लेकिन हालांकि मुझे बाहर निकलने का संदेश मिलता है, हेडर 200 OK स्थिति दिखाता है।

नीचे दिए गए कोड का उपयोग करके, मुझे संदेश मिलता है, लेकिन हेडर सेट नहीं है। मैं क्या खो रहा हूँ?

if(!$this->auth_api()) { 
    header('401 Not Authorized'); 
    exit('Not authorized'); 
    } 

उत्तर

115

पीएचपी < = 5,3

header() समारोह स्थिति कोड के लिए एक पैरामीटर है। यदि आप इसे निर्दिष्ट करते हैं, तो सर्वर वहां से इसका ख्याल रखेगा।

header('HTTP/1.1 401 Unauthorized', true, 401); 

पीएचपी> = 5.4

देखें Gajus 'जवाब: https://stackoverflow.com/a/14223222/362536

+1

दिलचस्प। मैंने इसे कभी भी उपयोग में नहीं देखा है, लेकिन मैनुअल निश्चित रूप से आपसे सहमत है। यह मेरे लिए एक बेहतर तरीका की तरह लगता है। –

+0

एक दंडनीय सिर थप्पड़ के योग्य। मैं इसे पूरी तरह से शुरू करने के लिए अपने जल्दबाजी में स्पष्ट रूप से चूक गया। मुझे सीधे सेट करने के लिए धन्यवाद, दोस्तों। –

+0

मैंने पाया कि आपको यह स्थिति प्राप्त करने के लिए स्थिति पैरामीटर को पहले पैरामीटर में रखना होगा ... –

10

मैं तुम्हें header सही ढंग से स्थापित कर रहे हैं नहीं लगता है, इस प्रयास करें:

header('HTTP/1.0 401 Unauthorized'); 
4

मैं CakePHP 2.0.1 के साथ एक ही मुद्दा था

मैं

header('HTTP/1.1 400 BAD REQUEST'); 

उपयोग करने की कोशिश और

$this->header('HTTP/1.1 400 BAD REQUEST'); 

हालांकि, इनमें से कोई भी मेरे मुद्दे को हल नहीं करता है।

मैं अंत में यह

$this->header('HTTP/1.1 400: BAD REQUEST'); 

उसके बाद, कोई त्रुटि का उपयोग कर या php/CakePHP से चेतावनी द्वारा हल किया।

* संपादित करें: अंतिम $this->header फ़ंक्शन कॉल में, मैंने 400 और त्रुटि के विवरण टेक्स्ट के बीच एक कोलन (:) लगाया।

10

क्यों Cakes Response Class? का उपयोग नहीं कर आप आसानी से इस से प्रतिक्रिया की स्थिति कोड सेट कर सकते हैं:

$this->response->statusCode(200); 

तो बस त्रुटि संदेश है, जो JSON के साथ सबसे अच्छा सूट के साथ एक फ़ाइल प्रस्तुत करना।

+0

जैसे कुछ कर सकते थे, अभी तक कोई 2.x नहीं था – mark

+0

आह, क्षमा करें। उस पर ध्यान नहीं दिया। मेरी गलती। – nahri

+0

त्रुटियों को तब तक प्राप्त कर रहा था जब तक कि मैंने उस पंक्ति से पहले इसे जोड़ा नहीं '$ this-> autoRender = false;' –

96

PHP 5.4 के बाद से आप http_response_code का उपयोग कर सकते हैं।

http_response_code(404); 

यह उचित HTTP शीर्षलेख स्थापित करने का ख्याल रखेगा।

  1. अपग्रेड:

    आप PHP < 5.4 चला रहे हैं तो आपके पास दो विकल्प हैं।

  2. PHP में लागू this http_response_code function का उपयोग करें।
+1

+ इस प्रश्न के रूप में एक अद्यतन उत्तर प्रदान करने के लिए शीर्ष परिणाम में से एक है। –

2

जैसा कि पहले लिखा गया था, लेकिन मेरे जैसे शुरुआती के लिए वापसी शामिल करना न भूलें।

$this->response->statusCode(200); 
return $this->response; 
संबंधित मुद्दे