cURL 的用途
cURL 可直接在终端或脚本中发送网络请求,无需打开浏览器。常见用途包括:
- 使用 GET、POST 等 HTTP 方法调用 API。
- 检查响应头、重定向和状态码。
- 下载文件或静态 HTML,用于简单的数据采集。
- 测试网络连通性、TLS 证书和代理设置。
cURL 的命令行程序名为 curl。底层传输库名为 libcurl,许多应用也在使用它。
cURL 如何发送请求
只提供 URL 时,cURL 会发送 GET 请求:
curl -i -L \
-H "Accept: text/html" \
https://example.com/
加上 -i 会在输出中包含响应头,-L 则会跟随重定向。每使用一次 -H,就会添加一项 HTTP 请求头。cURL 默认把响应正文写入标准输出,因此可以重定向到文件,也可以通过管道传给其他程序。
遇到 HTTP 404 或 500 时,shell 退出码不一定表示失败。如果脚本需要将 HTTP 错误视为命令失败,同时保留响应正文,请使用 --fail-with-body。
如何通过代理使用 cURL
使用 -x 或 --proxy 指定代理:
curl -x http://USERNAME:PASSWORD@HOST:PORT \
-i https://example.com/
cURL 先连接代理,再由代理将请求转发到目标地址。通过 HTTP 代理访问 HTTPS URL 时,cURL 通常会创建 CONNECT 隧道,然后与目标地址建立 TLS 连接。
收到 407 需要代理认证 响应,说明代理拒绝了所提供的凭据,或没有收到有效凭据。可用 -v 查看连接详情,但分享详细日志前,务必检查其中是否含有凭据、Cookie 和 Authorization 请求头。
网页采集的局限
- 无法执行 JavaScript: cURL 会下载服务器响应,但不会执行 JavaScript 来渲染页面。如需采集浏览器渲染的页面,请使用 Playwright。
- 需手动管理会话: 使用
-c cookies.txt保存 Cookie,之后再用-b cookies.txt发送。 - 无法操作浏览器: cURL 无法点击控件、完成浏览器操作流程,也不能处理渲染后的 DOM。
- 不内置采集策略: 脚本必须控制请求频率、遵守 robots.txt,并按网站条款操作。
只更改 User-Agent 并不能让 cURL 像浏览器一样运行。网站还可能检查 TLS 相关信息、请求头、Cookie 和请求模式。
常见问题
cURL 能采集网站吗?
可以,适合采集静态 HTML、文件和 API。cURL 不会渲染客户端 JavaScript,因此动态页面通常需要浏览器自动化工具。
cURL 会自动使用代理吗?
通常不会。必须使用 -x 指定代理、配置 cURL 配置文件,或设置受支持的代理环境变量,例如 HTTPS_PROXY。
如何判断 cURL 是否已通过代理连接?
运行命令时加上 -v,检查连接信息中是否显示代理的主机和端口。对于 HTTPS 目标地址,输出通常还会显示用于建立隧道的 CONNECT 请求。