python播放流媒体_用python录制流媒体和保存internet广播

如果您发现您的请求或Python 3中的urllib.request调用无法保存流,因为您收到的是“ICY 200 OK”,而不是“HTTP/1.0 200ok”头,那么您需要告诉底层函数icy200ok是OK!

您可以有效地做的是截取处理打开流后读取状态的例程,就在处理头之前。

只需在流打开代码上方放置这样的例程。def NiceToICY(self):

class InterceptedHTTPResponse():

pass

import io

line = self.fp.readline().replace(b"ICY 200 OK\r\n", b"HTTP/1.0 200 OK\r\n")

InterceptedSelf = InterceptedHTTPResponse()

InterceptedSelf.fp = io.BufferedReader(io.BytesIO(line))

InterceptedSelf.debuglevel = self.debuglevel

InterceptedSelf._close_conn = self._close_conn

return ORIGINAL_HTTP_CLIENT_READ_STATUS(InterceptedSelf)

然后在打开URL之前,将这些行放在主例程的开头。ORIGINAL_HTTP_CLIENT_READ_STATUS = urllib.request.http.client.HTTPResponse._read_status

urllib.request.http.client.HTTPResponse._read_status = NiceToICY

当打开流时,它们将重写标准例程(仅此一次),并运行NiceToICY函数来代替正常状态检查。NiceToICY替换未识别的状态响应,然后复制“real”read_status函数所需的原始响应的相关位。最后调用原始值,并将其中的值传递回调用方,其他所有内容将继续正常工作。

我发现这是解决导致错误的状态消息问题的最简单方法。希望对你也有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值