首页 > 解决方案 > curl 可以从 BLOB 获取音频文件吗?

问题描述

我正在尝试使用 curl 下载当您转到https://tetyys.com/SAPI4时生成的 wav 文件(或至少获取指向下载器的 URL),在编辑字段中输入文本,单击“说出来”,然后单击“播放”。

如果我查看页面源,或者右键播放按钮,点击“复制音频位置”,则显示wave文件的源是一个BLOB(即blob:https ://tetyys.com/someHexNumber )。

通过查看https://tetyys.com/SAPI4/scripts/tts.js上的脚本,特别是字符串 var“url”,我确定您可以像这样设置 url 中的所有值: https://tetyys。 com/SAPI4/SAPI4?text=whatever+you+want+it+to+say&voice=Sam&pitch=100&speed=100

当我在 Firefox 中输入它时,会出现一个对话框,询问我是否要打开 wav 文件,当我打开它时,它会按预期播放。

那么,有没有办法用 curl (或者从命令行无缝地)而不是 Firefox 来做到这一点?

标签: javascripthtmlbashcurl

解决方案


使用 curl 下载可以通过选项-o或来实现--output <file>,因此-O会尝试使用--remote-name. 有关详细信息,请参阅man curl 。

您应该尝试使用类似的结构

curl -o /opt/curl-7.65.3.tar.gz https://curl.haxx.se/download/curl-7.65.3.tar.gz

我还假设您的具体案例可能需要更多工作和脚本。因为打电话

curl -o test.wav https://tetyys.com/SAPI4/SAPI4 text=test&voice=Sam&pitch=100&speed=100

正在生成另一个源。如果您检查上述调用的响应和标题,您会发现

Request URL:blob:https://tetyys.com/<UUID>
Request Method:GET
Status Code:206 Partial Content (from disk cache)
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Content-Length:40166
Content-Range:bytes 0-40165/40166
Content-Type:audio/wav

所以要下载音频文件,你需要类似的东西

curl -o test.wav https://tetyys.com/${UUID}

也许连同必要的 cookie 和标头一起,至少-H "Keep-Alive: 60" -H "Connection: keep-alive"要保持会话打开。


推荐阅读