एक अनुरोध के लिए HTTP शीर्ष लेख सेट करें


159

मेरे ऐप में मेरा एक विशेष अनुरोध है जिसे मूल प्रमाणीकरण की आवश्यकता है, इसलिए मुझे उस अनुरोध के लिए प्राधिकरण शीर्षलेख सेट करना होगा। मैं HTTP अनुरोध हेडर सेट करने के बारे में पढ़ता हूं , लेकिन मैं जो बता सकता हूं, वह उस विधि के सभी अनुरोधों के लिए उस हेडर को सेट करेगा। मेरे पास अपने कोड में ऐसा कुछ है:

$http.defaults.headers.post.Authorization = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";

लेकिन मैं नहीं चाहता कि मेरी हर पोस्ट इस हेडर को भेजे। क्या मुझे अनुरोध के लिए हेडर भेजने का कोई तरीका है? या क्या मुझे मेरे अनुरोध के बाद इसे हटाना होगा?


जवाबों:


320

$httpप्रति कॉल हेडर के लिए आपके द्वारा पास की जाने वाली कॉन्फ़िग ऑब्जेक्ट में एक हेडर पैरामीटर है :

$http({method: 'GET', url: 'www.google.com/someapi', headers: {
    'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
});

या शॉर्टकट विधि के साथ:

$http.get('www.google.com/someapi', {
    headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
});

वैध मापदंडों की सूची $ http सेवा प्रलेखन में उपलब्ध है ।


1
मुझे लगता है कि मुझे डॉक्टर को थोड़ा करीब से देखना चाहिए था ... मैं सिर्फ शॉर्टकट तरीकों का उपयोग करने की कोशिश कर रहा था। यह बहुत अच्छा काम करता है। धन्यवाद।
dnc253

17
@ dnc253 यह शॉर्टकट तरीकों से भी काम करता है। कोड होगा$http.get('www.google.com/someapi', {headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}});
Yunchi

1
क्या आपके लिए इस हेडर को स्वचालित रूप से जोड़ने के लिए $ http ("इंजेक्टेबिलिटी" बनाए रखने और इसे डिफ़ॉल्ट हेडर कलेक्शन पर लागू नहीं करने) का विस्तार करने का एक तरीका है? हमेशा आपके द्वारा की जाने वाली हर सुरक्षित कॉल के लिए हेडर को निरर्थक जोड़ना पड़ता है।
nokturnal

31
मेरे लिए काम नहीं करता है। इस तरह से मैं जो भी हेडर जोड़ता हूं, उनमें से कोई भी वास्तविक अनुरोध में नहीं जोड़ा जाता है।
एमसीवी नोव

4
जब भी मैं हेडर सेट करने की कोशिश करता हूं, तो मेरा अनुरोध अनुरोध के रूप में निकल जाता है OPTION, फलस्वरूप मेरा समापन बिंदु वापस आ जाता है 404 NOT FOUNDजो समझ में आता है: यह केवल एक GET /someResourceनहीं जानताOPTIONS /someResource
Matheus Felipe

19

यह कोशिश करो, शायद यह काम करता है;)

.factory('authInterceptor', function($location, $q, $window) {


return {
    request: function(config) {
      config.headers = config.headers || {};

      config.headers.Authorization = 'xxxx-xxxx';

      return config;
    }
  };
})

.config(function($httpProvider) {
  $httpProvider.interceptors.push('authInterceptor');
})

और सुनिश्चित करें कि आपका बैक एंड भी काम करता है, यह कोशिश करें। मैं RESTful CodeIgniter का उपयोग कर रहा हूं।

class App extends REST_Controller {
    var $authorization = null;

    public function __construct()
    {
        parent::__construct();
        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
        if ( "OPTIONS" === $_SERVER['REQUEST_METHOD'] ) {
            die();
        }

        if(!$this->input->get_request_header('Authorization')){
            $this->response(null, 400);    
        }

        $this->authorization = $this->input->get_request_header('Authorization');
    }

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