为什么我使用curl得到二进制输出

为什么我使用curl得到二进制输出

不确定是否可以分享我试图获取其来源的网站,但我认为有必要更好的解释。如果没有提前,我深表歉意

命令: curl -k -L -s https://www.mi.com

由于某种原因,输出是二进制数据,出现以下错误

Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.

如何阅读页面 HTML 源代码?谢谢!

答案1

返回的数据是压缩的,您可以curl通过添加以下命令直接处理解压--compressed选项:

curl -k -L -s --compressed https://www.mi.com

答案2

只需将其重定向到文件,然后您就可以调查它是什么:

curl -k -L -s https://www.mi.com > outFile

您现在可以使用该file命令查看outFile包含的内容:

$ file outFile 
outFile: gzip compressed data, from Unix, original size modulo 2^32 135402

所以,您刚刚下载了压缩数据。要查看它,请解压缩:

mv outFile outFile.gz ## gzip requires the .gz extension
gunzip outFile.gz

或者只是使用可以处理压缩数据的工具,例如zmore

zmore outFile

或者zcat

zcat outFile

答案3

Use "--output -" to tell Warning: curl to output it to your terminal anyway

curl -k -L --output - s https://www.mi.com

--output file将其保存到类似的文件中

curl -k -L --output filename s https://www.mi.com

并使用您最喜欢的编辑器检查该文件。

答案4

如果您不知道什么格式二进制输出是否会更安全检查输出格式第一的。

否则,正如您已经使用的那样-s,对于批处理/自动化脚本等静默模式,您可以直接通过管道连接到合适的二进制转换器。

或者,假设 HTTP 输出已被压缩,只需解压它

检查二进制卷曲输出

  1. 使用-I仅查看响应标头并查看Content-给定的标头媒体类型(也称为MIME类型) 表示(二进制)格式:
curl -k -L -s https://www.mi.com -I

例如,curl -k -L -s https://www.mi.com -I | grep Content-还将显示其他输出元数据,例如编码(例如 UTF-8)、字节长度(此处为 169747 字节,重定向后):

内容类型:text/html

内容长度:223

内容类型:文本/html;字符集=utf-8

内容长度:169747

注意:上面的HTTP请求被重定向,因此我们从curl获得2个响应和2个响应头。第一个来自重定向,第二个来自最终输出。

  1. 通过管道type检查二进制数据类型(文件类型):
curl -k -L -s https://www.mi.com | type
  1. 使用-o或者--output保存到文件:
curl -k -L -s https://www.mi.com -o outFile

相似> outFileterdon 建议的重定向

传递二进制输出(例如传递到图像查看器)

您还可以使用管道将响应标头指示的图像传递Content-Type: image/x-icon给接受标准输入的查看器,例如feh显示它:

curl -k -L -s https://www.mi.com/favicon.ico | feh

解压curl输出

二进制输出可能是以下结果HTTP 压缩通常用于节省带宽和加快传输速度。

  1. 管道输送至zcat直接解压查看:
curl -k -L -s https://www.mi.com | zcat

如果curl的输出未按预期压缩,将显示以下警告:

gzip: stdin: 不是 gzip 格式

作为特登互动解释

  1. 使用--compressed:
curl -k -L -s https://www.mi.com --compressed

作为斯蒂芬已经回答了

相关内容