如何使用 cURL 发起 REST API 请求

探索如何使用 cURL 进行诸如 GET、POST、PUT 和 DELETE 等 REST API 请求,并借助 Web Unlocker 代理来提高效率。
3 min read
如何在 REST API 中使用 cURL 博客图片

cURL 已经在命令行 HTTP 客户端领域活跃了几十年。它被开发者和管理员广泛应用在各种 Web 开发场景中,比如测试 API、获取网页以及文件传输。在网页抓取中,我们主要使用 cURL 来测试 HTTP 请求。

REST(Representational State Transfer)是一种用于创建 API 的标准。在 REST API 中,服务器会配置来处理四种基本请求:GETPOSTPUTDELETE。这些方法都用于与 Web 服务器进行交互。我们会在本文中详细介绍它们。

开始使用

安装

如今 cURL 在大多数主流操作系统上都自带安装。它在 Linux 系统上已经存在很多年,macOS 和 Windows 现在也默认包含它。你可以使用以下命令来检查 cURL 是否已经安装。

curl --version

如果 cURL 安装正确,你会看到类似下面的输出。最重要的是,--version 命令应该会输出一个版本号。下方示例的版本号是 curl 7.81.0。剩下的输出是版本和操作系统等具体信息。

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.18
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

如果你的系统中没有安装 cURL,可以在他们的下载页面这里找到与你的操作系统匹配的版本。

<!–

  • 如何安装 curl:简短说明,链接到对应操作系统的安装指南
    –>

如何使用 cURL

发送 GET 请求

最常见的 HTTP 请求方式是 GET 请求。我们使用 GET 来“获取”信息。当你在浏览器中访问网页时,其实浏览器在底层使用的就是 GET。在 cURL 中,可以使用 GET 标志来执行该请求。下面的示例向 https://jsonplaceholder.typicode.com/posts 发送一个 GET 请求。

curl -X GET https://jsonplaceholder.typicode.com/posts

执行该请求后,我们会“获取”文章列表作为响应。下面只展示了响应内容的一部分:

{
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
    "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
  },
  {
    "userId": 1,
    "id": 4,
    "title": "eum et est occaecati",
    "body": "ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\nquis sunt voluptatem rerum illo velit"
  },
  {
    "userId": 1,
    "id": 5,
    "title": "nesciunt quas odio",
    "body": "repudiandae veniam quaerat sunt sed\nalias aut fugiat sit autem sed est\nvoluptatem omnis possimus esse voluptatibus quis\nest aut tenetur dolor neque"
  },

<!–

  • 什么是 GET 请求?
    –>

发送 POST 请求

当我们想要向服务器发送信息并保存到数据库时,就会使用 POST 请求。最常见的例子就是在社交媒体上发表帖子。下面的示例通过 POST 创建一条新帖子:

curl -X POST https://jsonplaceholder.typicode.com/posts \
     -H "Content-Type: application/json" \
     -d '{
           "title": "foo",
           "body": "bar",
           "userId": 1
         }'

发送请求后,我们会收到包含该新帖子对象的响应:

{
  "title": "foo",
  "body": "bar",
  "userId": 1,
  "id": 101
}

如果你想了解更多关于如何发送更复杂的 POST 请求,可以参阅这篇指南

发送 PUT 请求

正如你所了解到的,POST 请求通常用来在数据库中创建对象。有时我们想要修改数据库中已经存在的对象,这时就需要使用 PUT 请求。下面的示例将之前新帖子中的 bodybar 更新为 updated bar

curl -X PUT https://jsonplaceholder.typicode.com/posts/1 \
     -H "Content-Type: application/json" \
     -d '{
           "id": 1,
           "title": "foo",
           "body": "updated bar",
           "userId": 1
         }'

执行后,你会收到下面的响应。可以看到,我们帖子的 body 已被更新。

{
  "id": 1,
  "title": "foo",
  "body": "updated bar",
  "userId": 1
}

发送 DELETE 请求

DELETE 请求的作用应该很直观了:它用于通过唯一标识符删除数据库中的对象。在这里,我们使用的标识符(id)是 1,也就是第一篇帖子。下面的代码会删除之前创建的帖子:

curl -X DELETE https://jsonplaceholder.typicode.com/posts/1

可以看到,响应只返回了一个空的 JSON 对象。这意味着这篇帖子已经被删除。

{}

在 cURL 中使用 Web Unlocker

Web Unlocker 产品页面

当你将 cURL 与 Web Unlocker 结合使用时,你可以像单独使用 cURL 一样发起 HTTP 请求。然而,Web Unlocker 提供了代理的强大功能。

借助 Web Unlocker,你可以获得地理位置定位以及验证码(CAPTCHA)自动解决等功能,这些都来源于全球顶级的代理资源,而且这些代理都由平台替你管理。你只需要配置代理,就能像平时一样继续工作。

当你配置好 Web Unlocker 后,记得保存你的用户名、区域名(zone)和密码,它们用来验证你的连接。下面的示例中,我们设置了使用美国地区的代理:

curl -i --proxy brd.superproxy.io:33335 --proxy-user brd-customer-<YOUR_USERNAME>-zone-<YOUR_ZONE_NAME>-country-us:<YOUR_PASSWORD> -k "https://geo.brdtest.com/mygeo.json"
  • -i:告诉 cURL 在响应中包含头部信息,这对调试非常有帮助。
  • --proxy brd.superproxy.io:33335 --proxy-user brd-customer-<YOUR_USERNAME>-zone-<YOUR_ZONE_NAME>-country-us:<YOUR_PASSWORD>
    • --proxy brd.superproxy.io:33335:告诉 cURL 使用位于 brd.superproxy.io:33335 的代理。
    • --proxy-user brd-customer-<YOUR_USERNAME>-zone-<YOUR_ZONE_NAME>-country-us:<YOUR_PASSWORD>:这是我们的认证字符串。认证信息格式为:<用户名>:<密码>。在使用 Web Unlocker 时,你的完整用户名包括:brd-customer-<YOUR_USERNAME>-zone-<YOUR_ZONE_NAME>-country-us
  • -k 用来告诉 cURL 我们要忽略 SSL 证书验证。如果你打算长期使用 Web Unlocker,你可以在这里下载并安装 SSL 证书,让你的机器自我验证连接。

下面是我们的示例响应。可以看到我们的地理位置显示在 New Jersey(新泽西州)。

{"country":"US","asn":{"asnum":20473,"org_name":"AS-VULTR"},"geo":{"city":"Piscataway","region":"NJ","region_name":"New Jersey","postal_code":"08854","latitude":40.5511,"longitude":-74.4606,"tz":"America/New_York","lum_city":"piscataway","lum_region":"nj"}}

如果你想了解更多关于 Web Unlocker 的信息,可以查看我们的 API Playground。这是一个非常好的场所来尝试和学习如何用多种语言和 HTTP 库发起 API 请求。你也可以在这里了解更多关于在 cURL 中使用代理的内容。

从 cURL 开始,你能走多远?

一旦你对 cURL 和 HTTP 有了不错的理解,就可以在各种场景中使用 HTTP。你可以使用图形化界面(GUI)工具,比如PostmanInsomnia来做一般的 API 测试。

在 Python 中,你可以使用Requests,或者直接在 Python 中使用 cURL。在 JavaScript 中,可以使用Node-Fetch或者Axios 来自动化你的 HTTP 请求。

如果你更愿意继续使用命令行工具,还有很多其他选择。你可以看看 HTTPiewget。这两个工具也都非常优秀,在命令行中使用它们来处理 HTTP 十分方便。

结论

作为 HTTP 客户端,cURL 在命令行领域已经是数十年的标准,而且短期内不会改变。无论你是开发者还是系统管理员,现在你已经掌握了基本的 cURL 用法,以及对 HTTP 有了大致的理解。你甚至可以使用 cURL 下载文件,或自定义请求头。如今你也知道如何将它与 Web Unlocker 结合使用,那么无论你要处理什么工作,你都能有效地使用 HTTP。如果你是一位渴望成长的开发者,可以进一步学习如何在你所使用的语言中操作 HTTP。