跳至正文
中文
立即开始

cURL

cURL 是一种通过 URL 传输数据的命令行工具。开发者用它调用 API、下载网页、测试请求头和排查代理问题。

文章目录(8 个章节)

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 请求。

相关术语

查看全部术语