Python中如何按\r\n分割字符串提取HTTP响应头并排除报文体
问题根源
你遇到的是转义字符解析问题:你拿到的返回字符串里的\r\n是字面量转义组合,实际存储为\+r+\+n四个普通字符,不是HTTP协议里标准的回车换行控制符,所以直接用splitlines()或者匹配控制符的正则无法正常分割。
解决方法
两种实现方式都可以实现分割+排除报文体的需求:
方式1:直接用split方法(更简单,无需引入正则)
用原始字符串标识分隔符,匹配字面量\r\n,分割后遍历遇到空行直接终止(HTTP头和报文体之间用连续两个\r\n分隔,分割后会生成空字符串,刚好作为终止标记)
# 分割字符串 header_list = webinformation.split(r'\r\n') # 逐行打印头信息,遇到空行停止(自动排除报文体) for line in header_list: if not line.strip(): break print(line)
方式2:正则分割实现
正则匹配时同样要用原始字符串标识匹配规则:
import re header_list = re.split(r'\\r\\n', webinformation) for line in header_list: if not line.strip(): break print(line)
原有代码报错原因
splitlines()方法只能识别ASCII标准的回车、换行控制符,无法识别字面量的\r\n组合,因此无法完成分割- 之前的正则写法
re.split('\\r\\n', webinformation)中,传入的规则会被Python先转义为真实的回车换行控制符,和你字符串里的字面量\r\n不匹配,因此分割失败
测试示例
用你提供的示例字符串测试效果:
webinformation = 'HTTP/1.1 400 Bad Request\\r\\nDate: Tue, 26 Oct 2021 11:26:46 GMT\\r\\nServer: Apache\\r\\n\\r\\n这里是报文体内容,会被自动排除' header_list = webinformation.split(r'\r\n') for line in header_list: if not line.strip(): break print(line)
运行输出:
HTTP/1.1 400 Bad Request Date: Tue, 26 Oct 2021 11:26:46 GMT Server: Apache
内容的提问来源于stack exchange,提问作者jennifer
相关产品推荐
相关产品推荐

