उदाहरण के लिए zlib.decompress(string, wbits, bufsize)
का उपयोग करते समय wbits
निर्दिष्ट करें उदाहरण के लिए "समस्या निवारण" का अंत देखें।
समस्या निवारण
आ कर्ल आदेश है कि एक अज्ञात "सामग्री-एन्कोडिंग" के साथ एक बाइट दूरी प्रतिक्रिया टिप्पणी डाउनलोड करता है (के साथ शुरू की सुविधा देता है: हम पहले से जानते हैं कि यह संकुचित बात किसी प्रकार का, deflate
शायद gzip
है mabye):
export URL="https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2016-18/segments/1461860106452.21/warc/CC-MAIN-20160428161506-00007-ip-10-239-7-51.ec2.internal.warc.gz"
curl -r 266472196-266527075 $URL | gzip -dc | tee hello.txt
निम्नलिखित प्रतिक्रिया हेडर के साथ
:
HTTP/1.1 206 Partial Content
x-amz-id-2: IzdPq3DAPfitkgdXhEwzBSwkxwJRx9ICtfxnnruPCLSMvueRA8j7a05hKr++Na6s
x-amz-request-id: 14B89CED698E0954
Date: Sat, 06 Aug 2016 01:26:03 GMT
Last-Modified: Sat, 07 May 2016 08:39:18 GMT
ETag: "144a93586a13abf27cb9b82b10a87787"
Accept-Ranges: bytes
Content-Range: bytes 266472196-266527075/711047506
Content-Type: application/octet-stream
Content-Length: 54880
Server: AmazonS3
तो बात करने के लिए
। curl -r 266472196-266472208 $URL | xxd
हेक्स उत्पादन:
0000000: 1f8b 0800 0000 0000 0000 ecbd eb
हम क्या हम हेक्स मान के साथ साथ काम कर रहे के कुछ मूल बातें देख सकते हैं
पहले 10 बाइट्स की हेक्स उत्पादन प्रदर्शित करने देता है।
मोटे तौर पर एक संशोधन समय (0000 0000
) के बिना अपनी शायद एक gzip (1f8b
) हवा निकालना का उपयोग कर (0800
) जिसका अर्थ है, या किसी भी अतिरिक्त निशानी नहीं लगाई (00
), एक FAT32 प्रणाली (00
) का उपयोग कर।
कृपया अनुभाग 2.3/2.3 देखें।1: https://tools.ietf.org/html/rfc1952#section-2.3.1
तो अजगर पर
:
>>> import requests
>>> url = 'https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2016-18/segments/1461860106452.21/warc/CC-MAIN-20160428161506-00006-ip-10-239-7-51.ec2.internal.warc.gz'
>>> response = requests.get(url, params={"range":"bytes=257173173-257248267"})
>>> unknown_compressed_data = response.content
नोटिस कुछ भी समान ?:
>>> unknown_compressed_data[:10]
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00'
और सिर्फ (documentation) के आधार पर यादृच्छिक पर कोशिश करते हैं विसंपीड़न करने पर:
>>> import zlib
"zlib.error: त्रुटि -2 जबकि प्रीपा अंगूठी डेटा को संपीड़ित: असंगत धारा राज्य ":
>>> zlib.decompress(unknown_compressed_data, -31)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zlib.error: Error -2 while preparing to decompress data: inconsistent stream state
" त्रुटि -3 डेटा decompressing जबकि: गलत हेडर की जांच ":
>>> zlib.decompress(unknown_compressed_data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zlib.error: Error -3 while decompressing data: incorrect header check
" zlib.error: त्रुटि -3 जबकि decompressing डेटा: अवैध दूरी बहुत दूर वापस ":
>>> zlib.decompress(unknown_compressed_data, 30)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zlib.error: Error -3 while decompressing data: invalid distance too far back
संभव रों olution:
>>> zlib.decompress(unknown_compressed_data, 31)
'WARC/1.0\r\nWARC-Type: response\r\nWARC-Date: 2016-04-28T20:14:16Z\r\nWARC-Record-ID: <urn:uu
हमें कोड दिखाएं! क्या आप सुनिश्चित हैं कि डेटा को अनुचित रूप से एन्कोड/डीकोड नहीं किया गया है (यानी इसे बाइनरी डेटा के रूप में माना जाना चाहिए)? – Cameron
यह हो सकता है कि आपका डेटा एकाधिक हिस्सों में विभाजित हो और आपको सही लंबाई प्राप्त करने के लिए शीर्षलेख को पार्स करने की आवश्यकता हो। Gzipped शीर्षलेख की लंबाई –
है यदि संपीड़ित डेटा को "\ r \ n" में मिला है, और आप इसे तोड़ते हैं और सभी संकुचित डेटा के बजाय इसका केवल एक हिस्सा डीकोड करते हैं? मैं सर्वर में "\ r \ n" को खोजने की कोशिश करता हूं इससे पहले कि आप इसे सत्यापित करने के लिए भेज दें। –