gzip_decode

なんとなく書いてしまったので.

def gzip_decode(data):
    from zlib import decompress, MAX_WBITS
    def skip_string(data, i):
        while data[i] != '\0':
            i += 1
        return i + 1
    flag = ord(data[3])
    i = 10
    if flag & 0x04:
        i += 2 + ord(data[i]) + 256 * ord(data[i + 1])
    if flag & 0x08:
        i = skip_string(data, i)
    if flag & 0x10:
        i = skip_string(data, i)
    if flag & 0x02:
        return decompress(data[i + 2:-8], -MAX_WBITS)
    else:
        return decompress(data[i:], -MAX_WBITS)

物凄く手抜きコードなので、下記のほうが無難だと思います.

def gzip_decode(data):
    import gzip, StringIO
    return gzip.GzipFile(fileobj = StringIO.StringIO(data)).read()