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

使用Python获取音频流遇HTTP响应无状态码,如何处理该异常?

解决Python获取HTTP/0.9音频流的BadStatusLine异常

问题根源

服务器返回的是HTTP/0.9协议响应——这种早期HTTP协议没有状态行和响应头,直接返回原始二进制音频数据。而Python的urllib会严格校验HTTP状态行,因此抛出http.client.BadStatusLine异常。

解决方案:用http.client底层连接跳过状态行校验

绕过高层的HTTP协议校验逻辑,手动建立连接并读取原始响应体:

import http.client

# 替换为实际的服务器信息和请求路径
server = "<server>"
port = 81
request_path = "/audiostream.cgi?user=<user>&pwd=<password>&streamid=0&filename="

# 建立HTTP连接
conn = http.client.HTTPConnection(server, port)
conn.request("GET", request_path)

# 获取响应,HTTP/0.9无状态行,直接读取内容
response = conn.getresponse()

# 方式1:一次性读取全部数据(适合小音频文件)
audio_data = response.read()
# 保存到本地文件
with open("audio_stream.raw", "wb") as f:
    f.write(audio_data)

# 方式2:流式读取(适合大音频流,边读边处理)
# with open("audio_stream.raw", "wb") as f:
#     while True:
#         chunk = response.read(1024)  # 每次读取1KB数据
#         if not chunk:
#             break
#         f.write(chunk)

# 关闭连接
conn.close()

补充说明

  • curl通过--http0.9参数允许接收HTTP/0.9响应,因此能正常获取数据;
  • Firefox内置了老旧HTTP协议的兼容性处理,可自动识别并直接读取二进制数据;
  • urllib无法直接跳过状态行校验,因此推荐使用底层的http.client实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:45:36