2015-01-15 16 views
6

मैंअजगर-अनुरोध - उपयोगकर्ता-एजेंट ओवरराइड की जा रही है

logindata = { 
     'username': 'me', 
     'password': 'blbla' 
    } 
    payload = {'from':'me', 'lang':'en', 'url':csv_url} 
    headers = { 
     'User-Agent': 'Mozilla/5.0' 
    } 
    api_url = 'http://dev.mypage.com/admin/app/import/' 

    with requests.Session() as s: 
     s.post(api_url, data=json.dumps(logindata), headers=headers) 

     print s.headers 

     # An authorised request. 
     r = s.get(api_url, params=payload, headers=headers) 

मैं खारिज कर रहा है, लेकिन यह 403 निषिद्ध की वजह से है। और मैं मुद्रित हेडर, मैं:

..'User-Agent': 'python-requests/2.2.1 CPython/2.7.5 Windows/7'.. 

मेरी 'User-Agent': 'Mozilla/5.0' क्यों ओवरराइड हो रही है? मुझे यहां क्या समझ नहीं आ रहा है?

उत्तर

7

headersसत्र सत्र के अंदर नहीं रखा जाता है।

आप की जरूरत है या तो स्पष्ट रूप से उन्हें हर बार जब आप अनुरोध कर गुजरती हैं, या एक बार s.headers सेट:

with requests.Session() as s: 
    s.headers = {'User-Agent': 'Mozilla/5.0'} 

आप देख सकते हैं कि सही हेडर response.request.headers निरीक्षण के माध्यम से भेजा गया:

with requests.Session() as s: 
    s.headers = {'User-Agent': 'Mozilla/5.0'} 

    r = s.post(api_url, data=json.dumps(logindata)) 
    print(r.request.headers) 

यह भी देखें कि Session class लागू किया गया है - हर बार जब आप अनुरोध करते हैं it merges the request.headers with headers आपने सत्र ऑब्जेक्ट पर सेट किया है:

headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict), 
+0

ओह ठीक है, didnot जानते हैं कि – doniyor

+0

हां, तो मैंने किया था '' s.post() यूआरएल, डेटा = json.dumps (logindata, हेडर = { 'उपयोगकर्ता-एजेंट': 'Mozilla/5.0'}) ' 'लेकिन अगर मैं – doniyor

+0

प्रिंट करता हूं तो भी आप अलग-अलग शीर्षलेख प्राप्त कर रहे हैं, आप हमेशा अच्छी खबर के साथ आते हैं :) धन्यवाद – doniyor

2

आप सत्र सभी अनुरोधों आप, सत्र पर उन हेडर स्थापित करने के लिए स्पष्ट रूप से जरूरत के लिए विशिष्ट हेडर का उपयोग करना चाहते हैं:

with requests.Session() as s: 
    s.headers.update(headers) 
    s.post(api_url, data=json.dumps(logindata)) 

    # An authorised request. 
    r = s.get(api_url, params=payload) 

s.headers.update(headers) लाइन सत्र हेडर के लिए अपने शब्दकोश कहते हैं।

सत्र अन्य अनुरोधों के पुन: उपयोग के लिए अनुरोध से जानकारी कॉपी नहीं करते हैं। प्रतिक्रियाओं से केवल जानकारी (विशेष रूप से, कुकीज़) पुन: उपयोग के लिए कब्जा कर लिया जाता है।

अधिक जानकारी के लिए requestsSession Objects documentation देखें:

सत्र भी अनुरोध तरीकों को डिफ़ॉल्ट डेटा प्रदान करने के लिए इस्तेमाल किया जा सकता। यह सत्र ऑब्जेक्ट पर गुणों को डेटा प्रदान करके किया जाता है।

संबंधित मुद्दे