发布于 2026-01-06 11 阅读
0

精通 Curl:从初级到高级调试技能

精通 Curl:从初级到高级调试技能

调试就是提出关于导致 bug 的原因的假设,然后验证这些假设的过程。初级开发人员和高级开发人员之间最大的区别之一就是,高级开发人员的调试能力要强得多。他们更能准确地判断 bug 的根源,也更有办法验证他们的假设。

如果你是一名全栈工程师或后端工程师,调试服务器是你的工作内容之一。很多情况下,你只有向服务器发送请求才能调试 API 服务器。有很多方法可以做到这一点:在浏览器中使用 fetch,使用第三方应用程序,或者使用 .NET Framework cURL。我认识的许多优秀工程师都能cURL轻松使用 .NET Framework。虽然熟练使用 .NET Framework 并非成为一名优秀工程师的必要条件,但如果你能熟练运用,绝对有助于提升你的调试技能。在本文中,我将提供一份关于如何开始使用 .NET Framework 的实用指南cURL

Fetch 或 Postman 有什么问题?

有些人可能会疑惑,为什么在 2020 年还需要使用命令行工具。我之前用过 Postman,也承认它是一款很棒的应用。特别是它能保存请求历史记录,这确实是一个很实用的功能。然而,它也有一个很大的局限性。你无法在 Kubernetes 集群、虚拟机或 Docker 容器中轻松使用它。有时你必须登录到另一台机器,从那里发送请求。在这种情况下,你无法轻易使用 fetch 或其他第三方应用。另一方面,你只需一条命令即可安装 cURL 并立即开始使用。cURL 还支持多种协议,例如 FTP 和 SMTP,以及 HTTP/HTTPS 协议。如果你只需要学习一种方法,那么最好学习一种可以在任何情况下都适用的方法。

使用浏览器的网络选项卡

如果您是 cURL 新手,想要阅读文档,可以直接man curl在命令行输入命令。但是,如果您不喜欢阅读文档,更倾向于立即开始使用工具,则可以通过浏览器快速上手 cURL:

  1. 转到要调试的页面
  2. 打开浏览器的开发者工具
  3. 转到网络选项卡
  4. 将鼠标悬停在要获取cURL命令的网络请求上
  5. 右键单击网络并选择“复制为 cURL”

替代文字
将请求复制为 cURL 格式后,粘贴到命令行中。你会看到类似下图的内容。 按下回车键,即可发送请求。仔细观察命令,你会发现每一行后面都跟着 ` <header>`,它代表一个头部属性。调试时,除了少数几个我稍后会详细介绍的头部属性外,大多数头部属性都不需要。在这种情况下,你可以将 cURL 命令简化为 `<header>`,它就能完美运行。对于想要使用 cURL 命令但又不太熟悉的初学者,这里有一个通用技巧:从浏览器中复制请求为 cURL 命令,然后删除不必要的头部属性来简化命令。
替代文字
-Hcurl 'https://www.google.com/'

cURL 的基本用法

现在您知道如何开始使用了cURL,那么让我们来看看的基础知识cURL,这样您就不必每次都从浏览器复制请求了。

GET 请求

第一个用例是发送 GET 请求,这非常简单。
替代文字

POST、PUT 和 PATCH 请求

现在我们来看一个发送包含身体按摩请求的情况。实现方法有很多种,服务器的具体实现方式决定了你可以使用哪种方法。

1:当服务器接受application/json

如果服务器接受 JSON 格式,您可以通过将标头属性设置Content-Type为 来发送 JSON 数据application/json
替代文字

2:当服务器接受application/x-www-form-urlencoded

另一种常用的发送带有请求体的方法是使用 .x-www-form-urlencoded格式。您要发送的数据将以 . 格式传输key1=value1&key2=value2
替代文字

3:当服务器接受multipart/form-data

使用上述两种方法发送请求时,一次只能发送一种数据类型。但是,服务器可以接受多种数据类型。例如,当需要上传文件时multipart/form-data,通常就需要上传文件。使用 `--data` 标志时,需要指定数据类型-F。要上传文件,需要@在文件路径开头添加 `--file`。 虽然还可以指定更多内容类型,但了解这三种类型足以应对大多数用例。有时,请求体过长,无法直接在命令行输入。在这种情况下,可以让服务器从文件中读取数据。稍后我会详细介绍这一点。
替代文字

验证

另一个常见的用例是发送授权信息。许多服务都设有身份验证系统,要求用户获得授权才能发出特定请求。当您通过浏览器发出请求时,您的授权信息通常会以 cookie 的形式存储并附加到请求中。但是,如果您在浏览器之外发出请求,则需要将授权信息附加到请求中。具体采用哪种方法取决于服务器上身份验证系统的实现方式。

基本身份验证

基本身份验证是最流行的身份验证系统之一。它们会发送经过 Base64 编码的用户凭据。请求authorization头中包含用户名和密码的编码值。使用 cURL 时,无需自行对用户凭据进行编码,因为如果您添加-u如下标志,curl 会自动完成编码。
替代文字

持有者认证

Bearer 认证主要用于 OAuth 2.0,OAuth 2.0 是代表用户发送请求的应用程序的行业标准。例如,GitHub 应用会在用户执行特定操作时向 GitHub API 服务器发送请求,这就是一个 OAuth 2.0 的例子。Bearer 令牌通常由服务器在用户完成身份验证后生成。获得 Bearer 令牌后,您可以发送cURL如下请求。
替代文字

如果使用上述方法无法正确进行身份验证,本页面将详细介绍如何使用 cURL 进行身份验证。您可能需要按照页面上的说明传递可选标志。

高级用法

现在你已经知道如何使用 `.` 发送请求了cURL。一旦你熟悉了它,就可以快速编写命令来发送请求。然而,实际上,你需要了解更多才能cURL像专业人士一样进行调试。以下是一些我在调试服务器时非常有用的高级用法。

避免 SSL 证书错误

当您使用 HTTPS 发送 cURL 请求时,它会执行 SSL 证书验证。但是,如果您的服务器没有由证书颁发机构 (CA) 签名的证书,则您的 cURL 命令将失败。这种情况通常发生在您向使用自签名 SSL 证书的服务器发送请求时。如果您想了解有关 SSL 的详细信息,CloudFlare 提供了一篇很好的文章。您可以通过传递一个-k标志来禁用证书验证。
替代文字

将消息正文的内容写入文件并传递该文件

您的消息正文可能过长,无法全部写入命令行。您可能需要保存内容以进行调试。在这种情况下,您可以将消息正文写入文件,然后将文件内容作为消息正文发送。有两种略有不同的方法:上面的方法会去除文件中的所有换行符,下面的方法则不会。请根据您的具体使用场景选择合适的方法。
替代文字

对服务器进行压力测试

cURL 也可以用来对服务器进行压力测试。我遇到过这样一个 bug:当服务器请求较少时,程序运行正常;但当请求量很大时,程序就会崩溃。在这种情况下,cURL 就派上用场了。你可以用它[]创建动态 URL,模拟压力测试。下面的程序会发送 1000 次请求。
替代文字

cURL 的功能远不止这些,但现在你可能已经掌握了足够的知识,可以自己去探索它了!如果你想了解更多关于 cURL 的信息,只需man curl在命令行中输入命令即可。掌握 cURL 将帮助你更快地进行调试。


如果您喜欢这篇文章,请点赞并分享到您常用的社交媒体平台。您可以在这里订阅,以便在新文章发布时收到邮件通知。我的推特账号是@mkinoshita12。如有任何疑问,欢迎随时联系我:makoto@antcode.dev

如果你好奇Antcode是什么,可以点击这里查看

文章来源:https://dev.to/mkinoshita12/mastering-curl-going-from-junior-to-senior-level-debugging-skills-5d80