找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 248|回复: 0

HTTP 和 WordPress HTTP API 指南 – 第 2 部分

[复制链接]

2

主题

0

回帖

8

积分

新手上路

积分
8
发表于 2023-11-11 12:30:03 | 显示全部楼层 |阅读模式
版本左右开始,WordPress 就有了一个 API 来处理 HTTP。它由 9 个函数组成,您可能只会使用其中的几个。这些功能可以分为两组:一组用于发出请求,另一组用于读取结果。 wp_remote_get()、wp_remote_post()、wp_remote_head()分别使用 GET、POST 和 HEAD 方法从给定的 URL 请求数据。该函数wp_remote_request()是一个通用函数,允许您指定 URL 和附带的方法。 用于读取响应的函数同样具有自我描述性。wp_remote_retrieve_body()获取响应的正文,该函数wp_remote_retrieve_header()获取一个命名标头。该函数wp_remote_retrieve_headers()以数组的形式返回所有标头,wp_remote_retrieve_response_code()给出响应代码并wp_remote_retrieve_response_message()返回响应消息。 这基本上就是全部内容,我们需要知道的是如何指定标头来发出正确的请求。 提出请求 让我们使用该函数wp_remote_get()来发出请求。

我们将使用第一个参数来设置 URL,使用第二个参数来添加参数。您可以在The Codex中找到完整的受支持参数集,我将在此处重点关注标头信息。 要从 Twitter 用户获取状态消息,您必须使用该路由statuses/user_timeline.json和 URL https://api.twitter.com/1.1,并传递一个不记名令牌进行 新西兰 WhatsApp 号码数据 身份验证——这是我在上面生成的。不记名令牌需要以 的形式添加为授权标头Bearer发出此请求会返回大量信息,可以通过打印变量来获取这些信息$response。您还可以使用类型函数wp_remote_retrieve来获取响应的一部分。 大多数情况下,正文包含必要的信息,通常采用 JSON 格式。在 PHP 中,我们可以轻松地将其转换为数组: $data = json_decode( $response['body'], true ) GitHub API 访问 让我们构建一个快速示例,在 WordPress 小部件中列出我们最新的 Github 存储库。首先,您必须登录 Github 并转到您的个人资料,对其进行编辑,然后转到“个人访问令牌”,您可以在其中生成令牌。 Github 访问令牌 Github 访问令牌 下一步,让我们创建一个空的小部件模板。该小部件将有两个选项:一个用于添加 API 令牌的位置和一个标题。这不是最好的方法,因为它将您的令牌保存在数据库中,但对于我们的示例目的来说它很好。




我不想在这里过多讨论小部件是如何创建的。如果您想了解更多信息,请查看Codex 中的Widgets API指南。重要的是该方法的内容widget()将显示我们的小部件的内容。在该函数中,我们将使用 HTTP 请求连接到 Github,然后格式化并输出响应。这就是所有这一切的完成方式——以下所有代码都在方法中widget()。 它首先在顶部简单地添加小部件信封元素和标题,然后通过关闭小部件信封结束,代码的主要部分位于两者之间。 首先,我配置 HTTP 请求标头。第一个问题可能是:我如何知道要添加哪些参数?标头Authorization是最重要的部分,我在API 文档的“身份验证”部分中阅读了它。 标题Accept不是必需的,但指南鼓励您在同一文档页面的顶部提供它。 然后,我json_decode()在响应正文中使用并简单地循环生成的数组,创建链接列表。 下一步 如果您认为这很容易,那么您绝对是对的,确实如此!困难的部分是确保覆盖所有角度而不浪费资源。代码中有两个问题需要我们立即注意。 如果 API 出现问题——可能包括未知错误、速率受限的帐户等——我们可能会遇到一个大错误。我们只是在显示列表之前检查正文是否为空。 如果我们手上有错误,那么正文很可能包含错误信息,因此在这种情况下它也不会为空。我们可能会在错误响应中列出这些项目,但由于这些项目没有属性url,name我们最终会得到空列表项目和 PHP 警告。 第二个问题是这根本就是浪费。我们在每次页面加载时都会连接到外部服务,这可能会对我们的服务器造成影响,并可能导致 Github 上的帐户受到限制。即使情况并非如此,您的 Github 存储库列表在两个页面视图之间发生变化的可能性有多大,以及此处拥有最新信息有多重要? 我个人建议在这种情况下使用瞬态。瞬态允许您存储带有过期时间的请求响应。如果您将过期时间设置为一天,数据将从 Github 获取一次,然后在接下来的 24 小时内直接从数据库获取。过期后会再次从 Github 获取并保存到数据库中。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2024-9-21 00:50 , Processed in 0.072358 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表