我有一个已经用 gawk 编写的程序,它可以从互联网上下载很多小信息。(媒体扫描仪和索引器)
目前它启动 wget 来获取信息。这很好,但我想简单地重用调用之间的连接。程序的运行可能会对同一个 api 服务进行 200-2000 次调用。
我刚刚发现 gawk 可以做网络并找到geturl 但是该页面底部的建议很受重视,我找不到一种简单的方法来阅读最后一行并保持连接打开。
由于我主要读取 JSON 数据,我可以设置 RS="}" 并在正文长度达到预期的内容长度时退出。不过,这可能会与任何尾随空格中断。我想要一个更强大的方法。有没有人有更好的方法来实现在 awk 中保持连接打开的零星 http 请求。目前我有以下结构......
con="/inet/tcp/0/host/80";
send_http_request(con);
RS="\r\n";
read_headers();
# now read the body - but do not close the connection...
RS="}"; # for JSON
while ( con |& getline bytes ) {
body = body bytes RS;
if (length(body) >= content_length) break;
print length(body);
}
# Do not close con here - keep open
可惜这件小事似乎破坏了这里的所有潜力。万一有人问:) ..
- 最初选择 awk 是出于历史原因——当时这个嵌入式平台上没有太多其他语言选项。
- 提前收集所有 URL 并传递给 wget 并不容易。
- 在 perl/python 等中重新实现不是一个快速的解决方案。
- 我已经研究过尝试将 url 传送到命名管道并进入 wget -i - ,但这是行不通的。数据被缓冲,并且 unbuffer 不可用 - 我认为 wget 在处理之前收集所有 URL 直到 EOF。
- 数据很小,因此缺乏压缩不是问题。