【问题标题】:Using CURL to download file and view headers and status code使用 CURL 下载文件并查看标题和状态码
【发布时间】:2012-08-06 21:29:40
【问题描述】:

我正在编写一个 Bash 脚本来从 Snapito 的网页快照 API 下载图像文件。 API 可以返回由不同 HTTP 响应代码和/或一些自定义标头指示的各种响应。我的脚本旨在作为自动 Cron 作业运行,该作业从 MySQL 数据库中提取 URL 并将屏幕截图保存到本地磁盘。

我正在使用curl。我想用一个 CURL 命令来做这 3 件事:

  1. 提取 HTTP 响应代码
  2. 提取标题
  3. 在本地保存文件(如果请求成功)

我可以使用多个curl 请求来做到这一点,但我想尽量减少访问 Snapito 服务器的次数。有没有curl 的专家?

或者,如果有人有一个可以响应完整记录的 Snapito API 响应集的 Bash 脚本,那就太好了。这里是their API documentation

谢谢!

【问题讨论】:

  • 你可以解析输出,但我想这在 python/ruby/php/... 中更容易

标签: bash curl


【解决方案1】:

使用转储头选项: curl -D /tmp/headers.txt http://server.com

【讨论】:

  • 啊,是的。我忽略了-D 选项。这是我现在使用的:curl -s -L -D /dev/stdout -o $IMAGE_FILE $SNAPITO_URL 谢谢!
  • curl -s -L -D - -o $IMAGE_FILE $SNAPITO_URL
【解决方案2】:

使用curl -i(包括 HTTP 标头)- 这将产生标头,后跟一个空行,然后是内容。

然后您可以拆分标题/内容(或使用 -D 直接保存到文件,如上所述)。


共有-i-I-D三个选项

> curl --help | egrep '^ +\-[iID]'
 -D, --dump-header FILE  Write the headers to FILE
 -I, --head          Show document info only
 -i, --include       Include protocol headers in the output (H/F)

【讨论】:

  • 我认为您考虑的是-I 选项,而不是-i
  • 不。 -I 只是标题,-i 是标题+内容。
  • 我明白了,你是对的。不过,使用-i 会给我带来另一个问题:解析输出以从二进制图像数据中分离出标题。我使用路由到标准输出的-D 选项(并由$() 包装器捕获)和用于保存文件的-o 选项很好地工作。不过谢谢!下次记得去-i看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 2014-04-06
相关资源
最近更新 更多