You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用curl下载指定版本DICOM文件遇301重定向404问题求助

问题描述

我正在编写脚本,通过curl命令行下载文件。根据相关资料,使用-L参数应该能跟随301重定向,但在Ubuntu 22.04.1系统中执行以下命令:

$ curl -s -L "https://dicom.nema.org/medical/dicom/2023c/source/docbook/part15/part15.xml" | head -5 | tail -1
<title>404 - File or directory not found.</title>

返回404错误。

而在Chrome浏览器中,访问链接https://dicom.nema.org/medical/dicom/2023c会重定向至https://dicom.nema.org/medical/dicom/current,直接访问该重定向后的链接可成功下载对应文件:

$ curl -s -O "https://dicom.nema.org/medical/dicom/current/source/docbook/part15/part15.xml"

现需实现通过版本变量下载任意版本文件,例如:

$ VERSION=2023c curl "https://dicom.nema.org/medical/dicom/${VERSION}/source/docbook/part15/part15.xml"

附curl版本信息:

$ curl --version
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.13
Release-Date: 2022-01-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd
解决方案

问题出在服务器的重定向规则:仅当访问版本目录(如/medical/dicom/2023c/)时才会返回301重定向到current,而直接访问目录下的具体文件路径时,服务器不会触发重定向,直接返回404。

可以通过以下步骤实现动态版本下载:

  1. 先请求版本目录,获取最终重定向后的基础URL
  2. 用该基础URL拼接目标文件路径,执行下载

具体脚本示例:

# 设置目标版本
VERSION=2023c

# 获取重定向后的基础目录URL,末尾保留斜杠确保目录识别
BASE_DIR=$(curl -s -L -o /dev/null -w "%{url_effective}" "https://dicom.nema.org/medical/dicom/${VERSION}/")

# 拼接文件路径并下载
curl -O "${BASE_DIR}source/docbook/part15/part15.xml"

命令参数说明

  • -s:静默模式,不输出进度信息
  • -L:跟随重定向
  • -o /dev/null:丢弃响应内容,只关注最终URL
  • -w "%{url_effective}":输出curl最终访问的有效URL

这样就能自动适配版本目录的重定向规则,实现通过版本变量下载对应文件。

内容的提问来源于stack exchange,提问作者malat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:07:22