5

मुझे सरल प्रमाणीकरण और एपीआई स्क्रिप्ट अपलोड करने में समस्या है।पायथन के अनुरोध सही ढंग से कुकीज़ को संभाल नहीं करते हैं?

अधिकृत होने पर, क्लाइंट PHPSESSID कुकी (ब्राउज़र में) सहित कई कुकीज़ प्राप्त करता है।

मैं प्राधिकरण के लिए प्रपत्र डेटा के साथ requests.post विधि का उपयोग करें:

r = requests.post(url, headers = self.headers, data = formData) 
self.cookies = requests.utils.dict_from_cookieja(r.cookies) 

हेडर कस्टम User-Agent के लिए ही किया जाता है।

प्रमाणीकरण 100% ठीक है (पृष्ठ पर एक लॉगआउट लिंक है)। बाद में, मैं अधिकृत सत्र कुकीज़ का उपयोग कर डेटा अपलोड करने की कोशिश:

r = requests.post(url, files = files, data = formData, headers = self.headers, cookies = self.cookies) 

लेकिन साइट अनुरोध को खारिज कर दिया। यदि हम स्क्रिप्ट और Google क्रोम (Wireshark का उपयोग करके) के अनुरोधों की तुलना करते हैं, तो अनुरोध निकाय में कोई अंतर नहीं है।

केवल अंतर यह है कि कुकीज़, अनुरोध वर्ग द्वारा भेजे गए गूगल क्रोम भेजता है, जबकि है।

अद्यतन: डबल चेक किया गया, पहला अनुरोध 7 कुकीज़ प्राप्त करता है। पोस्ट विधि केवल आधा अनदेखा करें ...

+1

मुझे 'अनुरोध' के साथ किसी भी कुकी समस्या से अवगत नहीं है, नहीं। क्रोम गुप्त टैब का उपयोग करके, साइट * के पहले अनुरोध पर कितनी कुकीज़ सेट की गई हैं *? साइट उपयोगकर्ता एजेंट या अन्य अनुरोध शीर्षकों के आधार पर व्यवहार को बहुत अच्छी तरह से बदल सकती है। अगला, क्या आप वाकई लॉगिन फॉर्म के साथ एम्बेडेड सीएसआरएफ टोकन का उपयोग नहीं करते हैं? –

+0

अगला, कुकीज़ पर समाप्ति तिथि क्या है? क्या उन कुकीज़ पर विशिष्ट झंडे सेट हैं? जब आप कुकीज़ का प्रबंधन करने के लिए 'request.Session()' ऑब्जेक्ट का उपयोग करते हैं तो क्या होता है? –

+0

@ मार्टिजन पाइटर मेरे बुरे, मैंने गलतियों को हल किया है। मुझे 'सत्र' कक्षा का उपयोग करने, भविष्य के लिए अच्छी सलाह के साथ कोई समय नहीं है! – Croll

उत्तर

2

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

प्रत्येक अधिकृत अनुरोध के बाद मैं अद्यतन() का उपयोग नहीं करता, असाइन नहीं कर रहा हूं।

self.cookies.update(requests.utils.dict_from_cookiejar(r.cookies)) 

मेरी समस्या हल करता है, अपलोड ठीक काम करता है!

+1

आपको बस एक सत्र का उपयोग करना चाहिए ताकि आपको स्वयं को संभालना न पड़े –

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