के लिए फ्लास्क में फोर्स सामग्री को टाइप करें या टाइप करें। मैं पाइथन/फ्लास्क में एक सेवा पुनर्निर्माण कर रहा हूं और मौजूदा क्लाइंट प्रमाणीकृत तरीके से एक समस्या में भाग रहा हूं। मुझे संगतता कारणों के लिए मौजूदा ग्राहकों की योजना से मेल खाना पड़ेगा।ज्ञात सामग्री-प्रकार
मौजूदा क्लाइंट उपयोगकर्ता नाम, पासवर्ड और बेस 64 इसे एन्कोड करते हैं। समान ध्वनि के बावजूद यह HTTP मूल प्रमाणीकरण नहीं है। नीचे कुछ नमूना कोड है जो इस लॉगिन अनुरोध को बनाएगा।
credentials = {
'username': '[email protected]',
'password': 'password'
}
data = b64encode(urlencode(credentials))
request = urllib2.Request(loginURL)
request.add_data(data)
# request.add_header('Content-Type', 'application/gooblygop')
# 'application/x-www-form-urlencoded' seems to be a default Content-Type
login = urllib2.urlopen(request)
सर्वर साइड पर मैं पोस्ट डेटा लेने के लिए और base64 इसे फिर से उपयोगकर्ता नाम और पासवर्ड की जानकारी प्राप्त करने को डिकोड।
flask server:
@app.route('/login', methods=['POST'])
def login():
error = None
if request.method == 'POST':
# post data: cGFzc3dvcmQ9ZGVmYXVsdCZlbWFpbD10ZXN0JTQwZXhhbXBsZS5jb20=
data = b64decode(request.data)
# decoded data: password=default&email=test%40example.com
return('ok')
समस्या सामग्री प्रकार है। यदि मैं क्लाइंट (एप्लिकेशन/gooblygop) में अज्ञात सामग्री-प्रकार निर्दिष्ट करता हूं, तो फ्लास्क POST डेटा को request.data पर प्रकट करता है और मैं बेस 64 स्ट्रिंग को डीकोड कर सकता हूं। यदि मैं सामग्री-प्रकार को डिफॉल्ट (एप्लिकेशन/एक्स-www-form-urlencoded) के रूप में छोड़ देता हूं, तो कच्चा डेटा request.data के संपर्क में नहीं आता है और मुझे नहीं पता कि बेस 64 एन्कोडेड स्ट्रिंग को कैसे पुनर्प्राप्त करें और इसका उपयोग कैसे करें।
मौजूदा क्लाइंट सॉफ़्टवेयर एक्स-www-form-urlencoded के लिए बहुत अधिक डिफ़ॉल्ट है, लेकिन मैं हमेशा उस मामले पर भरोसा नहीं कर सकता।
अनिवार्य रूप से, मुझे उस एन्कोडेड स्ट्रिंग तक पहुंचने के लिए एक विश्वसनीय, सर्वर-साइड विधि की आवश्यकता है इससे कोई फर्क नहीं पड़ता कि क्लाइंट प्रोग्राम किस प्रकार सामग्री प्रकार बताता है।
अन्य नोट्स: मैं PHP पृष्ठभूमि से आने वाले पायथन के लिए बहुत नया हूं। तो मैं सुझावों के लिए बहुत खुला हूं। साथ ही, यह परियोजना मुख्य रूप से व्यक्तिगत उपयोग के लिए है।