|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Array Of Byte разпаковка GZip
Всем привет. Опишу суть проблемы.
Имеется клиент. Подключаюсь через него к проксисерверу. Запрашиваю страничку. Получаю от него конфигурационный пакет в котором говорится что HTTP/1.1 200 OK ............................... Content-Encoding: gzip .............................. Content-Length: 3697 ............ keep alive(будь на связи) Дык вот. После этого мне приходит фрагментами пакетики с контентом, в данном случае это код html странички. Собираю эти все пакетики до объёма 3697, Объединяю их в один пакет, тобишь пересобираю. Но вот с распаковкой сладить не могу. Читал про ZLib, пытался ей, по не выходит. Прошу подсказать, объяснить, разъяснить чем да как лучше распаковать. |
#2
|
||||
|
||||
Несмотря на то что желающих помочь было "НУ ОЧЕЕЕНЬ МНОООГО", эту задачку я всё же решил.
Не стоило бы конечно о решении рассказывать, но я же не чмо. Ну да ладно. Вот моя функция. Код:
function ThreadProc.DecompressHexHttp(Var Data: ArrayByte; Var DataSize: Integer): Boolean; Var StreamIn, StreamOut : TMemoryStream; StringList : TStringList; begin Result := False; StreamIn := TMemoryStream.Create; try StreamOut := TMemoryStream.Create; Try StreamIn.Write(DataOfReceive,DataOfSize); StreamIn.Position := 10; ZLibEX.ZDecompressStream2(StreamIn,StreamOut,-15); StreamOut.Position := 1; StreamOut.Read(Data,StreamOut.Size); DataSize := StreamOut.Size; Result := True; Finally StreamOut.Destroy; End; finally StreamIn.Destroy; end; end; Параметр Data - это буфер TCPClient'а, в нём находится пакет ответа сервера Такого вида: Код:
HTTP/1.1 200 OK Date: Mon, 14 Jan 2013 08:41:51 GMT Server: Apache X-Powered-By: PHP/5.3.10-1ubuntu3.4 Cache-Control: no-cache, pre-check=0, post-check=0 Expires: 0 Pragma: no-cache Set-Cookie: testec=1 Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 3707 Content-Type: text/html; charset=utf-8 ‹ µЫrЫЖхЩ™с?lаtDҐ@Rґ%Q$Sл’X*c+–l§№Њf ,Й• ,Њ]?’=~Hы#}нL?*нд©щзъ%=gwqЈ(EN\z,‹із~]pрсЮУЭг?о“™Љ#rш|зсБ.q\Я№ѕлы{З{длGЗ_>&ЇMЋ3љH®ёHhдыыOњ»Bњ™RiЯчзу№7_чD6хЏџщ?ЇѓмҐ«j»ЅP…ОиоGMх"Ћ9\‚§іµµe¶;ФЏh2:!sHyҐ‘0Ћ4/ЕUДМ5|цy‰й”%dМ8a;LжБЊeЮCXї<?™ў$Ў1:S!¦sЃWжћіЊOx@‘m‡"Q,QCзQ˜пмх’*хW§ЇЗbжџ_<УЮџѕъ¦эьБЛD<X?їе_рґзяW‘*б‹УЇ6О7ћ<Яе§bяСQzzzщlzИvоП§'(•ЭПЋвЅЭЧнЁG—ЅКщщРщЪ}юРЭq иЗ«б?Шn:~©Є«[w ¤{|™Цч)vЎ|4Й6 f4“L s5q7K&nDv¤.Aоe()+9>v]2?xrF2 ‰»дЊ1е{л[f›?¤Љъl\XШb#®k1VИЋ=}vјыь˜м>}RоџРsyр§*Бc:eѕ^(ш’AЖSEdАћ„мВKgйg?|8Й“ m(OeѓЛSzNН>g4рНХ2tZ‚УW9Л.н—›s·гmzьSY,uјћЧхbћxЂМ+ЕS{нб5`oяfЬJ?pЅm››мzЌV От”eЉ'bс©дR‰ШxВ/Z0иr>ЯЛ0‹t*—КjeCюгЛ“?^Љ\]ГиўZjт-џђH1r°O6ѕї=Д=Дѓэ>щХДѕeIИ'Я—Сd©м[єЧжМГ\ќРучўЩ$№В·ИИѓDЯ˜p93¤cr ›ѓЊ±¤оц~ ¶ћ ИЦ:m-3о-±T|эF2Л&ЋЫ?„о Ьќ;„ш>б ФdqЙHеSћHуиф+tлV‘ХZ«opЅz°’Gћњё1Kт•UЇd§хFЈF@?Ђ—<Tі>:H§»F4=Xеq“9>"bB`—Ж"ЃВb’CІBB/*$лн Ѕx$*ЂЊh:єDЅjQ¶%2П7c’„"YЃґ&*’соUћ%*o‘кb sF” 2вУ™"™ИБm“)Яќ°Њ%мҐIH&PмЬ ЌytI¬"ЯZµЎ'ФФ2?Сѕ)¤dі*Eѕц?„Й*v…f+,ђXд’Aњ—H)(]w?шЌя©HiАХeEОД|eнSЖђ{яvMcћРђ№*Oддѓ›PМ“ W‰]¦Њ…Л+*ХКЌ,#hІB¤”и|џжJ<М21—ЂuB#ЙnТZЃK э Ѓ^Џe'xEа,Щ™›§5фa&ТЈ 5~Ќюt\*ЗЌDљќ…БЋЫЕeћ) г\)рЈUП\ґ`№ЈH>Uёу^9 НШ9dўPдА[сам·$М©З(е> }.AV4xЕ7±ЅЪ!џу3l¶nџNm·џвNЇjЬBf—ђшўz~µЃQЩ%yЈЇОiFТі*ЩуgЏЙђЬ@ХЩ®vаSv‚3pТЎО›2e—ZЖЯЗ*‚.РY#ќUѓ¤ЋАSш}*дОж*e,Aµ?†т¦W }`o!1Am–edХ Ґ]в]ЉЉ«˜¶аЎ…/L󶩹A"Љ«t4асфv&АЦ–‡8¤;`5tђЎ3YИІ>4‚ЮлиА¬~IЈjбч!qЧ(#»"dUWоЫСm0бҐ^іn6щ9ббР±CВ<Ј)L•0(¦*М?j,VОЁжЏе®˜тД:ГgѓYgф%WУ?3`©™3*ЯAкҐF|ЭуKlъи-іK©`Фнt7/аїOУ)з*/M¦Ћ©CћBзЎSЁЅ1К№ы‘ХЪ$TхIД&j›ЦЭ±Ђ¤ч;нvzQ,ц»чбFПeАЧDd±–¬МјГ.FН,ҐBЄR#—2Q'4кєfK;S7ј0»„BSё(BхhQc*№gN5ЮEtМ"(iЩРЃ:“бL[=ЭЃ2¬^›Uпл Х~ћ¤y=„-d‰КЙХЅдЇбѕ>wNЈњiЕVщЩ2Є%ЁzVdxoiРёХ“Ccju) Ї0’h4V sm%и~ АЊБ™УМЙu94¦ђB Є¤y\®-—§*c=–8•з-`є"}FC.јнВЧv‚ѓ5чѓЫ\иIЅОѕE2ЪБ ъJ&%ёsБр`њщ·зҐ{/ќ^ЇЅњxЧu{дHA7З~%бх›·Ы›ЧP^wF:PтRЂv®§йхFкЅЁчЪлЭkЁчњС9СФ›‚I»рћК;—;jе/їиО¦="W\aiбђ6k*‘цI—ЕЫДжФіn9чaёA—I\ІДУG‡Јoт)Њ*жx–ђтбgџЋксSWзЊ‡!‰ЁO(l2*Фio¬&С8цЄcЂ‰$жЄ,›0цёs3ЃtzИ}іђuLы"‹/Ћe0ѓО8‡OБ°Ґ•%*ёх›О2ђ)Њ6–‰”†8њёX†ъд>ІќmЄзЌж?m#0H(R}”э_]&m›±ё(БJ~j:СЧЛBјо=5їCш‘aУЉ‚Ґn©иЪЎs ¶5йЛЭУ6њ3иAґ)A9СO?‚9#E~ъК:СБуишшрИ}…|?‡¶C?ѓNжѓ5Шћ$д?C;ПґюOµ¬„ћ)ЋѕЏf=†о x]Iыf№бУPЄ}¬АжЁBЯ߲붇oЃgњ-6Ь<BЙЃщЎуGАrT6»˜о~фI+AгЇZх2hЁ¦vbєЪ<Е А'РУ.X˜Њіф%Qљ<ўШю~ТZ№we}Ґj8щ„ґм“—*•ѕ5ъКj*e…П'-з^ХЙ¬zT©¬е˜^єgЫ*|зwҐ_щоЪ†ҐвГ0єкЃ7¶0>› VУ-З@@ЦИВ.Rћ17МtVn).ЯЗЕчлѓJuЙд/Љ…0ЧЛe„y»]5•х ЩЄјЕоІ 61а‘ПL”гL*WЂ`х}]2љm#F@Uэ:¬ња,ЂUji—oжеrCxжcвшmюBЙЁѓњаы"[jЇ˜љГЯhЏеJвD@Kl‹xX•ly‚ж=gЕ3з&ьЃ?ЃА~і‡ј‘@–я:YшЯэнзїюьГП?јыч»ѕыWќЊU]Ўщ†СЭNРs›Эќю,оТ+нWвё…Щ4'NРгuѕ+(\ЃА¬Јn„cFZ=q•пшњж@W*Лd6B9ЌоюFЇб67ґDЦ@дxЮ2Oњ…’Ъ'mOЧSЛё9gЛАxhВІФ›ЄЫ*ЭЛШЌЇ]ќъdkk›Ф;…Тч!Ч38УS}Фиjщъ$ПўЦтбuЅ{±Ю5Ј+ќЄљ$°/ААQ ЎZC—±”aSнЂЅn<®¤Г~|ДћђNzA¤?xHоAРШS© ?{ЊЃ*jкЪФкjt$== яThN¦lФЃН|:^»Э&яэЛ?И36qџС(єДCDР\¦˜ъ˜Ш^КBј6ўpЮЧМ# ›Л?)~-~Ыeyjњё™Fм–?ќС—l–‘<IfРtФгUgН*шў'ЎзNБ‘>d‘g<ХЇFhМPУ Б§жФўBPZм¶ПК†¶Z•\Ьiфи3H\Є ZO°wI_iЖ±fhjЊц pО_‹<– µЉsD–G—ўcYІЎMсQiИЃєkЊ8јPlЮ "в…$&©b»©2‘L—ќЩ'ЕО~™в™[VЋ/aц–g4џ4ЙЌ=EЄЕzіџЁ9ФЩИ˜юЪЌW\М=a9џћ1®®Ј‰*hЋ%зsьѕfЖЈ і‚<Вл®®][џ¤К#*—YЇ.ZМ®КX~ХоЄшYф ђ*cZ+[3ЩчJµЗ? И3°ѕI.ТҐМ Tюогб— ‰еaOщ`A#We«№|у¦юUU‘Ж\SЖDeЋWлюNєнvЧн¶;лd|‰Ѓk…ћПАnОВHlІb]e%,‚ъ E№µnдJЏ1ЎCk©{˜ZmХoa1Q$жОиџ[ё…оЖ2C§c«д‡_м,бq ]ЄМcxPЬЧёЇКq©ЖЪU!ЫЬD%Мpz§q¦e„5л¦ќгS(C@«YWщѕъ{ЭЌЭЅќыоГэ{n§LЬ*;›nЇЧ»э~т{Ы±;EИЖTІRwШ"D‚†^LѓLиПZ…i>цЎoОжфњщд3Tgѕњлo–обX‹§·kнµОЦZA9ЫЃтНІЭt…МK*Ћ˜G¶…ЩЁџBoй}ДЁЃRљСШ¦ьXАњ[ОлЧхД“ЊЕЎХ¦?Ц„C˜эLO Зt:ґЫ§BxУИџџћ=w–РOuPRЅ·їѓя–ЃѕК)d›ЛЉAhEз3і †З¬Е<Eс ч±xМB„v&‡Ћ(Іїєт/ЬТ(®¶ѓcAнсTЏЮ5EСPЊ™¶heНВжvЁ¦ьіГОЙa&В“ЦўGрзu"Fљe¦Е§7Щ–4Юг|HZфЦj•№мє5‘µЌ]јbЏ†!jОцH„¶Hyп7~гЖ©ЌзъRцж6ѕѓ?QhЂЖBНљ‰щI юЁLCљг+•1МЉ_ђаODFъз?oЉкЦnяnЫкЬЮЅ˜ч¤еЛкјаtkЯc ф/давBAHt`) С этого пакета я присвоил все нужные параметры куда надо и обрезание всего того что обработано, массив Data принял такой вид. Код:
‹ µЫrЫЖхЩ™с?lаtDҐ@Rґ%Q$Sл’X*c+–l§№Њf ,Й• ,Њ]?’=~Hы#}нL?*нд©щзъ%=gwqЈ(EN\z,‹із~]pрсЮУЭг?о“™Љ#rш|зсБ.q\Я№ѕлы{З{длGЗ_>&ЇMЋ3љH®ёHhдыыOњ»Bњ™RiЯчзу№7_чD6хЏџщ?ЇѓмҐ«j»ЅP…ОиоGMх"Ћ9\‚§іµµe¶;ФЏh2:!sHyҐ‘0Ћ4/ЕUДМ5|цy‰й”%dМ8a;LжБЊeЮCXї<?™ў$Ў1:S!¦sЃWжћіЊOx@‘m‡"Q,QCзQ˜пмх’*хW§ЇЗbжџ_<УЮџѕъ¦эьБЛD<X?їе_рґзяW‘*б‹УЇ6О7ћ<Яе§bяСQzzzщlzИvоП§'(•ЭПЋвЅЭЧнЁG—ЅКщщРщЪ}юРЭq иЗ«б?Шn:~©Є«[w ¤{|™Цч)vЎ|4Й6 f4“L s5q7K&nDv¤.Aоe()+9>v]2?xrF2 ‰»дЊ1е{л[f›?¤Љъl\XШb#®k1VИЋ=}vјыь˜м>}RоџРsyр§*Бc:eѕ^(ш’AЖSEdАћ„мВKgйg?|8Й“ m(OeѓЛSzNН>g4рНХ2tZ‚УW9Л.н—›s·гmzьSY,uјћЧхbћxЂМ+ЕS{нб5`oяfЬJ?pЅm››мzЌV От”eЉ'bс©дR‰ШxВ/Z0иr>ЯЛ0‹t*—КjeCюгЛ“?^Љ\]ГиўZjт-џђH1r°O6ѕї=Д=Дѓэ>щХДѕeIИ'Я—Сd©м[єЧжМГ\ќРучўЩ$№В·ИИѓDЯ˜p93¤cr ›ѓЊ±¤оц~ ¶ћ ИЦ:m-3о-±T|эF2Л&ЋЫ?„о Ьќ;„ш>б ФdqЙHеSћHуиф+tлV‘ХZ«opЅz°’Gћњё1Kт•UЇd§хFЈF@?Ђ—<Tі>:H§»F4=Xеq“9>"bB`—Ж"ЃВb’CІBB/*$лн Ѕx$*ЂЊh:єDЅjQ¶%2П7c’„"YЃґ&*’соUћ%*o‘кb sF” 2вУ™"™ИБm“)Яќ°Њ%мҐIH&PмЬ ЌytI¬"ЯZµЎ'ФФ2?Сѕ)¤dі*Eѕц?„Й*v…f+,ђXд’Aњ—H)(]w?шЌя©HiАХeEОД|eнSЖђ{яvMcћРђ№*Oддѓ›PМ“ W‰]¦Њ…Л+*ХКЌ,#hІB¤”и|џжJ<М21—ЂuB#ЙnТZЃK э Ѓ^Џe'xEа,Щ™›§5фa&ТЈ 5~Ќюt\*ЗЌDљќ…БЋЫЕeћ) г\)рЈUП\ґ`№ЈH>Uёу^9 НШ9dўPдА[сам·$М©З(е> }.AV4xЕ7±ЅЪ!џу3l¶nџNm·џвNЇjЬBf—ђшўz~µЃQЩ%yЈЇОiFТі*ЩуgЏЙђЬ@ХЩ®vаSv‚3pТЎО›2e—ZЖЯЗ*‚.РY#ќUѓ¤ЋАSш}*дОж*e,Aµ?†т¦W }`o!1Am–edХ Ґ]в]ЉЉ«˜¶аЎ…/L󶩹A"Љ«t4асфv&АЦ–‡8¤;`5tђЎ3YИІ>4‚ЮлиА¬~IЈjбч!qЧ(#»"dUWоЫСm0бҐ^іn6щ9ббР±CВ<Ј)L•0(¦*М?j,VОЁжЏе®˜тД:ГgѓYgф%WУ?3`©™3*ЯAкҐF|ЭуKlъи-іK©`Фнt7/аїOУ)з*/M¦Ћ©CћBзЎSЁЅ1К№ы‘ХЪ$TхIД&j›ЦЭ±Ђ¤ч;нvzQ,ц»чбFПeАЧDd±–¬МјГ.FН,ҐBЄR#—2Q'4кєfK;S7ј0»„BSё(BхhQc*№gN5ЮEtМ"(iЩРЃ:“бL[=ЭЃ2¬^›Uпл Х~ћ¤y=„-d‰КЙХЅдЇбѕ>wNЈњiЕVщЩ2Є%ЁzVdxoiРёХ“Ccju) Ї0’h4V sm%и~ АЊБ™УМЙu94¦ђB Є¤y\®-—§*c=–8•з-`є"}FC.јнВЧv‚ѓ5чѓЫ\иIЅОѕE2ЪБ ъJ&%ёsБр`њщ·зҐ{/ќ^ЇЅњxЧu{дHA7З~%бх›·Ы›ЧP^wF:PтRЂv®§йхFкЅЁчЪлЭkЁчњС9СФ›‚I»рћК;—;jе/їиО¦="W\aiбђ6k*‘цI—ЕЫДжФіn9чaёA—I\ІДУG‡Јoт)Њ*жx–ђтбgџЋксSWзЊ‡!‰ЁO(l2*Фio¬&С8цЄcЂ‰$жЄ,›0цёs3ЃtzИ}іђuLы"‹/Ћe0ѓО8‡OБ°Ґ•%*ёх›О2ђ)Њ6–‰”†8њёX†ъд>ІќmЄзЌж?m#0H(R}”э_]&m›±ё(БJ~j:СЧЛBјо=5їCш‘aУЉ‚Ґn©иЪЎs ¶5йЛЭУ6њ3иAґ)A9СO?‚9#E~ъК:СБуишшрИ}…|?‡¶C?ѓNжѓ5Шћ$д?C;ПґюOµ¬„ћ)ЋѕЏf=†о x]Iыf№бУPЄ}¬АжЁBЯ߲붇oЃgњ-6Ь<BЙЃщЎуGАrT6»˜о~фI+AгЇZх2hЁ¦vbєЪ<Е А'РУ.X˜Њіф%Qљ<ўШю~ТZ№we}Ґj8щ„ґм“—*•ѕ5ъКj*e…П'-з^ХЙ¬zT©¬е˜^єgЫ*|зwҐ_щоЪ†ҐвГ0єкЃ7¶0>› VУ-З@@ЦИВ.Rћ17МtVn).ЯЗЕчлѓJuЙд/Љ…0ЧЛe„y»]5•х ЩЄјЕоІ 61а‘ПL”гL*WЂ`х}]2љm#F@Uэ:¬ња,ЂUji—oжеrCxжcвшmюBЙЁѓњаы"[jЇ˜љГЯhЏеJвD@Kl‹xX•ly‚ж=gЕ3з&ьЃ?ЃА~і‡ј‘@–я:YшЯэнзїюьГП?јыч»ѕыWќЊU]Ўщ†СЭNРs›Эќю,оТ+нWвё…Щ4'NРгuѕ+(\ЃА¬Јn„cFZ=q•пшњж@W*Лd6B9ЌоюFЇб67ґDЦ@дxЮ2Oњ…’Ъ'mOЧSЛё9gЛАxhВІФ›ЄЫ*ЭЛШЌЇ]ќъdkk›Ф;…Тч!Ч38УS}Фиjщъ$ПўЦтбuЅ{±Ю5Ј+ќЄљ$°/ААQ ЎZC—±”aSнЂЅn<®¤Г~|ДћђNzA¤?xHоAРШS© ?{ЊЃ*jкЪФкjt$== яThN¦lФЃН|:^»Э&яэЛ?И36qџС(єДCDР\¦˜ъ˜Ш^КBј6ўpЮЧМ# ›Л?)~-~Ыeyjњё™Fм–?ќС—l–‘<IfРtФгUgН*шў'ЎзNБ‘>d‘g<ХЇFhМPУ Б§жФўBPZм¶ПК†¶Z•\Ьiфи3H\Є ZO°wI_iЖ±fhjЊц pО_‹<– µЉsD–G—ўcYІЎMсQiИЃєkЊ8јPlЮ "в…$&©b»©2‘L—ќЩ'ЕО~™в™[VЋ/aц–g4џ4ЙЌ=EЄЕzіџЁ9ФЩИ˜юЪЌW\М=a9џћ1®®Ј‰*hЋ%зsьѕfЖЈ і‚<Вл®®][џ¤К#*—YЇ.ZМ®КX~ХоЄшYф ђ*cZ+[3ЩчJµЗ? И3°ѕI.ТҐМ Tюогб— ‰еaOщ`A#We«№|у¦юUU‘Ж\SЖDeЋWлюNєнvЧн¶;лd|‰Ѓk…ћПАnОВHlІb]e%,‚ъ E№µnдJЏ1ЎCk©{˜ZmХoa1Q$жОиџ[ё…оЖ2C§c«д‡_м,бq ]ЄМcxPЬЧёЇКq©ЖЪU!ЫЬD%Мpz§q¦e„5л¦ќгS(C@«YWщѕъ{ЭЌЭЅќыоГэ{n§LЬ*;›nЇЧ»э~т{Ы±;EИЖTІRwШ"D‚†^LѓLиПZ…i>цЎoОжфњщд3Tgѕњлo–обX‹§·kнµОЦZA9ЫЃтНІЭt…МK*Ћ˜G¶…ЩЁџBoй}ДЁЃRљСШ¦ьXАњ[ОлЧхД“ЊЕЎХ¦?Ц„C˜эLO Зt:ґЫ§BxУИџџћ=w–РOuPRЅ·їѓя–ЃѕК)d›ЛЉAhEз3і †З¬Е<Eс ч±xМB„v&‡Ћ(Іїєт/ЬТ(®¶ѓcAнсTЏЮ5EСPЊ™¶heНВжvЁ¦ьіГОЙa&В“ЦўGрзu"Fљe¦Е§7Щ–4Юг|HZфЦj•№мє5‘µЌ]јbЏ†!jОцH„¶Hyп7~гЖ©ЌзъRцж6ѕѓ?QhЂЖBНљ‰щI юЁLCљг+•1МЉ_ђаODFъз?oЉкЦnяnЫкЬЮЅ˜ч¤еЛкјаtkЯc ф/давBAHt`) Если смотреть в бинарном (HEX) виде, то он начинается с заветных 1F 8B 08 00 00 00 00 00 00 03, это и есть запакованный GZIPом контент. Вот терь то я и передаю эти остатки массива в функцию, она сама обрезает первые 9 байтов, уточню, именно девять, я хз почему, но почему то так (StreamIn.Position := 10), и в том же буфере возвращает уже не зашифрованный хэш странички, так же возвращает True при удачном и False при не удачной распаковке. Ах да, после 4х дней гребли, я это осуществил с помощью ZLibEX. Последний раз редактировалось seeman_tm, 14.01.2013 в 13:00. |
#3
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |