ZC: snpa_portable(SoftPerfect Network Protocol Analyzer) 抓到的 http数据 部分,是经过 gzip等压缩的,需要解压缩,然后 还要根据 网页的编码方式进行解码。

1、JavaSE (包 : httpPacketEncode)

  1.1、ThttpPacketEncode

package httpPacketEncode;import java.io.*;
import java.util.zip.*;//ZC: 修改于 “20161102 16:28”public class ThttpPacketEncode
{// 测试抓数据包的网址:http://gd.joycool.net/public static void main(String[] args) throws Exception{// ***// 16进制的字符串ThttpPacketHexString http = new ThttpPacketHexString();http.Fstr = "485454502F312E3120323030204F4B0D0A5365727665723A206E67696E780D0A446174653A205468752C203237204F637420323031362030343A30383A303620474D540D0A436F6E74656E742D547970653A20746578742F68746D6C3B636861727365743D7574662D380D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A436F6E6E656374696F6E3A206B6565702D616C6976650D0A5365742D436F6F6B69653A205349443D385756625F4D3B20506174683D2F0D0A43616368652D436F6E74726F6C3A206E6F2D63616368650D0A436F6E74656E742D456E636F64696E673A20677A69700D0A0D0A6162300D0A1F8B0800000000000003A5586D4F1B5716FEDE5FE1B5B4D56E453CE3F17B8B4DBBB4AB454AB69136EDAA8AF2C1D8831962CF783D9300AB6A65420063C0C6C104884931091068308642E2375E247E4AE27B67E6D3FE853D7706EC89ED34A0952CBF8CEF39F7B9E7E539E7DCEE9E9148D8F4908D899CC07BCD560B6D36B17C4008727CC86BFEE1CE5F6FB8CD3DBEEE3F7CFB7DEF9D9F6E7F671A9460F9ED1FFE72B3AFD764FEDB9D5B37CD26F30D8AFAA7AD97A2BEBDF3AD893C32D92DB4E94ECCCF8B9C045AFD618AFAEEEF66DF67DD9A30ECC78B5EF3A02445BFA4A8E1E161CBB0CD22C44294D5E3F15023648DD9D73DC8FA83BEEE082BF94DBC3FC27ACD0F3976382AC424B32920F012CB4B5EF330179406BD8C9DEEE278D8C91FBE2106FC61D66BB5309EAE07221BD37EFBFBE1116DA63ED0764BE8E7C2ECF751898B70FF668306A58CCD49D64A9C14667DF5CABC3A51C2E5324EA4E58D53345BEDA6F47FBAC31C7FDF34186307BC662A1A1346462D0151EC79E865CCA6181BF69A456934CC8A832C0B88A5D1289C406247240A1611F5947EBE7E2138EAEB1603312E2A99C458A0A16B4857E5FBAA9BD2FFF57507B987267F980B819702707C3606A0C37E114C09FF58C164036017304E588879CDA36C382C0C9B2F0E70099DAC80BD61BDAEAE29CF807B3EEBE62221D8022C2B982FD0C4D82835248C060421FC4D30C2F11407D6A7AC76BBDDC5D8EC34ED72382D216E801CA93F066FFE4B93F40AE10711DE12147A00117CEB0B7A3D769BDBECC34FF7F1F44C37E5F7FDDC5C1D168787448AE383EC8865488C9A7DA878AC247E6D59455C4AC5D81027C2E9F575F8701B4DCE765A1716421CAF2F92576AE864B165D1506040883D8850DA3B59D7A37D039C604B7C5443C96D22A11DEB6E136987735919BBDD03A62E2FA82F9689CCBDDF5FEE7231763861EE04552795E423B4B1032F88B47A790E8DAD3636FD8412BBD3053EBFBAC75C0CCD80D3DC36BBC732140D6941D87E3C715088523C3B2CEA960354F2AB78CB99B435065FF5C929025F392AD42BFBF5EAA40194323F8B571368226B8CA7F008C5DA6D7687";http.Fstr += "CB6ABD8C9D0E86D67791D88806A5870B4266F9D4B1053451FA049E778BFBEFB28977934FD07E021DECBE5B9EC46FC650E5E8FDF84403239A4FE0C43CC4225A18BB214F5750E22D7EB32767D7F43FD0DC7AC30F06E7B763B27DEE8F44BF122520181F08C9D35A2C1A02A0D558A87258AF95E45C0615D7EAD559942E35316DBC42C559E5E0D71FFB6E83AE3FD9202CFEDC01869E2C2160C5BE66C2C82719A0A916CB740A568795B14180BFD85236CF40A20B67DFAAB949F9B753F934A59D60AAC39694967A020FA4C7DEF2F3FE909E7F8D94B1391C669F52D88243A1033D5ED4D5382AEFA1E44E97522CE1E9D366385F4597BCB72ECF4FA28C964F5A0E7A9B0A2E53D710833A512B7B55F43C47F09F9794FD84BC9B415B2B4AB1E06D21A74B05EDB9EF70D1609DBB6A2589D737EF69966850DAA514A944BD7A0DFA803788AC160E17050AA8C4EEB0B93D0ED0582F8F7F1E92BE42E9229ADF427B159CC8A074A65E4ED6CBF177F1AD86C9DB0FD98ED1E30086BAABEE1EA383190DA2A95DEA631841B60D225002E12F5DA107F2B55E3B0170A8FC54393DAD57ABD7C5E774117CCAD111CA9D5ED38420DA0A8F01CAB28242E0A1FF1E3F43C77174368E57A7EB277978073376301DE12F6331B90B79AE2ED5AE88C5E03D27ED767920B22135F06206A78F944405957E539FE795B38C3A5E40A5E7A83C090F09EB5D7258BB33DA5D08547617554ED4DAF215415DD626A6D53C369793B64259558A47F2B3C768F3048DA7C136F5E367EFE38FE0D5D9799D88C16AF50089DD459B8738FEAA059666D1CBB240B8D8EEA45D2E97534323116E0651B9F61C152BF5B3652555AAD76AF59345D0850A3BA8300FD094E42178AE612503AB0606FD1235E80F87B56C8A0942043207F429634960402261E0D38F2DAE57B3B8F214E572F84D093FDF94736565EC5963372F2E95D0EAB6CE12E725BD1F820A8FE36357E706AB9B06BF19AA9BB1A8756A925C2E487FDACED036B7B1E4B6114A7B7CE83474EDAD1CB4CDF17BD57D20C6B17C901259F627E1011FBA093DBE5EE795B314E4488BA9359EFE11C8EE07E8BBFAF801817473E42121369BD3E960C01C385FC6C0FBCF5E12E1AE66EC7F5A18729A1A1189184AE6D1C4A6EE1C8DA9BFF89EE35122876A5592580D7B0D0A1196226F8C16290D280E8F83261DD5DE5B942B347CFE059A5B94AB45B4F0049DBD06E5F2D4E235743A9D8C1562B055A7BA7C8826A6EBE5198868A0EE7AF957B49FC6CB6BF0BA8E72BBC7D60ED89012BAA3FC4198CB28FDFB37E4BBA1DEA3D331949E69F1D847C46EB1A208255B331AE4AAC3E571324E38DB52F13F7A8EA1C56605F2CAE305F95105A7B695B9F9F312DA3E00DBE913504BAA5C4C70FEA0E522F82D3C2B51FF7AC08A64EA3312B0BAB42717B238B5A99EAE68FEB97ADB6AB55A698FDB6173";http.Fstr += "BAEC97CDE2653C74DE7F48E8A7FC3C3428460068AA8AF7B372E149233A1A51D5990AEDE07BA82F68F3294E2EC833C75D683DA3C6F3B8BCA36E6DEB1429EF54D5A5A376855AFBDCE8A12FC8D2EDB2E9D44DC8D20379834A9BF2AB8C9C2DA18544FD2447EADAEC0430A5BA5045E925BCFB0252F28ABAC924D6246237005F5C2125A03C0755001D3FC62B8B686B1202565E3D96AB6768E3153E5C6CE86E469D280981FB8CD16CCAA375547E4496DED3B31364E5DCB2D5E1A02D2E0F44494B5FD5C1961E978774036862176592F7E4AD315C7821A7F6D5A94CBDBA81971794956778664D9EDE8146BC81A9E11C2AE017A50F109DCDCB850A2A9750E571179A3C54C657D15A0AE5D77162B95E9D6ED710E0A451A3029CAD81004EE5D1EA7E97B21E2772E57118C6D497A97A35D3AE800AF9634116C2590CFB790875329D7EAD647795F42AAEAD03E17C0DA681DAA2D61EC3A1D0E42A5AAD36B4782FCC363F077DD479A9792E09C62C43FB0A79A1ACA4F09636FDE969D6F40B451647049E1DBD23447500FA9C70B1DE501D3FC1BA307579A04E6FCFFC113DD905B40D9C2D9B45EFDF84195BDF4A79F30248F0DA5B310E3769DA8A7B50C249FBB45204EBAA2F7FC1D3BB1FDBB53FEC0F1836C6636FC168D7DBD8E6B1396D5638A36E77D8583E4DC2EB7D3C89B24520ECF7718D33F589425FA4BC798CABC074BA1B5162B25E7DDD99E96C214B68C0CF5B02428484F4DE349A5BB0E8D40815413939812B00B822D27BA70FAE4386C9B4465A1C2A24F4033B357D6F32812AFC720676C74B7979A764917349BC528551142E213AA8A23A24195CAC9024D3CF43DA9AE3D71632CE41FB953B45078B5754035CABB580BA1E3C3E211F2F5BC0F9EAE2993A352BAF159A7A0CD39816739F180D758D6440D4A74368C1B2874A715ADE3BD04D6DA561EE605C78699322D574750D3A39CACA7C49BB3F4D3180DA037721F8E9145E4EA1E42F300AFFACFF80F98AFCA8974F7172135A0C94D6DA144D65AF101D8D71A141E93C7FBE739E6768ABF33C0F2E50B3EB38352B3F3F031CC0D038190716848908AA81BA324F782C5D3ECF7F130E9FE73571113E59688A1EB2418BA6186D4CE1F5040CF65F2A33E9BEDEDBF0DB6AA7A113B4BBE1E187C7315C82F6B31C845648786809F014B9E8846BD3CBBBAE7F8CC28D5784B4603D313620C482703FCB7A6D70A3039A199AA6190FC4FC75DA45DA06FD8DDBCD581D9628DFB80C6AA9ACE46EF6FF87055600AB811F48C26C4C993E844D4C02F545330BDC40EA7793947E2F4A91BB60B897FC1FE5330C11A41600000D0A300D0A0D0A";// 完整的一个包的 16进制数据://485454502F312E3120323030204F4B0D0A5365727665723A206E67696E780D0A446174653A205468752C203237204F637420323031362030343A30383A303620474D540D0A436F6E74656E742D547970653A20746578742F68746D6C3B636861727365743D7574662D380D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A436F6E6E656374696F6E3A206B6565702D616C6976650D0A5365742D436F6F6B69653A205349443D385756625F4D3B20506174683D2F0D0A43616368652D436F6E74726F6C3A206E6F2D63616368650D0A436F6E74656E742D456E636F64696E673A20677A69700D0A0D0A6162300D0A1F8B0800000000000003A5586D4F1B5716FEDE5FE1B5B4D56E453CE3F17B8B4DBBB4AB454AB69136EDAA8AF2C1D8831962CF783D9300AB6A65420063C0C6C104884931091068308642E2375E247E4AE27B67E6D3FE853D7706EC89ED34A0952CBF8CEF39F7B9E7E539E7DCEE9E9148D8F4908D899CC07BCD560B6D36B17C4008727CC86BFEE1CE5F6FB8CD3DBEEE3F7CFB7DEF9D9F6E7F671A9460F9ED1FFE72B3AFD764FEDB9D5B37CD26F30D8AFAA7AD97A2BEBDF3AD893C32D92DB4E94ECCCF8B9C045AFD618AFAEEEF66DF67DD9A30ECC78B5EF3A02445BFA4A8E1E161CBB0CD22C44294D5E3F15023648DD9D73DC8FA83BEEE082BF94DBC3FC27ACD0F3976382AC424B32920F012CB4B5EF330179406BD8C9DEEE278D8C91FBE2106FC61D66BB5309EAE07221BD37EFBFBE1116DA63ED0764BE8E7C2ECF751898B70FF668306A58CCD49D64A9C14667DF5CABC3A51C2E5324EA4E58D53345BEDA6F47FBAC31C7FDF34186307BC662A1A1346462D0151EC79E865CCA6181BF69A456934CC8A832C0B88A5D1289C406247240A1611F5947EBE7E2138EAEB1603312E2A99C458A0A16B4857E5FBAA9BD2FFF57507B987267F980B819702707C3606A0C37E114C09FF58C164036017304E588879CDA36C382C0C9B2F0E70099DAC80BD61BDAEAE29CF807B3EEBE62221D8022C2B982FD0C4D82835248C060421FC4D30C2F11407D6A7AC76BBDDC5D8EC34ED72382D216E801CA93F066FFE4B93F40AE10711DE12147A00117CEB0B7A3D769BDBECC34FF7F1F44C37E5F7FDDC5C1D168787448AE383EC8865488C9A7DA878AC247E6D59455C4AC5D81027C2E9F575F8701B4DCE765A1716421CAF2F92576AE864B165D1506040883D8850DA3B59D7A37D039C604B7C5443C96D22A11DEB6E136987735919BBDD03A62E2FA82F9689CCBDDF5FEE7231763861EE04552795E423B4B1032F88B47A790E8DAD3636FD8412BBD3053EBFBAC75C0CCD80D3DC36BBC732140D6941D87E3C715088523C3B2CEA960354F2AB78CB99B435065FF5C929025F392AD42BFBF5EAA40194323F8B571368226B8CA7F008C5DA6D7687CB6ABD8C9D0E86D67791D88806A5870B4266F9D4B1053451FA049E778BFBEFB28977934FD07E021DECBE5B9EC46FC650E5E8FDF84403239A4FE0C43CC4225A18BB214F5750E22D7EB32767D7F43FD0DC7AC30F06E7B763B27DEE8F44BF122520181F08C9D35A2C1A02A0D558A87258AF95E45C0615D7EAD559942E35316DBC42C559E5E0D71FFB6E83AE3FD9202CFEDC01869E2C2160C5BE66C2C82719A0A916CB740A568795B14180BFD85236CF40A20B67DFAAB949F9B753F934A59D60AAC39694967A020FA4C7DEF2F3FE909E7F8D94B1391C669F52D88243A1033D5ED4D5382AEFA1E44E97522CE1E9D366385F4597BCB72ECF4FA28C964F5A0E7A9B0A2E53D710833A512B7B55F43C47F09F9794FD84BC9B415B2B4AB1E06D21A74B05EDB9EF70D1609DBB6A2589D737EF69966850DAA514A944BD7A0DFA803788AC160E17050AA8C4EEB0B93D0ED0582F8F7F1E92BE42E9229ADF427B159CC8A074A65E4ED6CBF177F1AD86C9DB0FD98ED1E30086BAABEE1EA383190DA2A95DEA631841B60D225002E12F5DA107F2B55E3B0170A8FC54393DAD57ABD7C5E774117CCAD111CA9D5ED38420DA0A8F01CAB28242E0A1FF1E3F43C77174368E57A7EB277978073376301DE12F6331B90B79AE2ED5AE88C5E03D27ED767920B22135F06206A78F944405957E539FE795B38C3A5E40A5E7A83C090F09EB5D7258BB33DA5D08547617554ED4DAF215415DD626A6D53C369793B64259558A47F2B3C768F3048DA7C136F5E367EFE38FE0D5D9799D88C16AF50089DD459B8738FEAA059666D1CBB240B8D8EEA45D2E97534323116E0651B9F61C152BF5B3652555AAD76AF59345D0850A3BA8300FD094E42178AE612503AB0606FD1235E80F87B56C8A0942043207F429634960402261E0D38F2DAE57B3B8F214E572F84D093FDF94736565EC5963372F2E95D0EAB6CE12E725BD1F820A8FE36357E706AB9B06BF19AA9BB1A8756A925C2E487FDACED036B7B1E4B6114A7B7CE83474EDAD1CB4CDF17BD57D20C6B17C901259F627E1011FBA093DBE5EE795B314E4488BA9359EFE11C8EE07E8BBFAF801817473E42121369BD3E960C01C385FC6C0FBCF5E12E1AE66EC7F5A18729A1A1189184AE6D1C4A6EE1C8DA9BFF89EE35122876A5592580D7B0D0A1196226F8C16290D280E8F83261DD5DE5B942B347CFE059A5B94AB45B4F0049DBD06E5F2D4E235743A9D8C1562B055A7BA7C8826A6EBE5198868A0EE7AF957B49FC6CB6BF0BA8E72BBC7D60ED89012BAA3FC4198CB28FDFB37E4BBA1DEA3D331949E69F1D847C46EB1A208255B331AE4AAC3E571324E38DB52F13F7A8EA1C56605F2CAE305F95105A7B695B9F9F312DA3E00DBE913504BAA5C4C70FEA0E522F82D3C2B51FF7AC08A64EA3312B0BAB42717B238B5A99EAE68FEB97ADB6AB55A698FDB6173BAEC97CDE2653C74DE7F48E8A7FC3C3428460068AA8AF7B372E149233A1A51D5990AEDE07BA82F68F3294E2EC833C75D683DA3C6F3B8BCA36E6DEB1429EF54D5A5A376855AFBDCE8A12FC8D2EDB2E9D44DC8D20379834A9BF2AB8C9C2DA18544FD2447EADAEC0430A5BA5045E925BCFB0252F28ABAC924D6246237005F5C2125A03C0755001D3FC62B8B686B1202565E3D96AB6768E3153E5C6CE86E469D280981FB8CD16CCAA375547E4496DED3B31364E5DCB2D5E1A02D2E0F44494B5FD5C1961E978774036862176592F7E4AD315C7821A7F6D5A94CBDBA81971794956778664D9EDE8146BC81A9E11C2AE017A50F109DCDCB850A2A9750E571179A3C54C657D15A0AE5D77162B95E9D6ED710E0A451A3029CAD81004EE5D1EA7E97B21E2772E57118C6D497A97A35D3AE800AF9634116C2590CFB790875329D7EAD647795F42AAEAD03E17C0DA681DAA2D61EC3A1D0E42A5AAD36B4782FCC363F077DD479A9792E09C62C43FB0A79A1ACA4F09636FDE969D6F40B451647049E1DBD23447500FA9C70B1DE501D3FC1BA307579A04E6FCFFC113DD905B40D9C2D9B45EFDF84195BDF4A79F30248F0DA5B310E3769DA8A7B50C249FBB45204EBAA2F7FC1D3BB1FDBB53FEC0F1836C6636FC168D7DBD8E6B1396D5638A36E77D8583E4DC2EB7D3C89B24520ECF7718D33F589425FA4BC798CABC074BA1B5162B25E7DDD99E96C214B68C0CF5B02428484F4DE349A5BB0E8D40815413939812B00B822D27BA70FAE4386C9B4465A1C2A24F4033B357D6F32812AFC720676C74B7979A764917349BC528551142E213AA8A23A24195CAC9024D3CF43DA9AE3D71632CE41FB953B45078B5754035CABB580BA1E3C3E211F2F5BC0F9EAE2993A352BAF159A7A0CD39816739F180D758D6440D4A74368C1B2874A715ADE3BD04D6DA561EE605C78699322D574750D3A39CACA7C49BB3F4D3180DA037721F8E9145E4EA1E42F300AFFACFF80F98AFCA8974F7172135A0C94D6DA144D65AF101D8D71A141E93C7FBE739E6768ABF33C0F2E50B3EB38352B3F3F031CC0D038190716848908AA81BA324F782C5D3ECF7F130E9FE73571113E59688A1EB2418BA6186D4CE1F5040CF65F2A33E9BEDEDBF0DB6AA7A113B4BBE1E187C7315C82F6B31C845648786809F014B9E8846BD3CBBBAE7F8CC28D5784B4603D313620C482703FCB7A6D70A3039A199AA6190FC4FC75DA45DA06FD8DDBCD581D9628DFB80C6AA9ACE46EF6FF87055600AB811F48C26C4C993E844D4C02F545330BDC40EA7793947E2F4A91BB60B897FC1FE5330C11A41600000D0A300D0A0D0Aint iRtn = HtmlPacketParse(http, "ISO_8859-1", "utf-8");if (iRtn != 0)System.out.println("iRtn : "+iRtn);elseSystem.out.println(http.Fstr);} // main(...)// snpa_portable(SoftPerfect Network Protocol Analyzer)//    抓到的数据包(16进制的数据的字母都是大写的)(是经过gzip等压缩过的)://    (1)、解压(gzip等)//    (2)、编码转换// 传入参数 _str ://    TCP数据包的全部“Data”部分(注意:TCP数据包可能会分包,这里传入的是完整的一个TCP数据包的数据部分)// 传入的是 16进制的 字符串// _strStringEncoding : http数据部分的 字符编码方式// _strWebpageEncoding : 网页的字符编码方式public static int HtmlPacketParse(ThttpPacketHexString _http,String _strStringEncoding, String _strWebpageEncoding) throws Exception{// ZC: 回车换行(0x0D,0x0A) ==> java中对应字符串为"\r\n"String strCRLFCRLF = "0D0A0D0A";int iIdx = _http.Fstr.indexOf(strCRLFCRLF);if (iIdx == -1)return -1;iIdx += strCRLFCRLF.length(); // 注意:这里是 8 !!!// 此时,iIdx的前面部分是 http头,后面部分是http的数据String strHttpHeader = _http.Fstr.substring(0, iIdx); String strHttpData = _http.Fstr.substring(iIdx, _http.Fstr.length());//System.out.println("strHttpData : "+strHttpData);
        strHttpHeader = Hex2String(strHttpHeader, _strStringEncoding);//System.out.println(strHttpHeader);//System.out.println(String.format("%02X", (int)strHttpHeader.charAt(strHttpHeader.length()-1)));String strContentEncoding = "Content-Encoding";String strAttrValue = HttpHeaderAttrValue(false, strHttpHeader, strContentEncoding);if (strAttrValue == null)return -2;if (strAttrValue.compareToIgnoreCase("gzip") != 0)return -3;// 这里,抓到的gzip数据里面都有一个“数字”,然后是0x0D0A,再然后才是 真正的gzip数据//    一直不知道 这个“数字” 是干嘛的...(以后再 学习研究)String strCRLF = "0D0A";iIdx = strHttpData.indexOf(strCRLF);if (iIdx == -1)return -4;String strGzipData = strHttpData.substring(iIdx + strCRLF.length(), strHttpData.length());//System.out.println(strGzipData);_http.Fstr = HtmlGzipUncompress(strGzipData, _strWebpageEncoding);return 0;}// 16进制字符的 字符串,转 byte[]public static byte[] Hex2String(String _strHex) throws Exception{int lArrLen = _strHex.length() / 2;byte[] bytes = new byte[lArrLen];for (int i=0; i<lArrLen; i++){String strSub = _strHex.substring(i*2, i*2+2);int iSub = Integer.parseInt(strSub, 16);bytes[i] = (byte)(iSub & 0xFF);}return bytes;}// 16进制字符的 字符串,转 普通字符串public static String Hex2String(String _strHex, String _strStringEncoding) throws Exception{byte[] bytes = Hex2String(_strHex);String strRst = new String(bytes, _strStringEncoding);return strRst;}// 传入参数://    _strHttpHeader : http头的字符串//    _strHttpHeaderAttrName : 要查找的 http头里面的属性名//    _bNest : 指明是否已经嵌套过一次了public static String HttpHeaderAttrValue(boolean _bNest, String _strHttpHeader, String _strHttpHeaderAttrName){int iIdx = _strHttpHeader.indexOf(_strHttpHeaderAttrName);if (iIdx != -1){String strCRLF = "\r\n"; // ZC: 回车换行(0x0D,0x0A)int iIdxCRLF = _strHttpHeader.indexOf(strCRLF, iIdx);if (iIdxCRLF != -1){String strAttr = _strHttpHeader.substring(iIdx, iIdxCRLF);iIdx = strAttr.indexOf(':');if (iIdx != -1)return strAttr.substring(iIdx+1, strAttr.length()).trim();}}        if (! _bNest)return HttpHeaderAttrValue(true, _strHttpHeader.toLowerCase(), _strHttpHeaderAttrName.toLowerCase());elsereturn null;}public static String HtmlGzipUncompress(String _strGzipData, String _strWebpageEncoding) throws Exception{byte[] bytes = Hex2String(_strGzipData);bytes = UnCompress(bytes);return new String(bytes, _strWebpageEncoding);}// gzip 压缩 / 解压缩// 压缩public static byte[] Compress(byte[] _bytes) throws Exception{if (_bytes == null || _bytes.length == 0)return null;ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = new GZIPOutputStream(out);gzip.write(_bytes);gzip.close();return out.toByteArray();}// 解压缩public static byte[] UnCompress(byte[] _bytes) throws Exception{if (_bytes == null || _bytes.length == 0)return null;ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(_bytes);GZIPInputStream gunzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = gunzip.read(buffer))>= 0)out.write(buffer, 0, n);// toString()使用平台默认编码,也可以显式的指定如toString("GBK")//return out.toString("ISO-8859-1");return out.toByteArray();}
}

  1.2、ThttpPacketHexString

package httpPacketEncode;public class ThttpPacketHexString
{public String Fstr;
}

2、JavaWeb

  2.1、httpPkt.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="httpPacketEncode.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- 修改于 “20161102 16:31” -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title><script type="text/javascript">function ClickClearTextarea(_strTextareaId){var textarea = document.getElementById(_strTextareaId);textarea.value = ""; }
</script></head>
<body><%
String strHex = request.getParameter("hexString");
String strStringEncoding = request.getParameter("stringEncoding");
String strWebpageEncoding = request.getParameter("webpageEncoding");
// System.out.println("strHex : "+strHex);
// System.out.println("strStringEncoding : "+strStringEncoding);
// System.out.println("strWebpageEncoding : "+strWebpageEncoding);
int iRtn = -100;
ThttpPacketHexString pkt = null;
if ( (strHex != null)&&(strHex.length()>0) && (strStringEncoding != null) && (strWebpageEncoding != null) )
{strHex = strHex.trim();//strHex = new String(strHex.getBytes("ISO-8859-1"), "utf-8");pkt = new ThttpPacketHexString();pkt.Fstr = strHex;//System.out.println(pkt.Fstr);//iRtn = ThttpPacketEncode.HtmlPacketParse(pkt, "ISO_8859-1", "utf-8");iRtn = ThttpPacketEncode.HtmlPacketParse(pkt, strStringEncoding, strWebpageEncoding);
}
%><form action="httpPkt.jsp" method="post">
<textarea rows="20" cols="100" name="hexString" id="textareaInput">
<%if (strHex != null)out.print(strHex);
%>
</textarea><br/><input type="text" name="stringEncoding" value="ISO-8859-1" /><input type="text" name="webpageEncoding" value="UTF-8" /><input type="submit" value="提交" /><input type="button" value="清空输入框" onclick="ClickClearTextarea('textareaInput')"/><input type="button" value="清空输出框" onclick="ClickClearTextarea('textareaOutput')"/><br/>
<textarea rows="20" cols="100" id="textareaOutput" style="margin-top:3px;">
<%if (iRtn == 0)out.print(pkt.Fstr);else{if (iRtn != -100)out.print("iRtn : "+iRtn);}
%>
</textarea>
</form></body>
</html>

3、

转载于:https://www.cnblogs.com/CodeHouseZ/p/6008386.html

小功能_httpPacket解码相关推荐

  1. 微信公众号天气与聊天机器人小功能

    微信公众号小功能 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解. (1)微信公众号发送地区回复现在和未来五天天气情况 (2)发送语音和智能机器人聊天 一.调用天气预报接口 实现微信公众号发送 ...

  2. 超简单爬虫使用requests模块+有道云翻译,python实现翻译小功能

    前言 最近隔壁小张找到我 "老王,最近我在学英语,不想想再打开网页翻译了,太麻烦了一直要开着网页" "那你可以下载客户端吗,不是挺方便的嘛?" "老王 ...

  3. iOS 生成带 logo 的二维码,区域截屏保存至相册(小功能二连发 (一))

    原文链接:http://www.jianshu.com/p/36e9f012ef39 生成带 logo 的二维码 区域截屏相关 -- 由3033分享 开篇 最近项目需要搞了几个相对独立的小功能,今天有 ...

  4. 高德地图小蓝点_一会晴天一会下雨?夏日想要顺利出行 高德地图这些小功能最实用...

    不同于其他三个季节,夏天总是有很多种烦恼,变化不定的天气就是其中最为影响出行的一项因素.而面对忽晴忽雨的天气,如何才能在夏日顺利出行呢?看看高德地图的这些实用小功能吧. ·实时天气预报 高德地图可以实 ...

  5. 猫猫学iOS(四十五)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。...

    猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 简介 iOS中的很多小功能都 ...

  6. 手机息屏后停止_手机息屏还能这样玩?华为这几个隐藏小功能快学起来

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,如有侵 ...

  7. android 常用小功能(第二版)

    经历过一段岁月,转眼2013的半年都过去了,第二版整理好的小功能,答应大家发布的,直到今日,终于和大家相见了,第二版没有第一版多,大家也可以去参考第一版的内容,希望大家使用愉快! 目录: 1.获取当前 ...

  8. Unity3D小功能 小技巧 小教程 小原理(持续更新...)

    Unity3D小功能 小技巧 小教程 小原理(持续更新...) 1.Unity的.NET版本是2.0 按道理来说,C#能用的功能Unity也能用,但是Unity的.NET却不是最新版 要是用一些别的D ...

  9. 一个时间日期转换格式的小功能(Oracle)

    一个时间日期转换格式的小功能 SQL> SELECT TO_CHAR(SYSDATE,'SSSSS'),sysdate FROM DUAL; TO_CH SYSDATE ----- ------ ...

最新文章

  1. 第八届全国大学生智能汽车竞赛获奖名单
  2. 又来说一下顺序~关于唯一索引和唯一约束的顺序
  3. 互联网工作原理(17.网络电视是如何工作的)
  4. CentOS下Docker安装
  5. C++ 特殊类设计:只能在堆、栈上创建的类、无法继承的类、无法拷贝的类、只能创建一个对象的类
  6. 设置Mac自动显示和隐藏 Dock 栏的速度
  7. 工作115:赋值给form对象
  8. 测绘技术设计规定最新版_公示 | 29家单位申报甲级测绘资质审查意见
  9. 通过实例讲解java接口和抽象类的特殊实现方法
  10. 2017.6.15 数字表格 思考记录
  11. 摩尔庄园一直显示服务器,《摩尔庄园手游》一直显示获取远端资源号介绍 进不去怎么办...
  12. json-server 模拟数据
  13. html简述四种基本标记的作用,HTML的常用标记
  14. 融资融券开户超干货学习!
  15. python 文件操作OS总结
  16. Aspose.Slides for java 22.9最新版 官网最新
  17. 百度地图 根据经纬度获取城市或省的名称
  18. COMSOL学习(一)
  19. 报名系统网页导出html,教资报名系统提示网站兼容性怎么办 ie浏览器兼容性操作流程...
  20. 使用Cglib的BeanCopier实现Bean的拷贝

热门文章

  1. dfema规则_六步搞定DFMEA表格
  2. SUSE12安装SAP HANA 2.0内存数据库
  3. 【理解springboot自动装配原理】
  4. 未来五年数控切割机重点发展方向
  5. 哈工大 编译原理 复习笔记
  6. ModelAndView: materialized View is [null];和Action的onSubmit()方法不被执行
  7. 使用u盘PE系统重装Windows操作系统
  8. @Before有啥用
  9. jquery 绘图工具 flot 使用
  10. Python3安装bz2