文本文件被识别为二​​进制

文本文件被识别为二​​进制

背景

lynx几年来我一直使用自动转储(通过 cron)、处理(使用awksedtr),然后mail(bsd-mailx)网页内容。它一直运行得很好——直到最近,当网站安全证书过期并且愚蠢的网络管理员懒得更新它时。现在,由于lynx对证书犹豫不决并在继续之前等待用户输入,自动化解决方案失败了。

尝试的解决方案

所以我开始寻找其他解决方案。curl看起来很有希望,因为它有一个--insecure开关。事实上,使用它,我可以下载页面文本,并将其进一步处理为更标准的文本输出,可以进入电子邮件正文,然后将其保存到文件中。

然而,我遇到的问题是,该文件在某种程度上被系统视为charset=binary(根据 的输出file -i)——可能是因为它包含非拉丁字母(西里尔字母)中的文本。因此,当我尝试将cat文件内容放入我发送给自己的电子邮件正文中时,邮件程序(bsd-mailx)希望将其视为附件 - 这不是我想要的 - 而不是将其插入到电子邮件的正文。

由于我很难理解所涉及的所有问题,所以到目前为止我还没有找到解决方案。

问题

  • 有什么方法可以导致文件不保存/识别为二进制文件吗?
  • 或者以某种方式将其从二进制转换为某种有效的字符集?

    • 请注意,如果我将文件的内容复制到剪贴板,然后将其粘贴到一个新的文本文件中,我创建的一切都有效:file -i显示charset=utf-8,并且我可以成功地将cat内容放入电子邮件正文中,而不会将其视为附件。但我正在寻找可以作为 cron 作业自动化的东西,所以这并不是我真正希望的解决方案。

附:我记得在 下也遇到过类似的问题,但通过在调用 时lynx添加开关来解决,IIRC 。-display_charset=UTF-8lynx

更新

在这里,使用卢卡斯的建议,是有效的: 一个相当笨拙的两阶段过程,我确信一定有简单的方法来简化并使其更加优雅,但它确实完成了工作。任何人都可以提供改进吗?显然,和是我正在使用的实际和命令的替代品,它们主要是去除 html 标签和无关的空格。
curl --insecure https://my.url.html >/home/user/file.html lynx -display_charset=UTF-8 -dump -nonumbers -nolist /home/user/file.html | sed fu begin | sed fu end | tr fu >/home/user/file.txt cat /home/user/file.txt | mail -s "Today's file" [email protected]
sed futr fusedtr

答案1

使用 HTTPie 代替curllynx。此 HTTP 客户端可以--verify no选择跳过 SSL 证书验证。使用 HTTPie 非常简单:

http --verify no -F https://google.com

另请参阅HTTPie 网站还有一些很好的例子使用的。有关 HTTPie 选项的更多信息:

man http

相关内容