如何在 PHP 客户端中使用 Geekflare API

已发表: 2022-10-25

在本指南中,我们将介绍可用于连接 Geekflare API 的不同 PHP 客户端。

具体来说,我们将介绍如何使用 Geekflare API 和file_get_contents函数、Guzzle、HTTPful 和 Symfony 的 HTTPS 客户端。

什么是 Geekflare API?

Geekflare 提供了一组免费工具,您可以使用它们来监控您网站的性能。 这些工具包括断链分析器、加载时间和 DNS 检查器。 这些工具可以通过 Web 界面或 API 在线访问。

该 API 基于 HTTP,可以从任何具有 HTTP 客户端库的编程语言访问。 API 有一个慷慨的免费层,您无需提供付款信息即可开始使用。

我们将要建造的东西

我们将编写一个可从命令行执行的脚本,该脚本将计算加载 Google 网站并将其打印到终端所需的时间。 我们将使用不同的 PHP HTTP 客户端来实现这个简单的程序,以演示使用 API 的样子。

具体来说,我们将使用内置函数——file_get_contents file_get_contents()php_curl ,以及扩展 Guzzle PHP。 无论这些示例看起来多么简单,它们都展示了使用 Geekflare API 的核心概念。

先决条件

要继续学习,您需要事先了解 PHP 并将其安装在您的计算机上。 此外,您将需要 Composer 来管理扩展。

最后,您还需要一个文本编辑器来编写代码。在我的例子中,我将使用 Visual Studio Code,一个来自 Microsoft 的流行的开源文本编辑器。 您可以从 Visual Studio Code 网站下载它。

Geekflare API 概述

Geekflare API 有不同的端点,具体取决于您想要做什么。 端点及其相关文档的完整列表可以在文档页面上找到。

创建 Geekflare 帐户

要开始使用 API,您需要通过转到 API 登录页面并单击注册按钮来创建一个帐户。 注册完成后,您将被带到仪表板,您将在其中看到您的 API 密钥。 仪表板应该如下图所示。 出于安全原因,我已将我的 API 密钥涂黑。

Geekflare-Dashboard-1

在您发出的每个 API 请求中,您都需要提供此密钥作为请求标头。 很快,您将看到如何做到这一点。

创建 Geekflare 帐户并安装 PHP 后,我们就可以开始创建项目了。

创建项目文件夹

首先,创建一个文件夹,我们将在其中存储项目文件。 之后,创建以下文件

  • .env
  • with_curl.php
  • with_file_get_contents.php
  • with_guzzle.php

之后,运行以下命令安装vlucas/phpdotenvguzzlehttp/guzzle guzzle 扩展

composer require vlucas/phpdotenv guzzlehttp/guzzle

此时,您的项目文件夹应如下所示:

截图来自 2022-10-17-10-55-35

现在打开.env文件并添加以下代码行,将<your-api-key>替换为 Geekflare 仪表板中的实际 API 密钥:

 API_KEY=<your-api-key>

使用 file_get_contents()

我们可以用来发出 HTTP 请求的第一种方法是调用 PHP 中内置的file_get_contents()函数。 file_get_contents()函数的函数签名如下:

 file_get_contents(path, include_path, context)

虽然该方法通常用于读取本地存储中文件的内容,但我们可以使用它来读取 Web 资源,例如 API 端点返回的数据。

现在开始,打开with_file_get_contents.php并添加样板 PHP 代码。

 <?php // all the code to be inserted here ?>

接下来,我们可以开始加载扩展。 将以下代码行添加到您的文件中

require_once('vendor/autoload.php');

接下来,我们可以加载我们的环境变量,其中包括 API 密钥

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();

然后,我们可以定义有效载荷。 这将是我们将作为请求正文的一部分发送的数据

$payload = json_encode([ "url" => "https://www.google.com", "proxyCountry" => "us", "followRedirect" => true ]);

我们创建了一个有效负载变量并将其分配给一个 JSON 字符串,该字符串包含urlproxyCountryfollowRedirect作为属性。

url属性指定我们要检查其加载时间的网页。

proxyCountry是我们要用来发出请求的服务器的位置。 在这种情况下,我们使用的是美国服务器,但您可以选择印度、中国、英国和法国。 您可以阅读文档以获取更多详细信息。

然后followRedirect指定代理服务器是否应该遵循任何重定向并测量最终响应或第一次重定向的响应时间。

之后,我们可以通过添加以下代码来创建将配置我们的请求的选项:

 $options = [ "http" => [ "method" => "POST", "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']), "content" => $payload ] ];

通过这样做,我们创建了一个选项对象,指定我们的 HTTP 方法是 POST,并且我们有一个标头指定两个属性,内容类型为 JSON, x-api-key作为您在.env文件并已作为环境变量加载。

接下来,我们可以通过创建一个将写入选项的流来发出请求:

 $context = stream_context_create($options);

接下来,我们调用file_get_contents()方法来发出请求并将响应存储为变量。

 $response = file_get_contents("https://api.geekflare.com/loadtime", false, $context);

我们向https://api.geekflare.com/loadtime提出了请求。 false 告诉 PHP 不要使用该路径。 我们将创建的上下文传递给方法。

为了显示响应,我们将使用如下输出。

 echo "Loadtime: " . json_decode($response)->data->total . "\n";

最后,您的文件应如下所示:

 <?php require_once('vendor/autoload.php'); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $payload = json_encode([ "url" => "https://www.google.com", "proxyCountry" => "us", "followRedirect" => true ]); $options = [ "http" => [ "method" => "POST", "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']), "content" => $payload ] ]; $context = stream_context_create($options); $response = file_get_contents("https://api.geekflare.com/loadtime", false, $context); echo "Loadtime: " . json_decode($response)->data->total . "\n"; ?>

当您使用以下命令运行文件时:

 php with_file_get_contents.php

您将获得以下输出

Loadtime: 81

使用卷曲

cURL 是一个命令行实用程序,用于发出客户端 URL 请求。 在 PHP 中,可以使用 php-curl 实用程序来使用它。 要开始使用它,请打开with_curl.php文件并编写样板 PHP

 <?php // all new code will be written here ?>

然后让我们导入扩展并加载.env文件中定义的 API_KEY 环境变量

require_once('vendor/autoload.php'); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();

接下来,我们将创建一个变量来将对象的标头存储为一个数组,其中数组中的每个单独元素都是一个特定的标头。

 $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

我们定义了两个标头,一个用于内容类型,一个用于 API 密钥。

然后我们可以定义请求的主体。

 $body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]);

之后,我们可以使用curl_init()函数创建一个 curl 会话。 我们可以将要发出请求的 URL 作为参数传递给函数调用。

 $ch = curl_init("https://api.geekflare.com/loadtime");

现在我们可以通过将 header 和 body 定义为 session 的选项来将所有内容放在一起。 为此,我们将使用curl_setopt_array()函数

curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $body ]);

要发出请求,我们将调用curl_exec()函数

$response = curl_exec($ch);

我们已将响应存储在$response变量中,因此我们可以关闭会话以释放会话正在使用的系统资源。

 curl_close($ch);

最后,我们可以使用var_dump将响应打印到屏幕上。

 var_dump($response);

最后,您的脚本文件应如下所示

<?php require_once('vendor/autoload.php'); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']]; $body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]); $ch = curl_init("https://api.geekflare.com/loadtime"); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $body ]); $response = curl_exec($ch); curl_close($ch); var_dump($response); ?>

当我们使用php with_curl.php运行脚本时,您应该得到以下输出:

 {"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

请求成功完成,API 响应 JSON0 数据。 您可以随意使用这些数据。

带大嘴

在本教程的最后一部分,我们将使用 Guzzle 编写脚本。 与往常一样,我们首先在with_guzzle.php中插入 PHP 样板文件

<?php // all the code will go here ?>

然后,我们可以导入扩展和 Guzzle 客户端和请求对象并加载环境变量。

 require_once('vendor/autoload.php'); use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request;

接下来,我们可以加载环境变量。

 $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();

之后,我们可以实例化一个 Guzzle HTTP 客户端

$client = new GuzzleHttp\Client();

然后我们可以继续为我们的请求创建标头

$headers = [ 'x-api-key' => $_ENV['API_KEY'], 'Content-Type' => 'application/json' ];

接下来,我们可以定义请求的正文

$body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]);

然后,我们可以通过实例化 Request 类并传入 API 端点 URL、标头和正文来发出请求。

 $request = new Request('POST', 'https://api.geekflare.com/loadtime', $headers, $body);

然后我们可以通过添加这行代码来发送请求:

 $response = $client->sendAsync($request)->wait();

发送请求后,我们可以接收请求的正文,如下所示

$response_body = $response->getBody();

最后,我们可以解码 JSON 响应并打印出加载时间

echo "Loadtime: " . json_decode($response_body)->data->total . "\n";

所以,最后,文件应该是这样的:

 <?php require_once('vendor/autoload.php'); use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $client = new GuzzleHttp\Client(); $headers = [ 'x-api-key' => $_ENV['API_KEY'], 'Content-Type' => 'application/json' ]; $body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]); $request = new Request('POST', 'https://api.geekflare.com/loadtime', $headers, $body); $response = $client->sendAsync($request)->wait(); $response_body = $response->getBody(); echo "Loadtime: " . json_decode($response_body)->data->total . "\n"; ?>

当您使用以下命令执行脚本时:

 $php with_guzzle.php

你会看到响应:

 Loadtime: 130

结论

在本文中,我们介绍了您在创建需要 Geekflare API 的 PHP 项目时可能想要使用的不同客户端。

虽然这个项目中的脚本使用命令行作为输出的主要形式,但实际项目可以在网页上呈现响应或将其写入文件。 本文中的示例脚本很简单,但它们演示了使用 Geekflare API 的核心概念。 要使用不同的 API,您可以更改端点并在请求正文中传递不同的选项。

您可能还对如何在 Javascript 中使用 Geekflare DNS Lookup API 感兴趣。