Несмотря на то что желающих помочь было "НУ ОЧЕЕЕНЬ МНОООГО", эту задачку я всё же решил.
Не стоило бы конечно о решении рассказывать, но я же не чмо.
Ну да ладно.
Вот моя функция.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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'а, в нём находится пакет ответа сервера Такого вида:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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\Я№ѕлы юРЭq
иЗ«б?Шn:~©Є«[w
¤
vјыь˜м>}RоџРsyр§*Бc:eѕ^(ш’AЖSEdАћ„мВKgйg?| 8 Й“ m(OeѓЛSzNН>g4рНХ2tZ‚УW9Л.н—›s·гmzьSY,uјћЧхbћxЂМ+ЕS
.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ђЎ 3 YИІ> 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#— 2 Q' 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Бр`њщ·зҐ іђ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ћ 1
7 М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Ѕ
ДЁЃ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 принял такой вид.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ‹ µЫrЫЖхЩ™с?lаtDҐ@Rґ%Q $S л’X*c+–l§№Њf ,Й• ,Њ]?’=~Hы#}нL?*нд©щзъ%=gwqЈ(EN\z,‹із~]pрсЮУЭг?о“™Љ#rш|зсБ.q\Я№ѕлы юРЭq
иЗ«б?Шn:~©Є«[w
¤
vјыь˜м>}RоџРsyр§*Бc:eѕ^(ш’AЖSEdАћ„мВKgйg?| 8 Й“ m(OeѓЛSzNН>g4рНХ2tZ‚УW9Л.н—›s·гmzьSY,uјћЧхbћxЂМ+ЕS
.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ђЎ 3 YИІ> 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#— 2 Q' 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Бр`њщ·зҐ іђ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ћ 1
7 М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Ѕ
ДЁЃ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.