
Python语言调用免费查询ip地址API
阅读并练习本文后,您将了解如何使用 cURL 执行带有 GET 方法的 API 调用。您将知道何时使用 cURL 而不是 Postman 来测试 API。
在阅读和练习本文之前,请确保你已经阅读并练习了我的第 1 部分文章: 如何使用 Postman 发出基本的 API 请求。
cURL 是一个可以在大多数命令行界面 (CLI)(如 Windows 命令提示符、Windows Powershell、MacOS 终端、Linux 终端)上调用 API 的命令。它是 Windows 和 MacOS 上的默认命令,但您可能需要安装其他软件包才能在 Linux 终端上使用。这意味着您可以使用 cURL 作为 Postman 的替代品来测试 API。
由于以下原因,您可能希望使用 cURL 而不是 Postman:
本文将使用 Poke API(一种公共 REST API)进行演示。Poke API 用于与公共 Pokemon 数据库进行交互。我使用 Pokemon 资源(什么是资源?请参阅后面的解释)。Poke API 文档在此处: 文档 — PokéAPI
API 文档的结构: 请熟悉如何阅读第 1 部分文章的 3.1 节中的 API 文档。那里提供了有关 PokeAPI 文档的一个例子。
要使用 API,我们需要一个工具来发出 API 请求。最流行的工具是:
我将在本演示中使用 cURL。请打开您的 OS 终端以使用 cURL
通过在 OS 终端中输入并按 Enter 来测试 cURL 是否已安装在您的机器上 curl --version
。输出将显示当前安装的 cURL 版本,如下所示(以下是 Linux 上的 cURL)。
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3 Release-Date: 2020-01-08 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets
要发出 API 请求,您至少需要 3 个输入:
当您查看 Pokemon 表 时,您将看到有关端点和方法的以下信息:
在图片中,你可以看到方法是 GET 。端点是 https://pokeapi.co/api/v2/pokemon
后一部分 {id or name}
,称为路径参数。路径参数可以是必需的,也可以是可选的。对于 Poke API,它是可选的。你怎么知道的?它在 资源列表/分页部分 中提到。(调用任何没有资源 ID 或名称的 API 端点将…)
我们需要的最后一个输入是授权。像这样的公共 API 意味着任何人都可以在未经授权的情况下使用它。因此授权方法是 No Auth。
总而言之,以下是我们将用来从 Pokemon 表中获取数据的输入:
您可以在第 1 部分文章的术语部分中看到更多类型的授权。
让我们根据上面的输入构建 cURL 命令
curl [OPTIONS] [URL]
curl https://pokeapi.co/api/v2/pokemon
-X
(简称 ) --request
,并在其后加上 GET。所以我们有 curl -X GET https://pokeapi.co/api/v2/pokemon
No Auth
,则您不必在命令中提供其他信息所以我们的最终命令是 curl -X GET https://pokeapi.co/api/v2/pokemon
。让我们将其输入到我们的 OS 终端并按 Enter 键查看输出。这是我在 Linux 和 Windows 机器上的成功输出(我对其进行了一些格式化以使其看起来更漂亮)。
{ "count":1281, "next":"https://pokeapi.co/api/v2/pokemon?offset=20&limit=20", "previous":null, "results":[ { "name":"bulbasaur", "url":"https://pokeapi.co/api/v2/pokemon/1/" }, { "name":"ivysaur", "url":"https://pokeapi.co/api/v2/pokemon/2/" }, { "name":"venusaur", "url":"https://pokeapi.co/api/v2/pokemon/3/" }, { "name":"charmander", "url":"https://pokeapi.co/api/v2/pokemon/4/" }, { "name":"charmeleon", "url":"https://pokeapi.co/api/v2/pokemon/5/" }, { "name":"charizard", "url":"https://pokeapi.co/api/v2/pokemon/6/" }, { "name":"squirtle", "url":"https://pokeapi.co/api/v2/pokemon/7/" }, { "name":"wartortle", "url":"https://pokeapi.co/api/v2/pokemon/8/" }, { "name":"blastoise", "url":"https://pokeapi.co/api/v2/pokemon/9/" }, { "name":"caterpie", "url":"https://pokeapi.co/api/v2/pokemon/10/" }, { "name":"metapod", "url":"https://pokeapi.co/api/v2/pokemon/11/" }, { "name":"butterfree", "url":"https://pokeapi.co/api/v2/pokemon/12/" }, { "name":"weedle", "url":"https://pokeapi.co/api/v2/pokemon/13/" }, { "name":"kakuna", "url":"https://pokeapi.co/api/v2/pokemon/14/" }, { "name":"beedrill", "url":"https://pokeapi.co/api/v2/pokemon/15/" }, { "name":"pidgey", "url":"https://pokeapi.co/api/v2/pokemon/16/" }, { "name":"pidgeotto", "url":"https://pokeapi.co/api/v2/pokemon/17/" }, { "name":"pidgeot", "url":"https://pokeapi.co/api/v2/pokemon/18/" }, { "name":"rattata", "url":"https://pokeapi.co/api/v2/pokemon/19/" }, { "name":"raticate", "url":"https://pokeapi.co/api/v2/pokemon/20/" } ] }
注意:cURL 的默认 API 调用方法已经是 GET,因此您实际上不必提供
-X GET
选项部分。因此该命令可以缩写为:curl https://pokeapi.co/api/v2/pokemon
。但是记住此选项很有用,因为您将来可能想要使用 POST 方法,因此下面的命令仍将保留该-X GET
选项。
恭喜,您刚刚使用 cURL 对 PokeAPI 进行了 API 调用!
路径参数定义在 3.2.2 节中提到。路径参数通常用于获取单个对象的详细信息。
例如,您想要获取有关特定 Pokemon(如 Pikachu)的详细信息。您可以使用“pikachu”作为路径参数并插入到端点中。
要查看有关皮卡丘的具体详细信息,我们的 API 请求的输入是:
让我们在 cURL 中编辑端点。cURL 命令现在如下所示:
curl -X GET https://pokeapi.co/api/v2/pokemon/pikachu
让我们复制它,输入到我们的 OS 终端并按回车键进行 API 调用。
输出内容很长,所以我就不放在这里了。它包含有关皮卡丘的能力和许多其他内容的详细信息。
如您所见,更改路径参数就像编辑 API 端点一样简单。
API 可以提供一种方法来过滤、排序和限制返回的数据。该方法通常是通过查询参数来实现的。有些文档将查询参数仅称为参数。因此,很容易将查询参数与路径参数混淆。
对于 Poke API,只有几个查询参数。其中一个允许 API 请求限制返回的记录数。它在 资源列表/分页部分 中描述。
根据描述,您可以添加一个名为“limit”的查询参数和我们想要的记录数,API 将仅返回指定数量的记录。 例如,您想获取 Pokemon 表上的前 2 个 pokemon。那么我们的 API 请求的输入将是:
好的,这部分有点棘手,所以请耐心等待。
limit=2
https://pokeapi.co/api/v2/pokemon?limit=2
curl -X GET https://pokeapi.co/api/v2/pokemon?limit=2
。让我们运行它。以下是输出{ "count":1281, "next":"https://pokeapi.co/api/v2/pokemon?offset=2&limit=2", "previous":null, "results":[ { "name":"bulbasaur", "url":"https://pokeapi.co/api/v2/pokemon/1/" }, { "name":"ivysaur", "url":"https://pokeapi.co/api/v2/pokemon/2/" } ] }
如果您不使用查询参数,返回的数据将仅显示 2 个神奇宝贝,而不是 20 个。您已成功限制返回的数据。
注意:如果您有多个查询参数,则可以附加下一个参数并用与号(“&”)分隔它们。即
https://pokeapi.co/api/v2/pokemon?offset=2&limit=2