您的位置:首页 > 理论基础 > 计算机网络

获取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。

问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: