Windows Curl:安装与基本用法教程
在当今互联网高度互联的世界里,从命令行与各种网络服务交互是一项非常基础且强大的技能。无论您是开发者、系统管理员,还是仅仅对技术充满好奇的普通用户,掌握一个强大的命令行网络工具都大有裨益。在众多此类工具中,curl
无疑是最受欢迎、功能最全面的一个。
curl
是一个开源的命令行工具,用于通过各种协议(如 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, LDAPS, POP3, POP3S, SMTP, SMTPS, RTMP, RTMPS, RTSP, IMAP, IMAPS, FILE, SMB, SMBS, GOPHER)传输数据。它的设计宗旨是自动化,因此非常适合脚本编程,但也同样适合手动操作进行数据下载、上传、测试 API 等任务。
虽然 curl
源自 Unix/Linux 世界,但它在 Windows 系统上同样表现出色,并且随着 Windows 10 和 Windows 11 的发展,微软已经将其内置到系统中,这极大地简化了在 Windows 上使用 curl
的过程。
本文将为您提供一份详尽的 Windows 系统上 curl
的安装与基本用法教程。我们将从如何检查您的系统是否已内置 curl
开始,详细介绍几种安装方法(如果需要),然后深入探讨 curl
的各种基础但实用的用法,帮助您快速上手。
第一部分:检查与安装 Curl for Windows
在大多数现代 Windows 系统上,特别是 Windows 10 1803 版本及之后,curl
已经被内置。因此,您应该首先检查它是否已经存在,而无需自行下载安装。
1.1 检查 Curl 是否已内置
检查 Curl 是否已安装非常简单。您只需要打开 Windows 的命令提示符(cmd.exe
)、PowerShell 或 Windows Terminal,输入 curl --version
并按回车。
- 打开命令提示符: 按下
Win
键,输入cmd
,然后点击“命令提示符”或按回车。 - 打开PowerShell: 按下
Win
键,输入powershell
,然后点击“Windows PowerShell”或按回车。 - 打开Windows Terminal: 按下
Win
键,输入terminal
,然后点击“Windows Terminal”或按回车。
在打开的终端窗口中输入:
bash
curl --version
如果您的系统内置了 curl
或者之前已经安装过并将其添加到了系统环境变量 PATH
中,您会看到类似以下的输出(版本号和支持的协议列表会根据您的系统版本有所不同):
curl 7.55.1 (Windows) libcurl/7.55.1 Schannel zlib/1.2.11
Release-Date: 2017-11-14, security patched
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL zlib
如果看到类似上面的信息,恭喜您!curl
已经在您的系统上准备就绪,您可以跳过安装部分,直接进入基本用法。
如果您看到的是错误信息,例如 'curl' 不是内部或外部命令,也不是可运行的程序或批处理文件。
或者 The term 'curl' is not recognized...
,则表示您的系统尚未安装 curl
(或者没有将其添加到 PATH 环境变量中)。这时,您需要手动安装它。
1.2 安装 Curl for Windows (如果未内置)
有几种主要的方法可以在 Windows 上安装 curl
:
- 从官方网站下载并手动配置(推荐给希望了解细节或需要特定版本的用户)。
- 使用 Windows 包管理器 Winget(推荐给 Windows 10 2004+ 或 Windows 11 用户)。
- 使用第三方包管理器 Chocolatey(推荐给喜欢包管理器的用户)。
我们将详细介绍这几种方法。
方法一:从官方网站下载并手动配置
这是最“原始”的方法,让您完全掌控安装过程,但需要手动配置环境变量。
步骤详解:
-
访问 Curl 官方下载页面: 打开您的网页浏览器,访问 curl.se/download.html。
-
找到 Windows 版本: 在下载页面中,向下滚动找到 “Official builds” 或 “curl builds” 部分。在这里,您会看到各种操作系统和架构的构建版本。找到 “Windows” 部分。
-
选择合适的版本:
- 您需要选择适合您系统架构的版本:
Win64
(64位) 或Win32
(32位)。大多数现代电脑都是 64 位 (Win64
)。如果您不确定,可以右键点击“此电脑” -> “属性”,查看系统类型。 - 您还需要选择支持 SSL/TLS 的版本,这对于访问 HTTPS 网站至关重要。通常,选择带有 “schannel” 或 “OpenSSL” 字样的版本。
schannel
是 Windows 原生的 SSL 实现,通常是 Windows 版本的默认和推荐选项。 - 选择一个压缩格式,通常是
.zip
。
例如,您可能会选择一个链接类似于
https://curl.se/windows/dl-7.83.1/curl-7.83.1-win64-schannel.zip
的版本(请根据官网的最新版本选择)。点击链接下载.zip
文件。 - 您需要选择适合您系统架构的版本:
-
解压文件: 找到下载的
.zip
文件(通常在您的“下载”文件夹),右键点击它,选择“全部解压…”,然后选择一个您想要存放curl
程序的文件夹。一个常见的做法是将其解压到C:\Program Files\
或C:\Program Files (x86)\
下的一个新文件夹,例如C:\Program Files\curl
。为了后续方便,建议解压到一个路径中没有空格的目录,例如C:\curl
。 -
将 Curl 添加到系统 PATH 环境变量: 这是关键一步,它让您可以在任何目录下直接运行
curl
命令,而不需要每次都输入完整的路径。- 右键点击“此电脑”(在桌面或文件资源管理器中),选择“属性”。
- 在弹出的窗口中(根据 Windows 版本界面可能不同):
- Windows 10/11: 可能会看到一个“关于”页面,向下滚动或在左侧菜单找到“高级系统设置”。
- 旧版本 Windows: 直接在左侧或顶部找到“高级系统设置”。
- 点击“高级系统设置”。
- 在“系统属性”窗口中,切换到“高级”选项卡,点击底部的“环境变量(N)…”按钮。
- 在“环境变量”窗口中,找到下方的“系统变量(S)”列表。
- 在系统变量列表中,找到名为
Path
(或PATH
)的变量,选中它,然后点击“编辑(E)…”。 - 在编辑环境变量窗口中:
- Windows 10/11 的新界面: 点击“新建(N)”,然后输入您刚才解压
curl
可执行文件 (curl.exe
) 所在的目录路径。例如,如果您解压到了C:\curl\bin
,就输入C:\curl\bin
。然后点击“确定”。 - 旧版本 Windows 的旧界面: 在“变量值”文本框的末尾,添加一个分号
;
,然后输入您解压curl.exe
所在的目录路径。例如,如果解压到了C:\curl\bin
,变量值可能从C:\Windows\...
变成C:\Windows\...;C:\curl\bin
。注意不要删除已有的内容,只在末尾添加。然后点击“确定”。
- Windows 10/11 的新界面: 点击“新建(N)”,然后输入您刚才解压
- 连续点击所有打开的窗口中的“确定”按钮,直到关闭“系统属性”窗口。
-
验证安装: 重要! 关闭所有已经打开的命令提示符或PowerShell窗口。重新打开一个新的命令提示符或PowerShell窗口。再次输入
curl --version
。这次应该能成功显示版本信息了。如果仍然显示错误,请仔细检查 PATH 环境变量的设置是否正确,路径是否指向包含curl.exe
的那个文件夹。
方法二:使用 Windows 包管理器 Winget
Winget (Windows Package Manager) 是微软为 Windows 10 (1709+) 和 Windows 11 开发的官方包管理器。它提供了一种简单快捷的方式来查找、安装、升级、移除应用程序。如果您的 Windows 版本支持 Winget,这是安装 curl
的一个非常方便的方法。
步骤详解:
-
检查 Winget 是否已安装: 打开 PowerShell 或 Windows Terminal,输入
winget
并按回车。如果您看到 Winget 的使用说明,说明它已经安装。如果提示命令未找到,您可能需要更新您的 Windows 系统,或者从 Microsoft Store 安装 App Installer 应用,该应用包含了 Winget。 -
使用 Winget 安装 Curl: 在 PowerShell 或 Windows Terminal 中输入以下命令:
bash
winget install curl.curl
或简写为
bash
winget install curl -
确认安装: Winget 会查找
curl
包并提示您确认安装。按照提示操作即可。Winget 会自动下载并安装curl
,并通常会自动处理环境变量。 -
验证安装: 安装完成后,关闭并重新打开终端窗口,输入
curl --version
进行验证。
方法三:使用第三方包管理器 Chocolatey
Chocolatey 是 Windows 上一个非常成熟和流行的第三方包管理器,类似于 Linux 上的 apt
或 yum
。如果您已经安装了 Chocolatey,安装 curl
会非常方便。
步骤详解:
-
安装 Chocolatey (如果尚未安装): 如果您还没有安装 Chocolatey,请访问其官方网站 chocolatey.org 查看详细的安装步骤。安装 Chocolatey 通常需要在管理员权限的 PowerShell 中运行一条命令。
-
使用 Chocolatey 安装 Curl: 打开一个管理员权限的命令提示符或PowerShell窗口。输入以下命令:
bash
choco install curl -
确认安装: Chocolatey 会查找
curl
包并提示您确认安装。输入Y
并按回车即可。Chocolatey 会自动下载、安装curl
,并将其添加到系统 PATH。 -
验证安装: 安装完成后,关闭并重新打开终端窗口,输入
curl --version
进行验证。
总结安装: 对于大多数 Windows 10 1803+ 用户,curl
应该已经内置。如果需要安装,Winget 是最简便的官方方法,Chocolatey 是一个成熟的第三方选择,而手动下载并配置则提供了最大的灵活性。选择最适合您的方式即可。
第二部分:Curl 的基本用法
安装好 curl
后,我们就可以开始学习如何使用它了。curl
的功能非常强大,命令选项众多,但它的基本用法非常直观。
curl
命令的基本语法通常是:
bash
curl [选项] [URL]
[选项]
用于指定 curl
的行为,例如设置请求头、发送数据、保存文件等;[URL]
是您想要访问的网络资源的地址。
2.1 获取网页内容
最简单的用法是获取一个网页的 HTML 内容并将其打印到终端。
命令:
bash
curl <URL>
示例:
bash
curl https://www.example.com
执行此命令后,curl
会连接到 https://www.example.com
,获取其网页的 HTML 源代码,并将其显示在您的终端窗口中。
注意: 如果您访问的是一个没有 SSL 证书(即 HTTP 而非 HTTPS)的网站,直接使用 http://...
URL 即可。对于 HTTPS,curl
默认会验证服务器的 SSL 证书。如果证书有问题(例如自签名证书),curl
可能会拒绝连接。
2.2 将输出保存到文件
将网页内容或文件下载并保存到本地文件是 curl
的常见用途。有两种主要的方式:
-o <文件名>
(小写 o): 将远程资源保存为指定的文件名。-O
(大写 O): 根据远程资源的 URL 自动命名本地文件(通常是 URL 路径中的最后一个部分)。
命令:
bash
curl -o <本地文件名> <URL>
curl -O <URL>
示例 1:使用 -o
指定文件名
bash
curl -o example.html https://www.example.com
此命令会下载 https://www.example.com
的内容,并将其保存到当前目录下的 example.html
文件中。
示例 2:使用 -O
自动命名
假设 URL 是 https://example.com/images/logo.png
bash
curl -O https://example.com/images/logo.png
此命令会下载该图片,并将其保存到当前目录下的 logo.png
文件中。如果 URL 是 https://example.com/data/?id=123
,使用 -O
可能会保存为 ?id=123
或类似名称,这可能不是您想要的,因此对于复杂的 URL,通常更倾向于使用 -o
指定一个清晰的文件名。
您可以在同一个命令中使用多个 -O
来下载多个文件:
bash
curl -O https://example.com/file1.zip -O https://example.com/file2.zip
2.3 查看 HTTP 响应头
在调试网络请求时,查看服务器返回的 HTTP 响应头非常有用,它们包含了状态码(如 200 OK, 404 Not Found, 500 Internal Server Error)、内容类型、缓存信息、服务器信息等。
-I
(大写 i): 只发送 HEAD 请求并显示响应头。HEAD 请求类似于 GET,但服务器只返回头部信息,不返回实际内容,这比下载整个内容更高效。-i
(小写 i): 在显示响应内容之前,包含完整的响应头。
命令:
bash
curl -I <URL>
curl -i <URL>
示例 1:只看响应头
bash
curl -I https://www.example.com
输出可能类似:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Encoding: gzip
Content-Length: 648
Content-Type: text/html; charset=UTF-8
Date: Thu, 26 Oct 2023 10:00:00 GMT
Etag: "3147526947"
Expires: Thu, 02 Nov 2023 10:00:00 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (sac/10E3)
Vary: Accept-Encoding
X-Cache: HIT
示例 2:响应头和内容都看
bash
curl -i https://www.example.com
输出会先显示响应头,然后是一个空行,接着是网页的 HTML 内容。
2.4 处理重定向
许多网站在访问时会发生重定向(例如从 http://example.com
重定向到 https://www.example.com
)。默认情况下,curl
不会自动跟随重定向。如果您需要 curl
自动跟随重定向,可以使用 -L
选项。
命令:
bash
curl -L <URL>
示例:
bash
curl -L http://example.com
如果 http://example.com
重定向到 https://www.example.com
,curl
会先接收到 3xx 状态码和 Location 头,然后自动发起一个新的请求到 Location 指定的 URL。不加 -L
则 curl
接收到 3xx 响应后就会停止。
2.5 发送数据 (POST 请求)
curl
经常用于发送数据到服务器,例如提交表单或调用 RESTful API。最常见的是使用 POST 方法。
发送简单的表单数据: 使用 -d
或 --data
选项,后面跟要发送的数据。数据格式通常是 key1=value1&key2=value2
。
命令:
bash
curl -d "key1=value1&key2=value2" <URL>
示例:
bash
curl -d "username=admin&password=mypass" https://httpbin.org/post
httpbin.org
是一个用于测试 HTTP 请求的网站。访问 https://httpbin.org/post
并发送 POST 请求,它会将您发送的数据作为 JSON 格式返回。
发送 JSON 数据: 在 API 调用中, अक्सर 需要发送 JSON 格式的数据。除了使用 -d
之外,您还需要设置 Content-Type
请求头为 application/json
。使用 -H
或 --header
选项来设置请求头。
命令:
bash
curl -H "Content-Type: application/json" -d '{"key":"value", "number":123}' <URL>
示例:
bash
curl -H "Content-Type: application/json" -d '{"name":"curl_user", "action":"test_post"}' https://httpbin.org/post
从文件读取数据发送: 如果要发送的数据量较大或包含特殊字符,可以将其保存在文件中,然后使用 @
符号引用文件。
命令:
bash
curl -d @<数据文件名> <URL>
示例:
假设您有一个名为 data.json
的文件,内容是 {"message": "hello from file"}
。
bash
curl -H "Content-Type: application/json" -d @data.json https://httpbin.org/post
curl
会读取 data.json
的内容,并将其作为请求体发送。
2.6 发送其他 HTTP 方法 (PUT, DELETE 等)
默认情况下,如果您使用 -d
或 -T
选项,curl
会自动将请求方法设置为 POST 或 PUT。但您也可以使用 -X
或 --request
选项明确指定 HTTP 方法。
命令:
bash
curl -X <方法名> <URL>
示例:
发送 PUT 请求并上传文件:
bash
curl -X PUT -T <本地文件路径> <目标URL>
发送 DELETE 请求:
bash
curl -X DELETE https://example.com/resource/123
2.7 下载文件并显示进度
当下载大文件时,查看下载进度非常有用。curl
默认会显示一个简单的进度条。
命令:
bash
curl -O <URL>
或
bash
curl -o <文件名> <URL>
在下载过程中,您会看到类似以下的进度信息:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12.5M 100 12.5M 0 0 1234k 0 --:--:-- 0:00:10 --:--:-- 1546k
% Total
: 总进度。% Received
: 已接收数据的进度。Average Speed
: 平均下载速度。Time Left
: 预计剩余时间。
如果您不想要进度条,可以使用 -s
(silent) 选项:
bash
curl -s -O <URL>
2.8 恢复中断的下载
如果下载大文件时连接中断,您可以使用 -C -
选项尝试恢复下载。服务器需要支持范围请求 (Range Requests) 才能成功恢复。
命令:
bash
curl -C - -O <URL>
示例:
假设您正在下载 largefile.zip
,下载到一半中断了。再次运行:
bash
curl -C - -O https://example.com/largefile.zip
curl
会检查本地已经下载的部分,并告诉服务器从上次中断的地方继续传输。
2.9 设置请求头
除了 Content-Type
,您可能还需要设置其他请求头,例如 User-Agent
、Referer
、Cookie
或自定义头。使用 -H
选项。
命令:
bash
curl -H "Header-Name: Header-Value" <URL>
您可以指定多个 -H
选项来设置多个请求头。
示例:
模拟浏览器访问,设置 User-Agent:
bash
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" https://www.example.com
设置自定义 API Key 头:
bash
curl -H "X-API-Key: your_api_key_here" https://api.example.com/data
2.10 基本认证
对于需要基本认证的网站或 API,您可以使用 -u
或 --user
选项提供用户名和密码。
命令:
bash
curl -u username:password <URL>
示例:
bash
curl -u admin:secret https://example.com/restricted
curl
会自动将 username:password
进行 Base64 编码,并添加到 Authorization: Basic ...
请求头中。
2.11 忽略 SSL 证书错误 (慎用!)
有时您可能需要访问使用自签名证书或证书链不完整的 HTTPS 网站,而 curl
默认会验证证书导致连接失败。您可以使用 -k
或 --insecure
选项来禁用证书验证。
命令:
bash
curl -k <URL>
示例:
bash
curl -k https://self-signed.example.com
警告: 使用 -k
选项会使您的连接容易受到中间人攻击,因为它禁用了重要的安全检查。切勿在生产环境或处理敏感数据时随意使用此选项。 只有在您明确知道风险并用于特定调试目的时才考虑使用。
2.12 查看详细的连接过程
如果您想深入了解 curl
的连接过程,包括请求和响应的详细信息(如连接哪个IP、发送了哪些头、接收了哪些头、SSL握手过程等),可以使用 -v
或 --verbose
选项。
命令:
bash
curl -v <URL>
示例:
bash
curl -v https://www.example.com
这将输出大量的调试信息,对于排查网络问题非常有帮助。
2.13 设置连接和操作超时
在某些情况下,您可能希望限制 curl
等待连接或操作完成的时间,以避免无限期地等待。
--connect-timeout <秒>
:设置连接到服务器的最大等待时间。-m <秒>
或--max-time <秒>
:设置整个操作(包括连接、发送请求、接收数据)的最大允许时间。
命令:
bash
curl --connect-timeout 10 -m 30 <URL>
示例:
bash
curl --connect-timeout 5 -m 15 https://slow-api.example.com/data
这将在连接尝试超过 5 秒或整个操作超过 15 秒时取消请求。
2.14 使用代理
如果您需要通过 HTTP, HTTPS, SOCKS4, SOCKS5 代理访问网络,可以使用 -x
或 --proxy
选项。
命令:
bash
curl -x <代理地址>:<端口> <URL>
示例:
使用 HTTP 代理 http://myproxy.com:8080
:
bash
curl -x http://myproxy.com:8080 https://www.example.com
使用 SOCKS5 代理 socks5://myproxy.com:1080
:
bash
curl -x socks5://myproxy.com:1080 https://www.example.com
如果代理需要认证,可以在地址中包含用户名和密码:curl -x http://user:[email protected]:8080 ...
2.15 比较 Curl 与 PowerShell 的 Invoke-WebRequest
值得一提的是,Windows PowerShell 和新的跨平台 PowerShell 都内置了一个类似的 cmdlet 叫做 Invoke-WebRequest
(或者简称 iwr
),它也能用于发送 HTTP 请求。
Invoke-WebRequest
设计上更贴合 PowerShell 的对象和管道概念,返回的是一个对象,包含了状态码、头部、内容等属性,这使得在 PowerShell 脚本中处理响应非常方便。
然而,curl
作为跨平台工具,其语法和选项在几乎所有操作系统上都是一致的(除了少量系统相关的差异),并且它支持的协议和高级选项(如 FTP, SFTP, 高级认证,各种传输调优)远比 Invoke-WebRequest
丰富得多。
对于需要在不同操作系统之间移植脚本,或者需要使用 Invoke-WebRequest
不支持的协议或功能时,curl
是更好的选择。在 Windows 上,您可以根据具体需求选择使用 curl
或 Invoke-WebRequest
。对于熟悉 Linux 命令行的用户,curl
的语法会更亲切。
第三部分:Windows 环境下的额外提示
在使用 curl
for Windows 时,有一些Windows环境特有的注意事项:
-
命令提示符 (CMD) 与 PowerShell/Windows Terminal:
- CMD 对特殊字符(如
&
%
<
>
|
^
)有严格的转义规则,有时使用"
包围整个 URL 或数据字符串会更安全。例如,curl "http://example.com/?data=value1&data=value2"
。 - PowerShell 的字符串处理和转义规则与 CMD 不同,更接近 Linux shell。使用
'
单引号字符串可以防止变量扩展。JSON 字符串在 PowerShell 中需要小心处理引号,通常建议使用单引号包裹整个 JSON 字符串,并在内部使用双引号。 - Windows Terminal 是一个现代的终端应用,可以托管 CMD、PowerShell 或 WSL (Windows Subsystem for Linux),提供更好的体验。
- 如果您安装了 Git for Windows,它通常会包含 Git Bash,提供一个更类 Unix 的命令行环境,其中
curl
的行为和语法与 Linux 上几乎完全一致,这可能是习惯 Linux 的用户的首选。
- CMD 对特殊字符(如
-
环境变量 PATH: 确保包含
curl.exe
的目录正确添加到系统或用户 PATH 环境变量中,并且在修改 PATH 后重新打开终端窗口,新的 PATH 设置才会生效。 -
文件路径: 在 Windows 命令提示符中指定本地文件路径时,可以使用反斜杠
\
或正斜杠/
作为目录分隔符,两者通常都有效。例如-T C:\Users\User\myfile.txt
或-T C:/Users/User/myfile.txt
。 -
查找帮助:
curl
的帮助文档非常详尽。您可以使用curl --help
查看主要选项,或者curl --manual
查看完整的用户手册(这会在浏览器中打开 curl.se 的手册页)。
结论
curl
是一个极其强大和灵活的网络工具,无论在哪个操作系统上,它都是进行网络数据传输和交互的瑞士军刀。通过本文的学习,您应该已经掌握了在 Windows 系统上安装 curl
的多种方法,以及如何使用它进行基本的网页获取、文件下载、数据发送、查看头部、处理重定向等常见任务。
这仅仅是 curl
功能的冰山一角。随着您对网络请求和命令行操作的深入,您会发现 curl
还能用于 FTP、SFTP、LDAP 等更多协议,进行更复杂的认证、性能测试、脚本自动化等。
最好的学习方法是实践。打开您的 Windows 终端,尝试使用本文中介绍的各种命令,访问不同的网站和 API,观察它们的响应。随着您的熟练度提高,curl
将成为您日常工作中不可或缺的有力助手。
希望这篇详细教程对您有所帮助!现在,开始您的 Windows curl
之旅吧!