You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取Nginx缓存文件的KEY及以0D 0A 0D 0A结尾的HTTP头

读取Nginx缓存文件中指定范围的HTTP头

实现思路

  1. 以二进制模式打开Nginx缓存文件,定位到KEY起始位置0x00000150,跳过KEY内容找到其后的换行符0x0A(即\n),将文件指针移至该换行符的下一个字节。
  2. 从该位置开始分块读取字节并累积到缓冲区,直到首次遇到分隔符0x0D 0x0A 0x0D 0x0A(即\r\n\r\n)。
  3. 截取缓冲区中分隔符之前的内容,解码为字符串得到目标HTTP头。

代码实现

def read_nginx_cache_http_header(cache_file_path):
    # 定义HTTP头结束的分隔符:\r\n\r\n
    delimiter = b'\x0d\x0a\x0d\x0a'
    # KEY在缓存文件中的起始偏移
    key_start_offset = 0x150

    with open(cache_file_path, 'rb') as f:
        # 定位到KEY的起始位置
        f.seek(key_start_offset)
        
        # 跳过KEY内容,找到KEY后的第一个0x0A换行符
        while True:
            byte = f.read(1)
            if not byte:
                # 文件提前结束,未找到目标换行符
                return None
            if byte == b'\x0a':
                break
        
        # 开始读取HTTP头内容,直到遇到分隔符
        buffer = b''
        while True:
            # 分块读取,平衡读取效率与内存占用
            chunk = f.read(1024)
            if not chunk:
                # 文件结束,未找到分隔符
                return None
            
            buffer += chunk
            # 检查缓冲区是否包含目标分隔符
            delimiter_idx = buffer.find(delimiter)
            if delimiter_idx != -1:
                # 截取分隔符之前的字节作为HTTP头原始数据
                header_bytes = buffer[:delimiter_idx]
                break
        
        # 解码为字符串,HTTP头默认ASCII编码,用replace处理非标准字符避免解码崩溃
        return header_bytes.decode('utf-8', errors='replace')

# 调用示例
if __name__ == '__main__':
    target_header = read_nginx_cache_http_header('/path/to/your/nginx/cache/file')
    if target_header:
        print("读取到的HTTP头:")
        print(target_header)
    else:
        print("未找到目标HTTP头或缓存文件格式异常")

关键细节说明

  • 二进制模式读取:必须用rb模式打开文件,直接操作原始字节,避免文本模式自动转换换行符导致的位置偏移。
  • 分块缓冲读取:避免一次性读取大文件占用过多内存,同时通过缓冲区累积数据,确保能准确检测到跨块的分隔符。
  • 容错处理:加入文件提前结束的判断,避免缓存文件损坏或格式异常时程序崩溃;解码时用errors='replace'兼容非标准字符。

内容的提问来源于stack exchange,提问作者smaxx1337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:15:17