如何在 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 密鑰塗黑。

在您發出的每個 API 請求中,您都需要提供此密鑰作為請求標頭。 很快,您將看到如何做到這一點。
創建 Geekflare 帳戶並安裝 PHP 後,我們就可以開始創建項目了。
創建項目文件夾
首先,創建一個文件夾,我們將在其中存儲項目文件。 之後,創建以下文件
.env
-
with_curl.php
-
with_file_get_contents.php
-
with_guzzle.php
之後,運行以下命令安裝vlucas/phpdotenv
和guzzlehttp/guzzle
guzzle 擴展
composer require vlucas/phpdotenv guzzlehttp/guzzle
此時,您的項目文件夾應如下所示:

現在打開.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 字符串,該字符串包含url
、 proxyCountry
和followRedirect
作為屬性。
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 感興趣。