• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            支持gzip的爬蟲(chóng) gzip zlib deflate 相關(guān)介紹

            最近給Httpdownload 封裝了支持gzip傳輸

             

            HTTP的角度

            1 客戶端 http Request  Header上帶上 Accept-Encoding:gzip,deflate

            2服務(wù)器若是支持gzip壓縮則在http reponse eader

            部分返回Content-Encoding: gzip 或者Content-Type: application/x-gzip

            3body部分用gzip解壓縮 則得到網(wǎng)頁(yè)內(nèi)容.

            傳說(shuō)中iebug 在處理js css壓縮的時(shí)候有bug,我不理解 挺簡(jiǎn)單的怎么會(huì)有bug.

            gzip的角度

            gzip是一種數(shù)據(jù)格式 默認(rèn)且目前僅使用deflate算法壓縮data部分

            zlib也是一種數(shù)據(jù)格式,使用defalte算法壓縮數(shù)據(jù)部分.

            deflate是一種壓縮算法,huffman編碼的一種加強(qiáng)

             

            zlib是一個(gè)開(kāi)源庫(kù), 提供deflate壓縮和對(duì)應(yīng)的infalte解壓縮.

            不過(guò)zlib默認(rèn)的deflate infalte默認(rèn)是處理zlib格式數(shù)據(jù).必須使用

            deflateInit2(&strm, DEFAULT_COMPRESSION,Z_DEFLATED, DEFAULT_WINDOWSIZE,DEFAULT_MEMLEVEL, Z_DEFAULT_STRATEGY);

            初始化才是處理raw deflate data.(這一點(diǎn)在zlib manul沒(méi)有提,faq中提到,困擾了我好久,還是同事L幫我調(diào)試發(fā)現(xiàn))

            至于gzip格式解析 對(duì)著RFC寫就可以了.

            參見(jiàn)RFC 1950 關(guān)于zlib http://www.faqs.org/rfcs/rfc1950.html

                  RFC 1951 關(guān)于deflate http://www.faqs.org/rfcs/rfc1951.html

                  RFC 1952 關(guān)于gzip http://www.faqs.org/rfcs/rfc1952.html 


            nt  CGzip::Ungzip(const std::string & inStr , std::string &outStr){
                static int nFileCount=0;
                    nFileCount++;
                string strZipFileName="test";
            //    CConvert::StrToFile(inStr,strZipFileName+CConvert::toString<int>(nFileCount)+"H.gzip"clip_image001;
                if(inStr.length()<11){
                    return -1;   
                }
                //process gzip header
                unsigned int skipCt = 10;
                unsigned int skipZeroCt = 0;
                unsigned char ID1 = inStr[0];
                unsigned char ID2 = inStr[1];
                unsigned char XFL=inStr[8];
                bool bFEXTRA = false ;
                bool bFNAME = false ;
                bool bFCOMMENT = false ;
                bool bFHCRC = false ;
                unsigned int XLEN = 0;
               
                if( (ID1!=31) && (ID2!=139)){
                    return -1;  //
            gzip頭部
                    }
                unsigned char CM = inStr[2];
                if(CM!=clip_image002{
                    return -1; //
            現(xiàn)在都只處理 deflate壓縮的
                }
                unsigned char FLG = inStr[3];
                if( (FLG & GZIP_HEAD_FEXTRA) != 0){
                    bFEXTRA = true ;
                    skipCt += 2;
                    XLEN = inStr[10]+ inStr[11]*256 ;//
            按照小端字節(jié)序列處理
                    skipCt += XLEN;
                }
                if( (FLG & GZIP_HEAD_FNAME) != 0){
                    bFNAME = true;
                    skipZeroCt++;
                }
                if( (FLG & GZIP_HEAD_FCOMMENT) != 0){
                    bFCOMMENT = true;
                    skipZeroCt++;   
                }
               
                size_t passedZeroCt = 0;
               
                size_t iStep = skipCt ;
                for( size_t iStep =  skipCt ; iStep<inStr.length(); iStep++){
                        if(passedZeroCt>=skipZeroCt){
                            break;   
                        }
                        if(inStr[iStep]==''clip_image001{
                            passedZeroCt++;   
                        }
                   
                }
                skipCt = iStep ;
                if( (FLG & GZIP_HEAD_FHCRC) != 0){
                    bFHCRC = true;
                    skipCt+=2 ;
                }
                    string coreStr = inStr.substr(skipCt,inStr.length()-8-skipCt);
                       return CGzip::Inflate(coreStr,outStr);
               
               
               
            }

             

            int  CGzip:clip_image003ogzip(const std::string & inStr , std::string &outStr){
                char pAddHead[10];
                unsigned long crc = 0;
                // gzip header
                static const char deflate_magic[2] = {'37', '\213'};
                snprintf(pAddHead, 10,
                        "%c%c%c%c%c%c%c%c%c%c", deflate_magic[0],
                        deflate_magic[1], Z_DEFLATED, 0 /* flags */,
                        0, 0, 0, 0 /* 4 chars for mtime */,
                        0 /* xflags */, 0xff);
                string addHead(pAddHead,10);
                //gzip's raw deflate body
                if(CGzip:clip_image003eflate(inStr,outStr)<0){
                    return - 1;   
                }
                //gzip trailer
                crc = crc32(crc, (const Bytef*)inStr.data(), inStr.length());
                char  tailBuf[8];
                memcpy(tailBuf, &crc, 4);
                int isize=inStr.size();
                memcpy(tailBuf,&isize,4);
                string tailStr(tailBuf , 8 );
                outStr = addHead + outStr+tailStr;     //
                return outStr.length(); //

            posted on 2009-09-07 21:58 肥仔 閱讀(2726) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 庫(kù) & 代碼段HTTP & URL

            久久免费观看视频| 久久久一本精品99久久精品88| 日本欧美久久久久免费播放网 | 99久久久精品| 91久久婷婷国产综合精品青草| 99久久国产热无码精品免费久久久久| av无码久久久久久不卡网站| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 国产精品久久新婚兰兰| 国内精品久久久人妻中文字幕| 狠狠人妻久久久久久综合蜜桃| 国色天香久久久久久久小说| 一级做a爰片久久毛片人呢| 久久这里只精品99re66| 99久久亚洲综合精品成人| 久久久久久精品无码人妻| 久久93精品国产91久久综合| 久久婷婷五月综合色高清| 亚洲人成无码久久电影网站| 久久综合狠狠色综合伊人| 久久精品国产2020| 久久久久香蕉视频| 18岁日韩内射颜射午夜久久成人 | 精品一二三区久久aaa片| 久久久噜噜噜久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久中文字幕精品| 久久精品亚洲男人的天堂| 久久久精品免费国产四虎| 无码AV中文字幕久久专区| 精品久久久无码21p发布 | 精品午夜久久福利大片| 久久久国产乱子伦精品作者 | 国产AⅤ精品一区二区三区久久| 香蕉久久av一区二区三区| 综合久久国产九一剧情麻豆| 国色天香久久久久久久小说 | 久久国产精品成人影院| 97久久超碰国产精品2021| 一级做a爰片久久毛片16| 久久黄视频|