python3 利用urllib請求返回數據是經過壓縮的,在利用‘zlib’解壓時遇到"zlib.error: Error -3 while decompressing data: incorrect header check"的錯誤。
代碼如下:
postdata = urllib.parse.urlencode({ 'qstartdate':'2017-11-08', 'qenddate':'2017-11-13' }).encode('utf-8') header = { 'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0','Referer':' http://cnnvd.org.cn/web/vulnerability/queryLds.tag' } cnnvd_html = urllib.request.Request(url,headers=header,data=postdata) cnnvd_html = urllib.request.urlopen(cookie_html) cnnvd_html = zlib.decompress(cookie_html.read(),16+zlib.MAX_WBITS) print (cnnvd_html)
運行時出現錯誤:incorrect header check,頭部校驗錯誤。網上找了好一會,沒發現有解決問題的。再回頭認真讀了幾遍錯誤提示。。。原來頭部 header 加上編碼'Accept-Encoding': 'gzip, deflate'就可以了。也就是先要聲明需要解析對象進行了gzip的壓縮。
代碼如下:
postdata = urllib.parse.urlencode({ 'qstartdate':'2017-11-08', 'qenddate':'2017-11-13' }).encode('utf-8') header = { 'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0', 'Accept-Encoding': 'gzip, deflate', 'Referer':' http://cnnvd.org.cn/web/vulnerability/queryLds.tag' } cnnvd_html = urllib.request.Request(url,headers=header,data=postdata) cnnvd_html = urllib.request.urlopen(cookie_html) cnnvd_html = zlib.decompress(cookie_html.read(),16+zlib.MAX_WBITS) print (cnnvd_html)