मैं वर्तमान में एक पायथन एप्लिकेशन पर काम कर रहा हूं, जो फेसबुक एपीआई के साथ काम करता है। जैसा कि हम सभी जानते हैं, फेसबुक अपनी तकनीक से प्यार करता है और डेटा संपीड़न के लिए zstd के साथ काम कर रहा है।
समस्या: फेसबुक या तो सामान्य जेसन के साथ एक असम्पीडित प्रतिक्रिया लौटा रहा है या यदि प्रतिक्रिया लंबी है, तो यह एक zstd संपीड़ित जेसन के साथ प्रतिक्रिया दे रही है।
मेरा वर्तमान कोड कुछ ऐसा है:
import zstd
import json
def handle_response(response)
json = None
try:
json = json.loads(zstd.decompress(response.content))
except:
json = json.loads(response.text)
return json
मैं वर्तमान में सोच रहा हूं, अगर ऐसा करने का एक और साफ तरीका है और यहां तक कि zstd का पता लगाएं।
1 उत्तर
आप जो कर रहे हैं वह ठीक है।
मुझे लगता है, आप यह देखने के लिए जांच कर सकते हैं कि धारा चार बाइट्स 28 b5 2f fd
से शुरू होती है या नहीं। यदि ऐसा नहीं होता है, तो यह zstd स्ट्रीम नहीं है। अगर ऐसा होता है, तो यह एक zstd स्ट्रीम हो सकता है। बाद के मामले में, आप डिकंप्रेस करने का प्रयास करेंगे और यदि यह विफल हो जाता है, तो आप केवल इनपुट की प्रतिलिपि बनाने के लिए वापस आ जाएंगे।
यह बिल्कुल वैसा ही है जैसा आप पहले से कर रहे हैं, क्योंकि zstd.decompress
सबसे पहला काम उस हस्ताक्षर की तलाश करना है।
request.content.startswith(b"\x28\xb5\x2f\xfd")
धन्यवाद! :)
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
except
को प्रतिस्थापित करते हैं तो आपके पास "क्लीनर" होगा।zstd
मैजिक नंबर। पायथन में जादुई संख्या जांचने के तरीके हैं।