考虑以下url
http://m3u.com/tunein.m3u http://asxsomeurl.com/listen.asx:8024 http://www.plssomeotherurl.com/station.pls?id=111 http://22.198.133.16:8024
确定文件扩展名(.m3u/.asx/.pls)的正确方法是什么?显然最后一个没有文件扩展名。
编辑:我忘了提到m3u/asx/pls是音频流的播放列表(文本文件),必须进行不同的解析。目标确定扩展名,然后将url发送到正确的解析函数。例如。
url = argv[1]
ext = GetExtension(url)
if ext == "pls":
realurl = ParsePLS(url)
elif ext == "asx":
realurl = ParseASX(url)
(etc.)
else:
realurl = url
Play(realurl)
GetExtension()应该返回文件扩展名(如果有的话),最好不要连接到URL。
真正的正确方法是根本不使用文件扩展名。对有问题的URL执行GET(或HEAD)请求,并使用返回的“Content type”HTTP头获取内容类型。文件扩展名不可靠。
有关更多信息和有用的MIME类型列表,请参见MIME types (IANA media types)。
这对于
requests
和mimetypes
来说是最简单的:扩展名包含一个点前缀。例如,
extension
是内容类型'image/png'
的'.png'
。使用
urlparse
解析URL外的路径,然后使用os.path.splitext
获取扩展名。请注意,扩展名可能不是文件类型的可靠指示器。HTTP
Content-Type
头可能更好。相关问题 更多 >
编程相关推荐