获取http的gzip内容并解压相关问题(续)
2016-10-06 08:06
393 查看
续上一篇,之前用zlib,自己socket构造http数据包,那个代码是很正常的。
但是昨天用miniz.c来实现,用在wininet下却不行。后来参考了github上面的代码。
https://github.com/wkoszek/mini_gzip
修改出了一个函数。
int mini_gz_get_data_offset(const unsigned char *buffer, int bufferlength)
{
const unsigned char *hptr;
int offset;
int result = 0;
if (10 < bufferlength)
{
hptr = buffer + 0;
// .gz header
if (buffer[0] == 0x1F && buffer[1] == 0x8B && buffer[2] == 0x08)
{
// auxillary header
offset = 10;
if (buffer[3] & 0x4)
{
//fextra_len = buffer[offset + 1] << 8 | buffer[offset + 0];
offset += 2;
//fextra_ptr = &buffer[offset];
}
if (buffer[3] & 0x8)
{
//fname_ptr = &buffer[offset];
while (buffer[offset++] != '\0')
{
;
}
}
if (buffer[3] & 0x10)
{
//fcomment_ptr = &buffer[offset];
while (buffer[offset++] != '\0')
{
;
}
}
if (buffer[3] & 0x2)
{
//fcrc = *(unsigned short *)&buffer[offset];
offset += 2;
}
result = offset;
}
}
return (result);
}
此函数先找到了偏移,修正了source和len。
source += offset;
length -= offest;
之后再调用上一篇文章里面的函数才可以,并且上一篇文章里面函数里面那个47,也需要修改成 -MZ_DEFAULT_WINDOW_BITS。
问题解决。
但是昨天用miniz.c来实现,用在wininet下却不行。后来参考了github上面的代码。
https://github.com/wkoszek/mini_gzip
修改出了一个函数。
int mini_gz_get_data_offset(const unsigned char *buffer, int bufferlength)
{
const unsigned char *hptr;
int offset;
int result = 0;
if (10 < bufferlength)
{
hptr = buffer + 0;
// .gz header
if (buffer[0] == 0x1F && buffer[1] == 0x8B && buffer[2] == 0x08)
{
// auxillary header
offset = 10;
if (buffer[3] & 0x4)
{
//fextra_len = buffer[offset + 1] << 8 | buffer[offset + 0];
offset += 2;
//fextra_ptr = &buffer[offset];
}
if (buffer[3] & 0x8)
{
//fname_ptr = &buffer[offset];
while (buffer[offset++] != '\0')
{
;
}
}
if (buffer[3] & 0x10)
{
//fcomment_ptr = &buffer[offset];
while (buffer[offset++] != '\0')
{
;
}
}
if (buffer[3] & 0x2)
{
//fcrc = *(unsigned short *)&buffer[offset];
offset += 2;
}
result = offset;
}
}
return (result);
}
此函数先找到了偏移,修正了source和len。
source += offset;
length -= offest;
之后再调用上一篇文章里面的函数才可以,并且上一篇文章里面函数里面那个47,也需要修改成 -MZ_DEFAULT_WINDOW_BITS。
问题解决。
相关文章推荐
- 获取http的gzip内容并解压相关问题
- 获取http的gzip内容并解压相关问题
- 获取http的gzip内容并解压
- 关于获取http的gzip内容并解压
- 关于XMLHTTP无刷新数据获取和发送(转相关内容)
- python获取网页内容的相关编码问题
- 利用HttpWebRequest获取网页内容,由于Gzip压缩导致乱码的情况
- 关于HTTP GZIP解压问题
- http client对post内容gzip压缩和server端解压接收
- 【HTTP】WireShark中获取Content-Encoding: gzip时的响应内容
- HttpURLConnection 从网页获取内容与乱码问题解决
- php file_get_contents获取网页内容gzip编码导致的乱码问题
- VBS获取GZIP压缩的HTTP内容的实现代码
- 使用apache的HttpGet\HttpPost获取返回内容编码问题
- 在解压gz文件时,如果直接用java.util.zip.GZIPInputStream来处理问题只能解压很少一部分内容,通过类MultiMemberGZIPInputStream 可以完全解压一个gz文件。
- Java基础:利用HttpClient获取网页内容
- 使用TIdHTTP获取网页的中文乱码问题
- 利用HTTP_X_FORWARDED_FOR获取客户端IP(http代理的相关知识)
- HttpWebResponse无法准确获取CharacterSet导致网页数据乱码问题的解决
- HttpWebRequest编程相关问题(6)